ChatGLM-6B 是一款大型语言模型,具有62亿参数,主要在中英文语料上进行预训练。该模型通过监督式微调和人类反馈学习进行优化,专为快速迭代的预训练和后续训练技术以及数据选择而设计。ChatGLM-6B 在多轮对话、代码生成和综合理解等方面显示出强大的能力。此外,这款模型支持本地部署在消费级显卡上,使用 INT4 量化以降低运算需求,适用于资源受限的环境。ChatGLM-6B 是GLM系列模型的一部分,这一系列模型还包括其他规模和配置的版本,以满足不同的使用需求和场景。
一、ChatGLM-6B的使用
1.1 代码下载
首先,通过上述Github仓库下载ChatGLM-6B的代码。
或者,通过下述百度网盘链接下载:
链接:https://pan.baidu.com/s/1wT-Ms0LS-DSIRBeBl-jFLw?pwd=hes4
提取码:hes4
1.2 环境安装
首先,创建一个新的conda环境,名字为chatglm6b,python版本为3.8:
conda create -n chatglm6b python=3.8
然后,使用pip安装依赖,其中 transformers 库版本推荐为 4.27.1,但理论上不低于 4.23.1 即可。
pip install -r requirements.txt
1.3 模型下载
可以通过清华大学网盘下载:https://cloud.tsinghua.edu.cn/d/fb9f16d6dc8f482596c2/
也可以通过Hugging Face网站下载:https://huggingface.co/THUDM/chatglm-6b
然后,将下载后的模型放到根目录的chatglm-6b文件夹下。
1.4 代码调用
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
二、ChatGLM-6B的微调
对于 ChatGLM-6B 模型基于 P-Tuning v2 的微调。P-Tuning v2 将需要微调的参数量减少到原来的 0.1%,再通过模型量化、Gradient Checkpoint 等方法,最低只需要 7GB 显存即可运行。
1.1 环境依赖
运行微调需要4.27.1版本的transformers。除 ChatGLM-6B 的依赖之外,还需要安装以下依赖:
pip install rouge_chinese nltk jieba datasets
1.2 数据集下载
以ADGEN 数据集为例,任务为根据输入(content)生成一段广告词(summary)。
{
"content": "类型#上衣*版型#宽松*版型#显瘦*图案#线条*衣样式#衬衫*衣袖型#泡泡袖*衣款式#抽绳",
"summary": "这件衬衫的款式非常的宽松,利落的线条可以很好的隐藏身材上的小缺点,穿在身上有着很好的显瘦效果。领口装饰了一个可爱的抽绳,漂亮的绳结展现出了十足的个性,配合时尚的泡泡袖型,尽显女性甜美可爱的气息。"
}
从 Google Drive 下载处理好的 ADGEN 数据集,将解压后的 AdvertiseGen 目录放到本目录下。
1.3 模型训练
运行以下指令进行训练:
bash train.sh
为了从本地加载模型,可以将 train.sh 中的 THUDM/chatglm-6b 改为你本地的模型路径。