简介
ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,ChatGLM2-6B 引入了如下新特性:
- 更强大的性能:基于 ChatGLM 初代模型的开发经验,我们全面升级了 ChatGLM2-6B 的基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。
- 更长的上下文:基于 FlashAttention 技术,我们将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。
- 更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。
环境安装
git clone https://github.com/THUDM/ChatGLM2-6B
conda create -n py310_chat python=3.10 # 创建新环境
source activate py310_chat # 激活环境
cd ChatGLM2-6B
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
模型下载
git lfs install
git clone https://huggingface.co/THUDM/chatglm2-6b
从 Hugging Face Hub 获取模型的一个更快的方法是只下载模型代码,而不使用检查点。
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/THUDM/chatglm2-6b
要更新模型参数文件,请按照这个链接将文件保存到本地目录,覆盖里面的权重文件
模型推理
1.transformers形式
from transformers import AutoTokenizer, AutoModel
directory = '/mnt/sda/huggingface_weight/ChatGLM2-6b'
tokenizer = AutoTokenizer.from_pretrained(directory, trust_remote_code=True)
model = AutoModel.from_pretrained(directory, trust_remote_code=True, device='cuda')
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
# 你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)
"""
晚上睡不着可能是因为很多原因,例如压力、忧虑、抑郁、失眠等。以下是一些有助于改善睡眠的建议:
1. 晚上放松:在睡觉前数绵羊或做一些轻松的伸展运动,可以帮助放松身体和大脑。
2. 创建良好的睡眠环境:保持安静、舒适的睡眠环境,包括一个安静的卧室和舒适的床铺。
3. 规律作息:尽量在同一时间睡觉和起床,帮助身体建立一个稳定的睡眠节律。
4. 避免刺激:避免在睡觉前看电子屏幕、吃油腻的食物或喝咖啡或茶。
5. 放松技巧:尝试一些放松技巧,如冥想、深呼吸或渐进性肌肉松弛。
6. 锻炼:进行适度的身体锻炼,如散步或瑜伽,可以帮助缓解压力和焦虑。
7. 寻求帮助:如果你经常睡不着或睡眠质量不佳,建议咨询医生或专业的睡眠治疗师。
请注意,如果你有严重的睡眠问题,如失眠、忧虑或抑郁,建议寻求专业医疗建议。
"""
2. Gradio推理
pip install gradio
# 直接运行web_demo.py 或者权重修改为本地路径
# tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
# model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()
directory = '/mnt/sda/huggingface_weight/ChatGLM2-6b'
tokenizer = AutoTokenizer.from_pretrained(directory, trust_remote_code=True)
model = AutoModel.from_pretrained(directory, trust_remote_code=True, device='cuda').quantize(8)
# 修改二:默认使用了 share=False 启动,不会生成公网链接。如有需要公网访问的需求,可以修改为 share=True 启动。
demo.queue().launch(share=True, inbrowser=True)
3. 基于 Streamlit 的网页版 Demo web_demo2.py
pip install streamlit streamlit-chat
streamlit run web_demo2.py
4. 运行仓库中 cli_demo.py
python cli_demo.py
5. API 部署
pip install fastapi uvicorn
python api.py
# 这里如果本地占用端口比较多,可以改成其他端口如9000
curl -X POST "http://127.0.0.1:8000" \
-H 'Content-Type: application/json' \
-d '{"prompt": "你好", "history": []}'
{"response":"你好👋!我是人工智能助手 ChatGLM2-6B,很高兴见到你,欢迎问我任何问题。","history":[["你好","你好👋!我是人工智能助手 ChatGLM2-6B