介绍
- 由清华大学知识工程 (KEG) 实验室和智谱AI公司与2023年共同训练的语言模型。
- ChatGLM-6B 参考了 ChatGPT 的设计思路,在千亿基座模型 GLM-130B 中注入了代码预训练,通过有监督微调等技术实现与人类意图对齐(即让机器的回答符合人类的期望和价值观)。
- 不同于训练ChatGPT需要1万+ A100显卡,ChatGLM-6B可以单机运行在消费级显卡上(13G可运行,建议16-24G显卡),未来使用空间大。
https://github.com/THUDM/ChatGLM-6B模型3月14日开源后,Github Star增速惊人,连续12天位列全球大模型下载榜第一名。
基于GLM (General Language Model) 架构,有62亿参数,无量化下占用显存13G,INT量化下支持单张消费级显卡(如2080Ti)上进行推理INT8量化是一种将深度学习模型中的权重和激活值从16位浮点数(FP16)减少到8位整数 INT8的技术,从而降低内存占用和计算复杂度,减少计算资源,提升推理速度
-
ChatGLM已具备人类偏好的问答对话能力,但在一些指令上,回答存在不理解指令,或缺乏领域概念理解,生成有害内容等问题。
-
ChatGLM已具备人类偏好的问答对话能力,但在一些指令上,回答存在不理解指令,或缺乏领域概念理解,生成有害内容等问题。
GLM-130B
2022年8月,智谱AI基于GLM框架,推出1300亿参数的中英双语稠密模型GLM-130B,综合能力与GPT3相当
内存节省75%,可在单台3090 (*4)或单台2080(*8)进行无损推理
高速推理,比Pytorch提升7-8倍速度
跨平台,支持不同计算平台的适配和应用
https://github.com/THUDM/GLM-130B
功能
更多参考:https://github.com/THUDM/ChatGLM-6B
目标
GLM
GLM: 通用语言模型预训练 https://aclanthology.org/2022.acl-long.26.pdf
GLM的出发点是将3种主流的预训练模型进行统一:
- GPT,注意力是单向的,无法利用到下文信息。
- BERT,注意力是双向的,在NLU上表现很好,但不适合生成任务。
- T5,编码器中注意力是双向的,解码器中注意力是单向
的。可同时用于NLU和生成任务,但需要更多参数量
https://github.com/THUDM/GLM
使用
建议使用Colab,并启用GPU A100,demo1.py
源码:https://github.com/dlimeng/awesome-ai-generated/blob/main/ChatGLM%E4%BD%BF%E7%94%A8/demo1.ipynb
# Step1, 安装依赖包
!pip install transformers
!pip install sentencepiece
!pip install cpm_kernels
!pip install gradio
!pip install mdtex2html
# Step2,使用预训练模型
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()
# Step3,创建对话chat
response, history = model.chat(tokenizer,"你好", history=[])
print(response)
response, history = model.chat(tokenizer,"晚上睡不着应该怎么办",history=history)
print(response)
定制
源码:https://github.com/dlimeng/awesome-ai-generated/blob/main/ChatGLM%E4%BD%BF%E7%94%A8/ptuning1.ipynb
参考:https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md
P-Tuning
- 用自己的数据集对ChatGLM模型进行微调
- P-Tuning V2已将需要微调的参数减少到原来的0.1%- 3%,大大加快了训练速度,同时最低GPU显存要求
为7G(建议16-24G) - TIPS:AdvertiseGen数据集,训练3000steps,大约需
要训练2小时,需要保证你的GPU有足够多的计算单元
使用P-Tuning v2进行训练
!bash train.sh
- Thinking:将 train.sh 中的 THUDM/chatglm-6b 改为本地的模型路径 (参考train2.sh)
- Thinking:如何使用训练好的ChatGLM模型进行推理使用evaluate.sh,这里需要修改model_name_or_path 和 ptuning_checkpoint
- TIPS:在 P-tuning v2 训练时模型只保存PrefixEncoder参数,所以在推理时需要同时加载原 ChatGLM-6B 模型以及 PrefixEncoder 的权重
轻量库
Peft库:https://github.com/huggingface/peft很方便地实现将普通的HF模型变成用于支持轻量级fine-tune的模型,目前支持4种策略:
1)LoRA:大模型的低秩适配器
2)Prefix Tuning: Optimizing Continuous Prompts for Generation
3)P-Tuning: GPT Understands, Too
4)Prompt Tuning: The Power of Scale forParameter-Efficient Prompt Tuning
“道生一,一生二,二生三,三生万物。”融会贯通,才能突破局限,开创未来。
我是李孟,独立开源软件开发者,SolidUI作者,对于新技术非常感兴趣,专注AI和数据领域,如果对我的文章内容感兴趣,请帮忙关注点赞收藏,谢谢!