1. 概述
ChatGLM3-6B 是由智谱 AI 推出的开源大语言模型,支持多轮对话、文本生成及工具调用等功能。本文详细介绍如何在本地环境搭建 ChatGLM3,包括源码下载、依赖安装、显存优化、Web Demo 启动以及 OpenAI 兼容 API 服务的部署。
2. 环境准备与源码下载
2.1 硬件要求
建议配备 NVIDIA 显卡,显存至少 8GB(推荐 12GB 以上)。若显存小于 8GB,建议使用量化版本(4-bit)运行。
2.2 获取源码
通过 ModelScope 或 GitHub 下载 ChatGLM3 源码。
git clone https://gitee.com/mirrors/ChatGLM3.git
ModelScope 是国内镜像,下载速度通常较快。
3. 环境安装
3.1 创建 Conda 环境
推荐使用 Python 3.10 或更高版本。新建虚拟环境并激活:
conda create -n chatglm3-demo python=3.11
conda activate chatglm3-demo
3.2 安装依赖
进入项目目录,修改 requirements.txt 以指定明确的 PyTorch 版本,确保 CUDA 版本匹配本机驱动。
cd ChatGLM3-main
pip install -r requirements.txt
注意:如果默认依赖未指定 torch 版本,建议手动指定为 torch==2.1.0 或根据 CUDA 版本选择对应 wheel 包。
4. 模型加载与显存优化
4.1 默认加载
默认情况下,模型以 FP16 精度加载,约需 13GB 显存。
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).half().cuda()
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True)
4.2 量化加载(低显存适配)
对于显存受限的 GPU,可使用 4-bit 量化加载模型,显著降低显存占用且保持流畅生成。
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).quantize(4).cuda()
量化后模型路径需调整至 THUDM/chatglm3-6b 相对目录下,避免重复下载。
5. Web Demo 启动
项目提供了基于 Gradio 和 Streamlit 的网页版交互界面。
5.1 Gradio Demo
python web_demo.py
启动后浏览器访问输出地址即可。若遇到 mdtex2html 模块缺失错误,请执行:
pip install mdtex2html
5.2 Streamlit Demo
Streamlit 版本通常更流畅。
streamlit run web_demo2.py
部分代码可能需要微调以适配本地模型路径和量化设置。
6. 常见问题排查
6.1 GPU 未被识别
若启动后发现使用 CPU 推理,速度慢且显存占用异常,通常是 PyTorch 安装了 CPU 版本。
- 检查 CUDA 版本:
nvidia-smi
- 验证 PyTorch:
import torch
print(torch.cuda.is_available())
print(torch.__version__)
- 重新安装带 CUDA 支持的 PyTorch 版本(如 cu118)。
6.2 依赖冲突
若安装过程中出现依赖冲突,可尝试清理 pip 缓存或使用国内镜像源:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
7. OpenAI 兼容 API 服务
ChatGLM3 支持 OpenAI 格式的流式 API 部署,可作为其他应用的后端。
7.1 启动服务
cd openai_api_demo
python openai_api.py
需修改配置文件中的模型路径和量化参数。
7.2 请求示例
{
"model": "chatglm3-6b",
"messages": [
{"role": "system", "content": "You are ChatGLM3."},
{"role": "user", "content": "你好,给我讲一个故事"}
],
"stream": false,
"max_tokens": 100,
"temperature": 0.8
}
返回结果包含 choices 列表,其中 message.content 为生成内容。
8. 自定义工具扩展 (Tool Use)
ChatGLM3 支持 Function Calling,允许模型调用外部工具查询实时信息(如天气、API 数据)。
8.1 注册工具
在 tool_registry.py 中定义函数,描述其功能和参数。
def get_weather(city: str) -> str:
return f"{city}的天气晴朗"
8.2 启用工具
在启动脚本中传入工具列表,模型将自动判断是否调用工具。
9. 总结
本地部署 ChatGLM3 能够保障数据隐私并降低 API 调用成本。通过量化技术可在消费级显卡上运行,结合 Streamlit 或 API 接口可快速构建个性化应用。建议根据实际硬件配置选择合适的精度模式,并注意 PyTorch 与 CUDA 版本的兼容性。
10. 进阶建议
- 性能调优:开启 Flash Attention 可进一步提升推理速度。
- 多卡部署:利用 DeepSpeed 或 vLLM 框架可实现多卡并行加速。
- 持续学习:关注官方更新,及时适配新的模型特性与安全补丁。