拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ChatGLM-6B 部署与微调完全指南:从环境安装、量化推理到 P-Tuning v2 高效参数微调

ChatGLM-6B 部署与微调完全指南:从环境安装、量化推理到 P-Tuning v2 高效参数微调
  • 大模型
  • 人工智能
  • NLP
  • 本地部署
  • 微调
  • 模型推理服务

【免费下载链接】ChatGLM-6B-code

ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型

项目地址:https://gitcode.com/zai-org/ChatGLM-6B-code
点击查看免费下载

导读

ChatGLM-6B 是智谱 AI 开源的 62 亿参数中英双语对话语言模型,基于 GLM(General Language Model)架构,采用与 ChatGPT 相似的技术路线,针对中文问答与对话做了专门优化。本文以仓库根目录 README.md 为核心,结合 cli_demo.py、web_demo.py、api.py、utils.py 与 ptuning/ 目录下的真实源码与配置,系统讲解:从环境安装与代码调用、网页/命令行/API 三种部署形态,到 INT4/INT8 量化、CPU、Mac、多卡等低成本部署方案,再到基于 P-Tuning v2 的高效参数微调全流程。读完本文,你将掌握 ChatGLM-6B 在消费级显卡上的完整落地路径。

模型概览与开源形态

ChatGLM-6B 是开源的、支持中英双语的对话语言模型,具有62 亿(6B)参数。它基于 General Language Model(GLM)架构,经过约 1T 标识符的中英双语训练,并辅以监督微调、反馈自助、人类反馈强化学习(RLHF)等对齐技术,能够生成相当符合人类偏好的回答。

其最核心的工程价值在于低门槛本地部署:结合模型量化技术,用户可以在消费级显卡上运行模型——INT4 量化级别下推理最低只需 6GB 显存。同时,为了方便下游开发者针对自身应用场景定制模型,项目实现了基于 P-Tuning v2 的高效参数微调方法(使用指南见 ptuning/README.md),INT4 量化级别下最低只需 7GB 显存即可启动微调。

注意:ChatGLM-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。代码遵循 Apache-2.0 协议,模型权重需遵循 Model License。

硬件需求一览

官方在 README.md 中给出了明确的显存需求表格,这是规划部署硬件的第一步:

量化等级最低 GPU 显存(推理)最低 GPU 显存(高效参数微调)
FP16(无量化)13 GB14 GB
INT88 GB9 GB
INT46 GB7 GB

可以看出:推理与微调的显存门槛由量化等级决定,选择 INT4 量化可以将门槛压缩到消费级显卡(如 6GB/7GB 显存)即可满足。

环境安装

使用 pip 安装依赖:

pip install -r requirements.txt

requirements.txt 中锁定的关键依赖包括:

protobuf transformers==4.27.1 cpm_kernels torch>=1.10 gradio mdtex2html sentencepiece accelerate

其中transformers库版本推荐为4.27.1,但理论上不低于4.23.1即可。

此外,如果需要在 CPU 上运行量化后的模型,还需要安装gcc与openmp。多数 Linux 发行版默认已安装;Windows 可在安装 TDM-GCC 时勾选openmp(Windows 测试环境 gcc 版本为 TDM-GCC 10.3.0,Linux 为 gcc 11.3.0);MacOS 上的安装方式可参考 FAQ.md。

代码调用:最小可运行示例

通过 Hugging Face Transformers 的AutoTokenizer与AutoModel即可加载模型进行对话:

>>> from transformers import AutoTokenizer, AutoModel >>> tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True) >>> model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda() >>> model = model.eval() >>> response, history = model.chat(tokenizer, "你好", history=[]) >>> print(response) 你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。 >>> response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history) >>> print(response) 晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法: 1. 制定规律的睡眠时间表:保持规律的睡眠时间表可以帮助你建立健康的睡眠习惯,使你更容易入睡。尽量在每天的相同时间上床,并在同一时间起床。 2. 创造一个舒适的睡眠环境:确保睡眠环境舒适,安静,黑暗且温度适宜。可以使用舒适的床上用品,并保持房间通风。 3. 放松身心:在睡前做些放松的活动,例如泡个热水澡,听些轻柔的音乐,阅读一些有趣的书籍等,有助于缓解紧张和焦虑,使你更容易入睡。 4. 避免饮用含有咖啡因的饮料:咖啡因是一种刺激性物质,会影响你的睡眠质量。尽量避免在睡前饮用含有咖啡因的饮料,例如咖啡,茶和可乐。 5. 避免在床上做与睡眠无关的事情:在床上做些与睡眠无关的事情,例如看电影,玩游戏或工作等,可能会干扰你的睡眠。 6. 尝试呼吸技巧:深呼吸是一种放松技巧,可以帮助你缓解紧张和焦虑,使你更容易入睡。试着慢慢吸气,保持几秒钟,然后缓慢呼气。 如果这些方法无法帮助你入睡,你可以考虑咨询医生或睡眠专家,寻求进一步的建议。

关键点说明:

  • trust_remote_code=True是必须的,因为 ChatGLM-6B 的模型实现随 checkpoint 一起托管在 Hugging Face 上,需要允许 transformers 执行远端代码。
  • .half()以 FP16 精度加载,.cuda()将模型放到 GPU;后续的model.eval()切换到推理模式。
  • model.chat(tokenizer, prompt, history=history)返回(response, history),history需要回传以维持多轮对话上下文。

固定模型实现版本:模型的实现仍在变动中,如果希望固定使用的模型实现以保证兼容性,可以在from_pretrained调用中增加revision="v1.1.0"参数。v1.1.0是当前最新的版本号(对应本地仓库可用git checkout v1.1.0固定)。

从本地加载模型

上述代码会由transformers自动下载模型实现和参数。如果网络环境较差导致下载缓慢或失败,可以先将模型下载到本地再从本地加载:

# 先安装 Git LFS,然后克隆完整模型仓库 git clone https://huggingface.co/THUDM/chatglm-6b # 若只想下载模型实现(跳过 LFS 大文件),可执行: GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm-6b

对于第二种方式,需要手动下载模型参数文件,并将下载的文件替换到本地的chatglm-6b目录下。之后将代码中的THUDM/chatglm-6b替换为本地chatglm-6b文件夹的路径即可。

后续所有的部署方式(量化、CPU、Mac、多卡)都支持本地路径加载,只需替换THUDM/chatglm-6b为本地路径。

Demo 与 API 部署

仓库提供了三种可直接运行的交互形态,全部基于 Gradio 或 FastAPI 构建:

网页版 Demo

安装 Gradio(pip install gradio)后运行 web_demo.py:

python web_demo.py

程序会启动一个 Web Server 并输出地址,浏览器打开即可使用。该 Demo 实现了打字机效果,速度体验大幅提升。从 web_demo.py 的源码可以看到,其核心predict函数调用的是model.stream_chat(tokenizer, input, history, max_length=max_length, top_p=top_p, temperature=temperature),以流式方式逐 token 输出;界面侧通过parse_text将 markdown 代码块转换为 HTML 高亮(源码参考自 ChuanhuChatGPT)。

关于公网访问:由于国内 Gradio 网络访问较慢,启用demo.queue().launch(share=True, inbrowser=True)时所有网络会经过 Gradio 服务器转发,导致打字机体验大幅下降,因此默认启动方式已改为share=False;如有公网访问需求,可修改为share=True启动。界面默认参数可在 web_demo.py 中看到:max_length默认 2048、top_p默认 0.7、temperature默认 0.95。

命令行 Demo

运行 cli_demo.py:

python cli_demo.py

程序在命令行中进行交互式对话:输入指示回车即可生成回复,输入clear清空对话历史,输入stop终止程序。从源码看,它使用model.stream_chat流式生成,每生成 8 个 token 刷新一次屏幕(cli_demo.py),并注册了SIGINT信号处理器支持 Ctrl+C 中断流式输出。

API 部署

首先安装额外依赖pip install fastapi uvicorn,然后运行 api.py:

python api.py

默认部署在本地 8000 端口,通过 POST 方法调用:

curl -X POST "http://127.0.0.1:8000" \ -H 'Content-Type: application/json' \ -d '{"prompt": "你好", "history": []}'

返回值为:

{ "response":"你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。", "history":[["你好","你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"]], "status":200, "time":"2023-03-23 21:38:40" }

从 api.py 的源码可以看到更多实现细节:

  • 接口接收prompt、history、max_length、top_p、temperature五个字段,其中后三个可选,默认值分别为 2048、0.7、0.95;
  • 服务端在每次请求后调用torch_gc()(api.py)主动清空 CUDA 缓存并执行ipc_collect,以缓解长时间服务导致的显存碎片化;
  • uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)监听所有网卡,可通过0.0.0.0:8000对外提供服务。

低成本部署:模型量化

默认情况下模型以 FP16 精度加载,运行需要约 13GB 显存。如果显存有限,可以尝试量化加载(目前只支持 4/8 bit 量化):

# 按需修改,目前只支持 4/8 bit 量化 model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).quantize(8).half().cuda()

显存占用实测情况(进行 2 至 3 轮对话后):8-bit 量化下 GPU 显存占用约为 10GB,4-bit 量化下仅需 6GB。随着对话轮数增多显存占用也随之增长。由于采用了相对位置编码,理论上 ChatGLM-6B 支持无限长的 context-length,但总长度超过 2048(训练长度)后性能会逐渐下降。

另外两点需要注意:

  1. 量化会带来一定性能损失,但经过测试,ChatGLM-6B 在 4-bit 量化下仍能进行自然流畅的生成;
  2. 量化过程需要在内存中首先加载 FP16 格式的模型,消耗约 13GB 内存。如果内存不足,可以直接加载官方提供的量化后模型,INT4 量化后的模型仅需约 5.2GB 内存:
# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8" model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).half().cuda()

CPU 部署

没有 GPU 时也可以在 CPU 上推理(速度更慢,需要约 32GB 内存):

model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).float()

内存不足时直接加载量化模型:

# INT8 量化的模型将"THUDM/chatglm-6b-int4"改为"THUDM/chatglm-6b-int8" model = AutoModel.from_pretrained("THUDM/chatglm-6b-int4", trust_remote_code=True).float()

如果遇到报错Could not find module 'nvcuda.dll'或RuntimeError: Unknown platform: darwin(MacOS),请改用从本地加载模型的方式。

Mac 部署(MPS 后端)

对于搭载 Apple Silicon 或 AMD GPU 的 Mac,可以使用 MPS 后端在 GPU 上运行。需要参考 Apple 官方说明安装 PyTorch-Nightly(正确版本号应为2.1.0.dev2023xxxx,而不是 2.0.0)。

目前在 MacOS 上只支持从本地加载模型,使用 mps 后端:

model = AutoModel.from_pretrained("your local path", trust_remote_code=True).half().to('mps')

注意两点:

  • 加载半精度模型需要约 13GB 内存。内存较小的机器(如 16GB 内存的 MacBook Pro)在空余内存不足时会使用硬盘虚拟内存,导致推理速度严重变慢,此时可使用chatglm-6b-int4等量化模型;
  • 由于 GPU 上量化的 kernel 使用 CUDA 编写,无法在 MacOS 上使用,因此 Mac 上量化模型只能使用 CPU 推理(.float()),并需单独安装 OpenMP(见 FAQ.md)以充分使用 CPU 并行。

多卡部署

如果有多张 GPU 但单张显存不足以容纳完整模型,可以将模型切分到多张 GPU 上。首先安装accelerate(pip install accelerate,requirements.txt 中已包含),然后通过 utils.py 提供的工具加载:

from utils import load_model_on_gpus model = load_model_on_gpus("THUDM/chatglm-6b", num_gpus=2)

从 utils.py 源码可以看到其实现原理:

  • auto_configure_device_map(num_gpus)将模型按层切分:transformer.word_embeddings、transformer.final_layernorm、lm_head固定放在第 0 张卡,28 层transformer.layers按每张卡30 / num_gpus层的比例均匀分配到各卡;
  • 分配时特意将transformer.word_embeddings、final_layernorm、lm_head都放在第一张卡上,这是为了规避 Linux 下torch.embedding的 weight 与 input 不在同一 device 导致的 RuntimeError(代码注释中说明了该 bugfix);
  • 底层使用accelerate.dispatch_model完成实际的模型分发;
  • 默认均匀切分,也可以通过device_map参数自定义分配。

num_gpus可改为你希望使用的 GPU 数量。

基于 P-Tuning v2 的高效参数微调

为了针对下游应用场景定制模型,项目实现了基于 P-Tuning v2 的高效参数微调,完整指南见 ptuning/README.md。P-Tuning v2 将需要微调的参数量减少到原来的0.1%,再通过模型量化、Gradient Checkpoint 等方法,最低只需 7GB 显存即可运行微调。

下面以 ADGEN(广告生成)数据集为例介绍完整流程。

软件依赖

运行微调需要4.27.1版本的transformers。除 ChatGLM-6B 的依赖之外,还需要安装:

pip install rouge_chinese nltk jieba datasets

数据集格式

ADGEN 数据集的任务是根据输入(content)生成一段广告词(summary),单条数据形如:

{ "content": "类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖*衣款式#抽绳", "summary": "这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点,穿在身上有着很好的显瘦效果。领口装饰了一个可爱的抽绳,漂亮的绳结展现出了十足的个性,配合时尚的泡泡袖型,尽显女性甜美可爱的气息。" }

下载处理好的 ADGEN 数据集后,将解压后的AdvertiseGen目录放到 ptuning/ 目录下。

训练(P-Tuning v2)

运行以下指令进行训练:

bash train.sh

ptuning/train.sh 中的PRE_SEQ_LEN和LR分别是soft prompt 长度和训练学习率,可以调节以取得最佳效果:

PRE_SEQ_LEN=128 LR=2e-2 CUDA_VISIBLE_DEVICES=0 python3 main.py \ --do_train \ --train_file AdvertiseGen/train.json \ --validation_file AdvertiseGen/dev.json \ --prompt_column content \ --response_column summary \ --overwrite_cache \ --model_name_or_path THUDM/chatglm-6b \ --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \ --overwrite_output_dir \ --max_source_length 64 \ --max_target_length 64 \ --per_device_train_batch_size 1 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 16 \ --predict_with_generate \ --max_steps 3000 \ --logging_steps 10 \ --save_steps 1000 \ --learning_rate $LR \ --pre_seq_len $PRE_SEQ_LEN \ --quantization_bit 4

关键参数说明:

  • P-Tuning v2 方法会冻结全部模型参数,只训练 soft prompt(PrefixEncoder)部分;
  • 可通过调整quantization_bit来控制原始模型的量化等级(4 或 8),不加此选项则为 FP16 精度加载;
  • 在默认配置quantization_bit=4、per_device_train_batch_size=1、gradient_accumulation_steps=16下,INT4 的模型参数被冻结,一次训练迭代以 1 的批处理大小进行 16 次累加的前后向传播,等效为 16 的总批处理大小,此时最低只需 6.7G 显存;
  • 若想在同等批处理大小下提升训练效率,可在二者乘积不变的情况下加大per_device_train_batch_size,但这会带来更多显存消耗,请根据实际情况酌情调整;
  • 如果想要从本地加载模型,可将train.sh中的THUDM/chatglm-6b改为本地模型路径。

全参数 Finetune

如果需要全参数 Finetune,需要安装 DeepSpeed,然后运行:

bash ds_train_finetune.sh

(对应配置文件为 ptuning/deepspeed.json,训练脚本为 ptuning/ds_train_finetune.sh。)

推理(评估)

P-Tuning v2 训练时模型只保存 PrefixEncoder 部分的参数,因此推理时需要同时加载原 ChatGLM-6B 模型以及 PrefixEncoder 的权重,需在 ptuning/evaluate.sh 中指定:

--model_name_or_path THUDM/chatglm-6b --ptuning_checkpoint $CHECKPOINT_PATH

仍然兼容旧版全参保存的 Checkpoint,只需跟之前一样设定:

--model_name_or_path $CHECKPOINT_PATH

评测指标为中文 Rouge score 和 BLEU-4。生成的结果保存在./output/adgen-chatglm-6b-pt-8-1e-2/generated_predictions.txt。

微调效果示例

以 ADGEN 数据为例,微调前后对比(详见 ptuning/README.md):

示例 1

  • Input:类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞
  • Output[微调前]: 这件上衣的材质是牛仔布,颜色是白色,风格是简约,图案是刺绣,衣样式是外套,衣款式是破洞。
  • Output[微调后]: 这是一款简约的牛仔外套,破洞设计,将牛仔布破洞,带来一种随意与个性。破洞的牛仔外套,展现出时尚气息,带来一种休闲感。同时,刺绣图案,让整件外套更加立体。

示例 2

  • Input:类型#裙*版型#显瘦*风格#文艺*风格#简约*图案#印花*图案#撞色*裙下摆#压褶*裙长#连衣裙*裙领型#圆领
  • Output[微调前]: 类型#裙*版型#显瘦…(逐条罗列属性,机械复述输入)
  • Output[微调后]: 这是一款文艺范的连衣裙,以印花为元素,采用简约的印花,既能够突出文艺气质,又能够展现简约风。在印花的同时又有领子和裙摆的压褶设计,更加凸显文艺气质。简约而不会过于单调,搭配出街,穿着十分舒适。

可以看出,微调前模型倾向于机械复述输入属性,微调后能够生成自然、有风格的广告文案。

评估结果与实验设置

官方在 ptuning/README.md 中给出了三种微调方式在 ADGEN 上的对比结果:

FinetuneP-tuning v2LoRA
BLEU-48.018.107.62
Rouge-131.2331.1230.60
Rouge-27.367.116.96
Rouge-l25.0824.9724.80
Training Loss3.003.743.32

实验设置(max_source_length=64、max_target_length=64、max_steps=3000)下,各方法的超参数如下:

  • P-tuning v2:pre_seq_len=128、learning_rate=2e-2、quantization_bit=4、per_device_train_batch_size=16、gradient_accumulation_steps=1
  • Finetune:learning_rate=1e-4、fp16、num_gpus=4、per_device_train_batch_size=4、gradient_accumulation_steps=1
  • LoRA:learning_rate=5e-4、per_device_train_batch_size=16、gradient_accumulation_steps=1

微调后模型部署

首先载入 Tokenizer:

from transformers import AutoConfig, AutoModel, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)

情况一:加载新 Checkpoint(只包含 PrefixEncoder 参数)

config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128) model = AutoModel.from_pretrained("THUDM/chatglm-6b", config=config, trust_remote_code=True) 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)

注意:pre_seq_len需要改成你训练时的实际值;若是从本地加载模型,需将THUDM/chatglm-6b改为本地模型路径(注意不是 checkpoint 路径)。

情况二:加载旧 Checkpoint(包含 ChatGLM-6B 及 PrefixEncoder 参数)或全参数微调结果

直接加载整个 Checkpoint 即可:

model = AutoModel.from_pretrained(CHECKPOINT_PATH, trust_remote_code=True)

之后根据需求进行量化和使用:

# Comment out the following line if you don't use quantization model = model.quantize(4) model = model.half().cuda() model.transformer.prefix_encoder.float() model = model.eval() response, history = model.chat(tokenizer, "你好", history=[])

另外,也可以直接运行支持加载 P-Tuning v2 checkpoint 的 ptuning/web_demo.py:

bash web_demo.sh

可能需要修改 ptuning/web_demo.sh 的内容以符合实际的 checkpoint 情况。

使用自己的数据集

修改train.sh和evaluate.sh中的train_file、validation_file和test_file为你自己的 JSON 格式数据集路径,并将prompt_column和response_column改为 JSON 文件中输入文本和输出文本对应的 KEY。可能还需要增大max_source_length和max_target_length来匹配数据集中的最大输入输出长度。

多轮对话数据集微调

如需使用多轮对话数据微调,可以提供聊天历史,例如以下是一个三轮对话的训练数据(JSON lines 格式):

{"prompt": "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "response": "用电脑能读数据流吗?水温多少", "history": []} {"prompt": "95", "response": "上下水管温差怎么样啊?空气是不是都排干净了呢?", "history": [["长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "用电脑能读数据流吗?水温多少"]]} {"prompt": "是的。上下水管都好的", "response": "那就要检查线路了,一般风扇继电器是由电脑控制吸合的,如果电路存在断路,或者电脑坏了的话会出现继电器不吸合的情况!", "history": [["长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "用电脑能读数据流吗?水温多少"], ["95", "上下水管温差怎么样啊?空气是不是都排干净了呢?"]]}

训练时需要指定--history_column为数据中聊天历史的 key(此例中为history),训练脚本会自动把聊天历史拼接;注意超过输入长度max_source_length的内容会被截断。可参考运行:

bash train_chat.sh

(ptuning/train_chat.sh 中PRE_SEQ_LEN=128、LR=1e-2,max_source_length/max_target_length均为 256,比单轮广告生成任务预留了更长的上下文空间。)

能力示例

仓库 examples/ 目录提供了若干使用web_demo.py得到的示例截图,展示了 ChatGLM-6B 在以下场景的表现:自我认知(self-introduction.png)、提纲写作(blog-outline.png)、文案写作(ad-writing-2.png 与 comments-writing.png)、邮件写作助手(email-writing-1.png 与 email-writing-2.png)、信息抽取(information-extraction.png)、角色扮演(role-play.png)、评论比较(sport.png)以及旅游向导(tour-guide.png)。

局限性说明

由于 ChatGLM-6B 的小规模,其能力仍有较多局限,官方在 README.md 中明确列出了以下问题(仓库 limitations/ 目录保存了对应的失败截图):

  • 模型容量较小:6B 的小容量决定了其相对较弱的模型记忆和语言能力。面对许多事实性知识任务时可能生成不正确的信息(如 factual_error.png),也不擅长逻辑类问题(如数学、编程)的解答(如 math_error.png);
  • 可能产生有害或有偏见的内容:它只是一个初步与人类意图对齐的语言模型;
  • 英文能力不足:训练时使用的指示/回答大部分是中文,英文回复质量远不如中文,甚至可能出现中英夹杂的情况;
  • 易被误导、对话能力较弱:模型的"自我认知"存在问题,很容易被误导并产生错误的言论(如 self-confusion_google.jpg、self-confusion_openai.jpg、self-confusion_tencent.jpg 所示)。

版本更新与相关项目

仓库 UPDATE.md 记录了完整更新历史,PROJECT.md 整理了更多基于或使用 ChatGLM-6B 的开源项目。对本文而言,值得注意的版本脉络是:

  • 2023/05/15 更新 v1.1 版本 checkpoint,训练数据增加了英文指令微调数据以平衡中英文数据比例,解决了英文回答中夹杂中文词语的现象;
  • 2023/06/14 发布 WebGLM,支持利用网络信息生成带准确引用的长回答;
  • 2023/06/25 发布 ChatGLM2-6B,将上下文长度由 2K 扩展到 32K,并引入 Multi-Query Attention 提升推理效率;
  • 2023/07/25 发布 CodeGeeX2,基于 ChatGLM2-6B 的代码生成模型。

引用与协议

本仓库代码依照 Apache-2.0 协议(LICENSE)开源,ChatGLM-6B 模型权重需遵循 Model License。如果你觉得本项目有帮助,官方建议引用 GLM 团队论文(arXiv:2406.12793),引用格式见 README.md。

总结

从本文的完整梳理可以看出,ChatGLM-6B 的工程价值集中体现在"低门槛"三个字:INT4 量化推理最低 6GB 显存、INT4 量化微调最低 7GB 显存,配合 CPU、Mac、多卡多种部署路径,以及 P-Tuning v2 将微调参数量压缩至 0.1% 的高效方案,使得 6B 级别的中英双语对话模型能够在消费级硬件上完成从部署到定制化的完整闭环。动手实践时,建议从 web_demo.py 起步验证推理效果,再按 ptuning/README.md 的流程完成领域定制。

  • 大模型
  • 人工智能
  • NLP
  • 本地部署
  • 微调
  • 模型推理服务

【免费下载链接】ChatGLM-6B-code

ChatGLM-6B: An Open Bilingual Dialogue Language Model | 开源双语对话语言模型

项目地址:https://gitcode.com/zai-org/ChatGLM-6B-code
点击查看免费下载

相关推荐

上一篇:albert与云服务同步:跨设备保持一致体验
下一篇:Boss Show Time:从时间迷雾到机会明灯,一个求职者的智能导航器

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表