首页 > 其他分享 >chatglm3-6b尝试

chatglm3-6b尝试

时间:2023-11-15 17:33:21浏览次数:35  
标签:尝试 6b -- chatglm3 model dir history

十月底智谱开元路chatglm3,果断来尝试一下。

1.ChatGLM3 亮点

ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了 代码执行(Code Interpreter)和 Agent 任务等新特性。

2.前期准备:

python:3.10+,transformers 库版本推荐为 4.30.2torch 推荐使用 2.0 及以上的版本,以获得最佳的推理性能。

chatglm3-6b支持cpu推理,但是在本人32g内存上的电脑实测,emmm,还是准备一台gpu服务器吧。3.

3.环境安装:

首先需要下载本仓库:

git clone https://github.com/THUDM/ChatGLM3

然后使用 pip 安装依赖:

pip install -r requirements.txt

模型下载:

Hugging Face 速度慢的建议从https://modelscope.cn/models/ZhipuAI/chatglm3-6b/summary获取

git clone https://www.modelscope.cn/ZhipuAI/chatglm3-6b.git

4.本地加载模型:

import os
import torch
from transformers import AutoConfig, AutoModel, AutoTokenizer


# 载入Tokenizer
model_dir='/root/autodl-tmp/chatglm3-6b'
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
config = AutoConfig.from_pretrained(model_dir, trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained(model_dir, config=config, trust_remote_code=True).cuda()

简单的对话

history=[]
query = "你好呀"
response, history = model.chat(tokenizer, query, history=history)
print(query)
print(response)

运行包里的web_demo.py和web_demo2.py可以生成一个可以在线对话的网页

5.模型微调:

模型微调大概分为多轮对话和单轮对话两种方式,先准备训练手续,多轮对话微调可以先准备一个如下数据格式的json文件

[
  {
    "tools": [],
    "conversations": [
      {
        "role": "system",
        "content": "我是搬砖小助手"
      },
      {
        "role": "user",
        "content": "你好呀"
      },
      {
        "role": "assistant",
        "content": "你好呀,今天又是搬砖的一天"
      }
    ]
  }
]

创建sh文件并运行

set -ex

PRE_SEQ_LEN=128
LR=2e-2
NUM_GPUS=1
MAX_SEQ_LEN=2048
DEV_BATCH_SIZE=2
GRAD_ACCUMULARION_STEPS=8
MAX_STEP=1000
SAVE_INTERVAL=200

DATASTR=`date +%Y%m%d-%H%M%S`
RUN_NAME=tool_alpaca_pt


BASE_MODEL_PATH='/root/autodl-tmp/chatglm3-6b'
DATASET_PATH='/root/chatglm3-6b/finetune_demo/formatted_data/train.json'
OUTPUT_DIR='/root/autodl-tmp/check-point'
mkdir -p $OUTPUT_DIR

torchrun --standalone --nnodes=1 --nproc_per_node=$NUM_GPUS finetune.py \
    --train_format multi-turn \
    --train_file $DATASET_PATH \
    --max_seq_length $MAX_SEQ_LEN \
    --preprocessing_num_workers 1 \
    --model_name_or_path $BASE_MODEL_PATH \
    --output_dir $OUTPUT_DIR \
    --per_device_train_batch_size $DEV_BATCH_SIZE \
    --gradient_accumulation_steps $GRAD_ACCUMULARION_STEPS \
    --max_steps $MAX_STEP \
    --logging_steps 1 \
    --save_steps $SAVE_INTERVAL \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN 2>&1 | tee ${OUTPUT_DIR}/train.log

试试微调后的结果吧

import os
import torch
from transformers import AutoConfig, AutoModel, AutoTokenizer

model_dir='/root/autodl-tmp/chatglm3-6b'
CHECKPOINT_PATH='/root/autodl-tmp/check-point/checkpoint-200'
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
config = AutoConfig.from_pretrained(model_dir, trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained(model_dir, config=config, trust_remote_code=True).cuda()
prefix_state_dict = torch.load(os.path.join(CHECKPOINT_PATH, "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():
    if k.startswith("transformer.prefix_encoder."):
        new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
model = model.eval()

system_info = {"role": "system", "content": "我是搬砖小助手"}
history = [system_info] query = "你好呀" response, history = model.chat(tokenizer, query, history=history) print(query) print(response)

6.工具调用:

tools = [
    {
        "name": "track",
        "description": "追踪指定股票的实时价格",
        "parameters": {
            "type": "object",
            "properties": {
                "symbol": {
                    "description": "需要追踪的股票代码"
                }
            },
            "required": ['symbol']
        }
    }
]
system_info = {"role": "system", "content": "Answer the following questions as best as you can. You have access to the following tools:", "tools": tools}

注意:目前 ChatGLM3-6B 的工具调用只支持通过 chat 方法,不支持 stream_chat 方法。根本原因是stream_chat 是一个个吐字的,没法中间做手脚将工具调用结果进行处理。具体可以看这位大佬的文章:https://zhuanlan.zhihu.com/p/664233831

history = [system_info]
query = "帮我查询股票10111的价格"
response, history = model.chat(tokenizer, query, history=history)
print(response)
result = json.dumps({"price": 12412}, ensure_ascii=False)
response, history = model.chat(tokenizer, result, history=history, role="observation")
print(response)

标签:尝试,6b,--,chatglm3,model,dir,history
From: https://www.cnblogs.com/suzumiyahr/p/17834357.html

相关文章

  • 最后的一次努力:尝试解决百度收录与排名问题
    2023年9月21日我们完全解除了对百度蜘蛛网段116.179.37.0/24的屏蔽,满怀希望地期待着百度的回心转意,心有余悸地担心着再也回不去。当我们从百度那边得知——之前百度蜘蛛疯狂爬取与博文页面ajax请求太多有关,为了大幅减少ajax请求,我们重构代码花了很大力气,以表示我们的真心诚意。......
  • ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级
    ChatGLM3-6B:新一代开源双语对话语言模型,流畅对话与低部署门槛再升级1.ChatGLM3简介ChatGLM3是智谱AI和清华大学KEG实验室联合发布的新一代对话预训练模型。ChatGLM3-6B是ChatGLM3系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6......
  • 会员权益尝试:会员同城微信群
    会员救园在艰难而努力地向前推进,在线购买功能即将完成开发,上周推出会员专享的云服务器特惠,这周我们继续尝试拓展新的会员权益。同是园子的会员,同在一个城市,这样一个偶然的交集,如果再创造一个线下碰面的可能机会,也许会发生一些故事,碰撞出一些火花——也许会从园友到朋友,也许会从同......
  • Vue 在内部对异步队列尝试使用原生的 Promise.then、MutationObserver 和 setImmedia
    下列关于Vue的描述错误的是()A当给某个组件修改某个值时,该组件不会立即重新渲染BVue内部使用原生Promise.then、MutationObserver和setImmediate实现异步队列,不会采用setTimeout(fn,0)C$nextTick()返回一个Promise对象D$nextTick()可以配合async/await使用正确答案:B官......
  • Langchain-Chatchat项目:5.1-ChatGLM3-6B工具调用
      在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base具有在10B以下的基础模型中最强的性能。ChatGLM3-6B采用了全新设计的Prompt格式,除正常的多轮对话外。同时原生支持工具调用(FunctionCall)、代码执行(CodeInterpreter)和Agent任务等复杂场景。本文......
  • CF1196B
    题意:n个数,分割成k个部分,使得每份和都为奇数做法:一个序列的和的奇偶性和偶数没关系,所以只需要考虑奇数的个数现在考虑两个问题:1.如果奇数的个数小于最终要求的k,那么就无法完成分类(即是如果一个数一块也不行)2.如果奇数的个数,记为cnt,cnt的奇偶性和k的奇偶性不同,例如cnt为3,k为2......
  • xv6book阅读 chapter1
    xv6book主要研究了xv6如何实现它的类Unix接口,但是其思想和概念不仅仅适用于Unix。任何操作系统都必须将进程多路复用到底层硬件上,相互隔离进程,并提供受控制的进程间通信机制。1了解xv6xv6是一个模仿unix内部设计的操作系统,其提供了unix中对应的部分系统调用。理解xv6对于我们理......
  • ChatGLM3本地部署
    如何用免费GPU线上跑AI项目实践-飞书云文档(feishu.cn)准备步骤:1.配置好环境pytorch2.0.1python3.92.进入JupyterLab进入开发环境3.将glm3从开源项目中git下来,这里在terminal输入指令后,输入github的账号密码进行git。gitclone命令:gitclone网址存储地址 4.下载Pytho......
  • 使用 Sealos 将 ChatGLM3 接入 FastGPT,打造完全私有化 AI 客服
    FastGPT是一款专为客服问答场景而定制的开箱即用的AI知识库问答系统。该系统具备可视化工作流功能,允许用户灵活地设计复杂的问答流程,几乎能满足各种客服需求。在国内市场环境下,离线部署对于企业客户尤为重要。由于数据安全和隐私保护的考虑,企业通常不愿意将敏感数据上传到线上......
  • 转:ChatGLM3-6B测评
    全新ChatGLM3-6B针对七项RAG能力的评测,谁最适合RAG?原创这个男人来自千祥土猛的员外2023-10-3017:32发表于浙江https://mp.weixin.qq.com/s/6fnZt2sBTakfXZMcS-scPA1.实体提取实体和关系提取当然也可以使用NER,但是有大模型,为什么不用呢,而且它后面还可以做格式,所以在RAG应......