国产大语言模型 ChatGLM3 本地部署与功能扩展指南
1. 概述
ChatGLM3 是由智谱 AI 推出的一系列开源大语言模型。本文详细介绍如何在本地环境中搭建 ChatGLM3-6B 模型,配置运行环境,并通过 Web 界面、API 接口及自定义工具进行功能扩展。
2. 环境准备
2.1 硬件要求
- 显存:建议 8GB 以上。若显存小于 8GB,建议使用量化版本(4-bit)。
- CUDA:需安装对应版本的 NVIDIA CUDA Toolkit。
- Python:推荐 Python 3.10 或更高版本。
2.2 软件依赖
使用 Anaconda 管理虚拟环境,确保依赖隔离。
conda create -n chatglm3-demo python=3.11
conda activate chatglm3-demo
3. 源码与模型下载
3.1 获取源码
从 GitHub 或 ModelScope 克隆项目代码。
git clone https://github.com/THUDM/ChatGLM3.git
cd ChatGLM3-main
3.2 下载模型权重
推荐使用国内镜像源 ModelScope 加速下载。
mkdir -p THUDM/chatglm3-6b
注意:如果显卡显存有限(如 8GB 以下),建议下载 chatglm3-6b 基础版并配合量化使用。
4. 安装依赖
修改 requirements.txt 以指定明确的 PyTorch 版本,避免 CUDA 版本不匹配。
# requirements.txt 示例
torch>=2.0
torchvision==0.15.0
torchaudio==2.0.0
transformers==4.30.0
执行安装命令:
pip install -r requirements.txt
若遇到 mdtex2html 缺失错误,可单独安装:
pip install mdtex2html
5. 内存优化与量化
默认情况下,模型以 FP16 精度加载,约需 13GB 显存。若显存不足,可使用 4-bit 量化加载。
5.1 检查显存
使用 nvidia-smi 查看 GPU 状态。
5.2 量化加载代码
在启动脚本中修改模型加载方式:
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("THUDM/chatglm3-6b", trust_remote_code=True).quantize(4).cuda()
量化会轻微影响生成质量,但能显著降低显存占用,且经测试 ChatGLM3-6B 在 4-bit 下仍能保持流畅对话。
6. 运行演示程序
项目提供了多种 Demo 模式,可根据需求选择。
6.1 Gradio Web Demo
基于 Gradio 的网页聊天界面。
cd basic_demo
python web_demo.py
启动后浏览器会自动打开或显示访问地址。若出现 JS 错误,建议尝试 Streamlit 版本。
6.2 Streamlit Web Demo
通常更流畅,支持更好的交互体验。
streamlit run web_demo2.py
6.3 OpenAI API 兼容服务
提供标准 OpenAI 格式的流式 API,便于集成第三方应用。
cd openai_api_demo
python openai_api.py
服务默认监听 localhost:8000。
7. 常见问题排查
7.1 GPU 未被识别
若启动后发现仅使用 CPU,请检查 PyTorch 是否安装了 CUDA 版本。
import torch
print(torch.cuda.is_available())
print(torch.version.cuda)
若返回 False,需卸载当前 torch 并重新安装带 cu 后缀的版本:
pip uninstall torch torchvision torchaudio
pip install torch==2.0.0+cu118 torchvision==0.15.0+cu118 torchaudio==2.0.0 --extra-index-url https://download.pytorch.org/whl/cu118
7.2 路径配置错误
确保模型文件位于 THUDM/chatglm3-6b 目录下,并在代码中正确设置 MODEL_PATH,避免重复下载。
8. 参数调优
在调用模型时,可通过以下参数控制生成效果:
- temperature:控制生成的随机性。值越高越多样,值越低越确定。
- top_p:核采样阈值,限制候选词范围。
- repetition_penalty:重复惩罚,防止模型陷入循环。
9. 功能扩展:自定义 Tool
ChatGLM3 支持 Function Calling,允许模型调用外部工具查询实时信息(如天气、数据库等)。
9.1 注册工具
在 tool_registry.py 中定义函数,并注册到模型上下文。
def get_weather(city):
return f"{city} 的天气晴朗"
register_tool(get_weather)
重启服务后,模型即可在对话中自动调用该工具。
10. API 接口说明
OpenAI 兼容接口支持 POST 请求至 /v1/chat/completions。
10.1 请求示例
{
"model": "chatglm3-6b",
"messages": [
{"role": "user", "content": "你好"}
],
"stream": false,
"max_tokens": 100
}
10.2 响应结构
返回包含 choices 字段,其中 message.content 为模型生成的文本。若开启 stream=true,则通过 SSE 流式返回数据块,直到 finish_reason 为 stop。
11. 总结
本文涵盖了 ChatGLM3 从环境搭建、显存优化、Demo 运行到 API 集成的完整流程。通过量化技术可在消费级显卡上运行大模型,结合 Function Calling 能力可进一步拓展其在垂直场景的应用。开发者可根据实际需求调整参数量化级别与推理策略。