ChatGLM-6B本地部署指南:快速上手中文对话AI

快速上手指南:在本地部署ChatGLM-6B中文对话模型,轻松体验AI对话!

原文标题:类ChatGPT模型ChatGLM-b6本地部署实践

原文作者:牧羊人的方向

冷月清谈:

本文介绍了如何在本地部署清华大学开源的中文对话语言模型ChatGLM-6B。ChatGLM-6B是一个62亿参数的双语模型,基于GLM架构,针对中文问答和对话进行了优化。它可以在消费级显卡上进行本地部署,INT4量化级别下最低只需6GB显存。

部署步骤包括:
1. 安装Python 3.9以上版本,并安装pip。
2. 下载ChatGLM-6B项目代码和模型权重文件。模型文件可以从Hugging Face或清华云盘下载。
3. 安装依赖包,使用pip install -r requirements.txt命令。
4. 修改web_demo.py文件中的模型路径,指向你下载的模型文件位置。
5. 运行web_demo.py启动Web Server,在浏览器中访问即可使用。

需要注意的是,如果电脑没有GPU,需要修改web_demo.py文件,让模型在CPU上运行,但这会降低推理速度。如果内存不足,可以直接加载量化后的模型。

文章还介绍了ChatGLM-6B的特点,例如中英双语预训练、较低的部署门槛、更长的序列长度以及人类意图对齐训练等。同时,也指出了该模型的局限性,例如模型容量较小、可能生成有害内容、较弱的多轮对话能力以及英文能力不足等。

怜星夜思:

1、ChatGLM-6B与其他开源中文对话模型,如CPM,有什么优劣?
2、文章中提到的模型量化技术是什么?它对模型性能和部署有什么影响?
3、如何基于ChatGLM-6B进行微调,以更好地适应特定领域的任务?

原文内容

国外ChatGPT火爆持续,前一段时间百度发布“文心一言”还没有全面放开测试,这不阿里“通义千问”又悄然而至,国内大模型AI产品渐渐浮出水面。早在2022年8月份时候清华大学的对话语言模型ChatGLM-6B就发布并开源,本文简要介绍ChatGLM-6B在本地环境的部署实践

1、ChatGLM-6B模型介绍

ChatGLM是清华大学研究的具备问答和对话功能的中英语言模型,ChatGLM-6B是发布的开源版本,可以直接部署在本地进行测试。GitHub官网(https://github.com/THUDM/ChatGLM-6B)介绍如下:

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。

ChatGLM-6B使用了和ChatGPT相似的技术,针对中文问答和对话进行了优化。经过约1T标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的ChatGLM-6B已经能生成相当符合人类偏好的回答,更多信息请参考我们的博客。

为了方便下游开发者针对自己的应用场景定制模型,我们同时实现了基于P-Tuning v2的高效参数微调方法(使用指南) ,INT4量化级别下最低只需7GB显存即可启动微调。

不过,由于ChatGLM-6B的规模较小,目前已知其具有相当多的局限性,如事实性/数学逻辑错误,可能生成有害/有偏见内容,较弱的上下文能力,自我认知混乱,以及对英文指示生成与中文指示完全矛盾的内容。请大家在使用前了解这些问题,以免产生误解。更大的基于 1300 亿参数 GLM-130B 的 ChatGLM 正在内测开发中。

1)ChatGLM-6B具备如下特点
  • 充分的中英双语预训练: ChatGLM-6B在1:1比例的中英语料上训练了1T的token量,兼具双语能力。

  • 优化的模型架构和大小: 吸取GLM-130B训练经验,修正了二维RoPE位置编码实现,使用传统FFN结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署ChatGLM-6B成为可能。

  • 较低的部署门槛: FP16半精度下,ChatGLM-6B需要至少13GB的显存进行推理,结合模型量化技术,这一需求可以进一步降低到10GB(INT8)和6GB(INT4),使得ChatGLM-6B可以部署在消费级显卡上。

  • 更长的序列长度: 相比GLM-10B(序列长度1024),ChatGLM-6B序列长度达2048,支持更长对话和应用。

  • 人类意图对齐训练: 使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback)等方式,使模型初具理解人类指令意图的能力。输出格式为markdown,方便展示。

2)ChatGLM-6B局限和不足
  • 模型容量较小: 6B的小容量,决定了其相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM-6B可能会生成不正确的信息。

  • 可能会产生有害说明或有偏见的内容:ChatGLM-6B只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。

  • 较弱的多轮对话能力:ChatGLM-6B的上下文理解能力还不够充分,在面对长答案生成,以及多轮对话的场景时,可能会出现上下文丢失和理解错误的情况。

  • 英文能力不足:训练时使用的指示大部分都是中文的,只有一小部分指示是英文的。

  • 易被误导:ChatGLM-6B的“自我认知”可能存在问题,很容易被误导并产生错误的言论。例如当前版本模型在被误导的情况下,会在自我认知上发生偏差。

2、ChatGLM模型本地部署
2.1 本地安装Python

1)Python安装

从官网下载(https://www.python.org/downloads/),Python版本在3.9以上,建议使用3.10

注:安装完成后修改默认的Python环境变量

2)安装pip

如果pip命令提示不存在,使用以下命令安装

py -m ensurepip --upgrade

安装完成后查看版本

pip --version
pip 23.0.1 from D:\Python3.10.9\lib\site-packages\pip (python 3.10)
2.2 下载项目程序包和模型包

1)从GitHub下载项目程序包https://github.com/THUDM/ChatGLM-6B

下载后解压到本地目录,如D:\ChatGPT\ChatGLM-6B-main

2)下载模型包chatglm

下载地址:https://huggingface.co/THUDM/chatglm-6b/tree/main

下载后解压到新建目录chatglm-6b:D:\ChatGPT\ChatGLM-6B-main\chatglm-6b

备注:8个模型文件可以从这里下载:https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/

2.3 下载依赖包

1)执行命令安装依赖包

D:\>cd D:\ChatGPT\ChatGLM-6B-main
D:\ChatGPT\ChatGLM-6B-main>pip install -r requirements.txt

2)依赖包下载成功后安装

3)检查pytorch是否为GPU版本

>>> import torch
>>> torch.cuda.is_available()
False

如果是True表示为GPU版本

2.4 运行网页版Demo

1)修改模型路径,编辑web_demo.py,修改路径为2.2中模型包保存的目录

#model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
model = AutoModel.from_pretrained("D:\ChatGPT\ChatGLM-6B-main\chatglm-6b", trust_remote_code=True).half().cuda()

2)执行如下命令,运行网页版本的demo,如下

python web_demo.py

由于电脑没有GPU,直接运行会提示“Torch not compiled with CUDA enabled”。因此需要修改为在CPU上进行推理,但是推理速度会更慢,修改方法如下:

model = AutoModel.from_pretrained("D:\ChatGPT\ChatGLM-6B-main\chatglm-6b", trust_remote_code=True).float()

内存不足,直接加载量化后的模型:

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

程序会运行一个Web Server,并输出地址。在浏览器中打开输出的地址即可使用。最新版Demo实现了打字机效果,速度体验大大提升。

注意,由于国内Gradio的网络访问较为缓慢,启用demo.queue().launch(share=True, inbrowser=True)时所有网络会经过Gradio服务器转发,导致打字机体验大幅下降,现在默认启动方式已经改为share=False,如有需要公网访问的需求,可以重新修改为share=True启动。

参考资料:

  1. https://chatglm.cn/blog

  2. https://huggingface.co/THUDM/chatglm-6b

  3. https://github.com/THUDM/ChatGLM-6B

  4. https://blog.csdn.net/tzhuwb/article/details/129910616

关于“文章中提到的模型量化技术是什么?它对模型性能和部署有什么影响?”,简单来说,模型量化就是用更低精度的数据类型来表示模型的参数和激活值,比如从FP32转换为INT8或INT4。这样做可以减小模型的体积,降低内存占用,并提高推理速度。当然,量化也会带来一定的性能损失,但通常情况下,这种损失是可以接受的。

引用“ChatGLM-6B与其他开源中文对话模型,如CPM,有什么优劣?”这个问题,我觉得ChatGLM-6B主要胜在部署方便,对硬件要求低,适合个人开发者体验和研究。CPM模型参数规模更大,性能可能更好,但部署难度也更大。

关于“ChatGLM-6B与其他开源中文对话模型,如CPM,有什么优劣?”这个问题,从我了解的情况来看,两者各有千秋。ChatGLM-6B胜在轻量级,适合在消费级GPU上跑,而CPM系列模型参数量更大,效果更好,但对硬件要求也更高。此外,两者在训练数据、模型架构等方面也存在差异,导致最终的对话效果有所不同。具体选择哪个模型,取决于你的需求和资源。

关于“如何基于ChatGLM-6B进行微调,以更好地适应特定领域的任务?”,文章提到了P-Tuning v2,这是一种高效的参数微调方法。你可以参考ChatGLM-6B的GitHub页面,上面有详细的使用指南。此外,你还可以准备一些特定领域的数据集,用来微调模型。

对于“文章中提到的模型量化技术是什么?它对模型性能和部署有什么影响?”,可以理解为一种压缩技术,它通过降低模型参数的精度来减小模型大小和计算量,从而降低部署成本。但量化并非没有代价,它可能会导致模型精度下降,尤其是在一些对精度要求较高的任务中,这种影响会更明显。

就“文章中提到的模型量化技术是什么?它对模型性能和部署有什么影响?”这个问题,我想说,量化技术就像把高清电影压缩成标清一样,文件变小了,播放更流畅了,但清晰度也降低了。在深度学习中,量化技术可以显著减少模型的存储空间和计算开销,使模型更容易部署到资源受限的设备上,但同时也可能导致模型性能略有下降。

对于“如何基于ChatGLM-6B进行微调,以更好地适应特定领域的任务?”,除了P-Tuning v2,你还可以尝试其他微调方法,例如LoRA、Adapter等等。选择哪种方法取决于你的具体需求和资源。另外,数据质量非常重要,高质量的特定领域数据集对于微调效果至关重要。

针对“ChatGLM-6B与其他开源中文对话模型,如CPM,有什么优劣?”,我补充一点,除了模型大小和性能方面的差异,社区活跃度也是一个重要的考虑因素。一个活跃的社区可以提供更多的支持和资源,例如预训练模型、微调技巧等等,这对于模型的应用和改进非常有帮助。目前来看,ChatGLM-6B的社区发展比较迅速。

关于“如何基于ChatGLM-6B进行微调,以更好地适应特定领域的任务?”,微调就像给模型“补课”,让它学习特定领域的知识。你需要准备一些特定领域的语料,然后使用合适的微调方法,例如P-Tuning v2或其他方法,对模型进行训练。微调后的模型在特定领域的任务中通常会有更好的表现。