ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。
为了方便下游开发者针对自己的应用场景定制模型,项目同时实现了基于 P-Tuning v2 的高效参数微调方法,INT4 量化级别下最低只需 7GB 显存即可启动微调。
ChatGLM-6B 权重对学术研究完全开放,在填写问卷进行登记后亦允许免费商业使用。
使用方式:
- 安装依赖:pip install -r requirements.txt,其中 transformers 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。如果需要在 CPU 上运行量化后的模型,还需要安装 gcc 与 openmp。
- 调用模型生成对话:可以通过 transformers 库加载模型,示例代码见官方仓库。模型实现仍在变动中,如需固定版本可在 from_pretrained 调用中增加 revision="v1.1.0" 参数。
- 网页版 Demo:安装 Gradio 后运行 web_demo.py,程序会运行一个 Web Server 并输出地址。
- 命令行 Demo:运行 cli_demo.py,在命令行中进行交互式对话,输入 clear 清空对话历史,输入 stop 终止程序。
- API 部署:安装 fastapi 和 uvicorn 后运行 api.py,默认部署在本地的 8000 端口,通过 POST 方法调用。
- 量化加载:默认以 FP16 精度加载需要约 13GB 显存,可以尝试以量化方式加载模型,8-bit 量化下 GPU 显存占用约为 10GB,4-bit 量化下仅需 6GB 占用。
- CPU 推理:如果没有 GPU,也可以在 CPU 上进行推理,但速度更慢,需要约 32GB 内存。
- Mac 部署:对于搭载 Apple Silicon 或 AMD GPU 的 Mac,可以使用 MPS 后端在 GPU 上运行,需要安装 PyTorch-Nightly。
- 多 GPU 部署:如果有多张 GPU 但每张显存不足以容纳完整模型,可以安装 accelerate 后将模型切分在多张 GPU 上。
- 微调:基于 P-tuning v2 的高效参数微调,具体使用方法详见 ptuning/README.md。
适用场景:
- 本地部署的中英双语对话应用
- 学术研究和教育
- 下游开发者定制模型
- 基于可扩展知识库的问答(如结合 langchain)
- 类 ChatPDF 功能
- 接入聊天平台
限制:
- 模型容量较小:6B 的小容量决定了其相对较弱的模型记忆和语言能力,在面对许多事实性知识任务时可能生成不正确的信息,也不擅长逻辑类问题(如数学、编程)的解答。
- 产生有害说明或有偏见的内容:只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。
- 英文能力不足:训练时使用的指示/回答大部分都是中文的,仅有极小一部分英文内容,因此英文指示的回复质量远不如中文,甚至与中文指示下的内容矛盾,并且出现中英夹杂的情况。
- 易被误导,对话能力较弱:对话能力还比较弱,而且“自我认知”存在问题,并很容易被误导并产生错误的言论。
- 模型量化会带来一定的性能损失,但经过测试,在 4-bit 量化下仍然能够进行自然流畅的生成。
- 由于采用了相对位置编码,理论上支持无限长的 context-length,但总长度超过 2048(训练长度)后性能会逐渐下降。
开源协议:本仓库的代码依照 Apache-2.0 协议开源,ChatGLM-6B 模型的权重的使用则需要遵循 Model License。