大模型私有化部署:清华智谱 GLM 大模型部署与使用指南
清华智谱 ChatGLM3-6B 大模型的私有化部署方案,涵盖云端(AutoDL)和本地(Windows/Anaconda)两种环境的安装步骤。内容包括环境配置、模型下载、虚拟环境搭建、WebUI 启动及 API 调用开发。文章提供了具体的 Python 代码示例,展示了如何使用 OpenAI SDK 进行聊天对话及插件功能集成。此外,还补充了模型量化优化方法,指导如何通过 4-bit 量化降低显存需求,以便在消费级显卡上流畅运行。

清华智谱 ChatGLM3-6B 大模型的私有化部署方案,涵盖云端(AutoDL)和本地(Windows/Anaconda)两种环境的安装步骤。内容包括环境配置、模型下载、虚拟环境搭建、WebUI 启动及 API 调用开发。文章提供了具体的 Python 代码示例,展示了如何使用 OpenAI SDK 进行聊天对话及插件功能集成。此外,还补充了模型量化优化方法,指导如何通过 4-bit 量化降低显存需求,以便在消费级显卡上流畅运行。

部署一个自己的大模型,是许多技术同学希望实现的目标。常见的顾虑包括硬件成本过高或官方部署说明过于简单导致安装困难。本文将分享本地和租用云服务器两种方式下的 ChatGLM3-6B 大模型安装部署经验,以及如何通过 API 调用开发 AI 应用。
本次部署使用的模型是 ChatGLM3-6B,这是由清华智谱研发并开源的高性能中英双语对话语言模型。它基于创新的 GLM(Gated Linear Units with Memory)架构及 60 亿参数量,在对话理解与生成能力上表现卓越。
ChatGLM3-6B 支持复杂的跨语言对话场景,具备函数调用以及代码解释执行的能力。开发者可以通过 API 调用让模型执行特定任务或编写、解析简单的代码片段。此外,该模型允许对预训练模型进行定制化微调,也支持量化处理,使得模型可以在消费级显卡甚至 CPU 上运行。
模型仓库地址:https://github.com/THUDM/ChatGLM3
这里以 AutoDL 为例。AutoDL 上的 GPU 实例价格较为合理,ChatGLM3-6B 需要 13G 以上的显存,可以选择 RTX4090、RTX3090、RTX3080*2、A5000 等 GPU 规格。
创建容器实例时镜像选择'社区镜像',输入 yinghuoai,选择 ChatGLM3 的最新镜像。容器实例开机成功后,点击对应实例的 JupyterLab 即可开始使用。
该镜像包含三个 Notebook,方便我们启动 WebUI 服务器和 API 服务器,并进行相关测试。
创建容器实例时选择一个基础镜像 Miniconda -> conda3 -> Python 3.10 (ubuntu22.04) -> Cuda11.8。
容器实例开机完毕后,点击对应实例的 JupyterLab 进入 Web 管理界面。在'启动页'这里点击'终端',进入命令窗口。
首先需要设置网络,用以加速访问 Github(仅适用于 AutoDL 实例):
source /etc/network_turbo
然后下载代码到本地:
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
创建一个 Python 虚拟环境:
conda create -n chatglm3-6b python=3.10.8
source activate chatglm3-6b
使用 uv 安装依赖的程序包。因为 requirements 中很多包的版本要求都是 >=,直接使用 pip 会安装最新版本,可能导致兼容问题。使用 uv 可以锁定最低直接依赖版本。
pip install uv
uv pip install --resolution=lowest-direct -r requirements.txt
下载大模型文件。这里从 AutoDL 的模型库中下载,速度较快。目标目录是 /root/autodl-tmp,会自动创建名为 chatglm3-6b 的子目录。
pip install codewithgpu
cg down xxxiu/chatglm3-6b/config.json -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/configuration_chatglm.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/gitattributes -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model.safetensors.index.json -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/MODEL_LICENSE -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00001-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00002-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00003-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00004-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00005-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00006-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/model-00007-of-00007.safetensors -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/modeling_chatglm.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/pytorch_model.bin.index.json -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/quantization.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/README.md -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/tokenization_chatglm.py -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/tokenizer.model -t /root/autodl-tmp
cg down xxxiu/chatglm3-6b/tokenizer_config.json -t /root/autodl-tmp
最后做一个简单测试,找到文件 ChatGLM3/basic_demo/cli_demo.py,修改其中的模型路径为下载路径:/root/autodl-tmp/chatglm3-6b。
在终端执行命令:python basic_demo/cli_demo.py,即可在终端与大模型进行交流。
注意需要 13G 显存以上的 Nvidia 显卡,否则无法运行。这里以 Windows 系统为例。
首先本地要有一个 Python 的运行环境,建议使用 Anaconda。
安装成功后,启动'Anaconda Navigator',在其中点击'Environments'->'base(root)' ->'Open Terminal',打开终端。
从 Github 下载代码到本地:
cd C:\
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3
创建 Python 虚拟环境并激活:
conda create -n chatglm3-6b python=3.10.8
conda activate chatglm3-6b
将相关模型文件下载到本地。为了防止下载方式失效,提供多种方法:
C:\ChatGLM3\THUDM。最后做一个简单测试,执行命令:python basic_demo/cli_demo.py。
如果程序出现 RuntimeError: 'addmm_impl_cpu_' not implemented for 'Half' 错误,首先确定电脑安装了 Nvidia 显卡,然后补充安装相关的 pytorch-cuda 包:
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=11.8 -c pytorch -c nvidia
pip install chardet
ChatGLM 提供了一个 Web 界面,用户可以直接在这个页面上聊天、使用插件,以及执行 Python 代码。
首先修改程序中的模型目录,在下载程序中找到文件 composite_demo/client.py,修改 MODEL_PATH 为你的模型存放地址。
进入 ChatGLM3-6B 程序的根目录,激活 Python 虚拟环境:
cd /root/ChatGLM3
conda activate chatglm3-6b
# conda 如果不行就使用 source activate chatglm3-6b
因为需要执行代码,还要安装 Jupyter 内核:
ipython kernel install --name chatglm3-6b --user
并修改文件 composite_demo/demo_ci.py 中的 IPYKERNEL 的值为设置的值。
最后启动 API 服务器:streamlit run composite_demo/main.py。
如果是在个人电脑上安装的,点击这里的连接就可以在浏览器访问了。
如果是在 AutoDL 上的实例,还需要配置 SSH 隧道来打通本地与 AutoDL 实例的网络,因为 WebUI 使用了 WebSocket,而 AutoDL 开放的外网端口可能不支持 WebSocket。
我们需要类似下边这样的一条指令:
sudo ssh -CNg -L 8501:127.0.0.1:8501 root@<实例 IP> -p <实例端口>
登录成功后,在浏览器地址栏输入 http://127.0.0.1:8501 就可以访问了。
这个 WebUI 左边是参数区域,右边是使用区域,有三种使用方式:Chat、Tool 和 Code Interpreter,分别就是聊天、工具或插件、代码解释器。
它会完整的展现出来插件的使用过程。实例代码中提供了两个工具,一个是获取实时天气,另一个是生成随机数。用户还可以修改代码增加自己的工具插件,在 composite_demo/tool_registry.py 这个文件中。
只需要使用 @register_tool 装饰函数即可完成注册。对于工具声明,函数名称即为工具的名称,函数 docstring 即为工具的说明;对于工具的参数,使用 Annotated[typ: type, description: str, required: bool] 标注参数的类型、描述和是否必须。
例如,get_weather 工具的注册如下:
@register_tool
def get_weather(
city_name: Annotated[str, 'The name of the city to be queried', True],
) -> str:
"""
Get the weather for `city_name` in the following week
"""
...
模型会根据对任务完成情况的理解自动地连续执行多个代码块,直到任务完成。比如让它用 Python 画一个爱心。如果代码执行有错误,模型会自动修正错误,然后继续生成,直到能够正常执行成功。这个能力其实是通过系统提示词和 observation 角色实现的。
使用大模型 API,我们可以完全自定义自己的交互页面,增加很多有趣的功能,比如提供联网能力。
这里我们使用的是 ChatGLM3-6B 自带的一个 API 示例程序,这个程序中有一个参考 OpenAI 接口规范开发的 API 服务,我们可以直接使用 OpenAI 的客户端进行调用。
首先修改程序中的模型目录,在下载程序中找到文件 openai_api_demo/api_server.py,修改 MODEL_PATH 为你的模型存放地址。
进入 ChatGLM3-6B 程序的根目录,激活 Python 虚拟环境:
cd C:\ChatGLM3
conda activate chatglm3-6b
最后启动 API 服务器:python openai_api_demo/api_server.py。
看到 running on http://0.0.0.0 的提示信息就代表启动成功了。
注意这里的端口号,如果你是在 AutoDL 部署的程序,需要将端口号修改为 6006,然后才能通过 AutoDL 提供的'自定义服务'在外网访问。
这里还是以 Python 为例,首先使用 pip 安装 OpenAI 的 SDK。
pip install --upgrade openai httpx[socks]
from openai import OpenAI
client = OpenAI(api_key='not-need-key', base_url="http://127.0.0.1:6006/v1")
stream = client.chat.completions.create(
messages=[{
"role": "system", "content": "你是一名数学老师,从事小学数学教育 30 年,精通设计各种数学考试题"
}, {
"role": "user", "content": "请给我出 10 道一年级的计算题。"
}],
model='chatglm3-6b',
max_tokens=1024,
top_p=0.3,
presence_penalty=0.2,
seed=12345,
response_format={ "type": "json_object" },
n=1,
stream=True
)
for chunk in stream:
msg = chunk.choices[0].delta.content
if msg is not None:
print(msg, end='')
这里让 ChatGLM 根据用户要求调用天气函数查询实时天气。注意 ChatGLM3-6B 调用函数的方法没有支持最新的 OpenAI API 规范,目前只实现了一半,能通过 tools 传入函数,但是响应消息中命中函数还是使用的 function_call,而不是最新的 tool_calls。
from openai import OpenAI
import json
import requests
import time
# 获取天气的方法
def get_city_weather(param):
city = json.loads(param)["city"]
r = requests.get(f"https://wttr.in/{city}?format=j1")
data = r.json()["current_condition"]
temperature = data[0]['temp_C']
humidity = data[0]['humidity']
text = data[0]['weatherDesc'][0]["value"]
return "当前天气:" + text + ",温度:" + temperature + "℃,湿度:" + humidity + "%"
# 天气插件的定义
weather_tool = {
"type": "function",
"function": {
"name": "get_city_weather",
"description": "获取某个城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称",
},
},
"required": ["city"],
},
}
}
# 创建 OpenAI 客户端
client = OpenAI(api_key='no-need-key', base_url="http://127.0.0.1:6006/v1")
():
client.chat.completions.create(
messages=messages,
model=,
stream=,
tool_choice=,
tools=[weather_tool]
)
questions = [, , , ]
messages = []
()
question questions:
messages.append({
: ,
: question,
})
(, question)
response_message = create_completion().choices[].message
messages.append(response_message)
response_message.function_call :
function_call = response_message.function_call
weather_info = get_city_weather(function_call.arguments)
messages.append({
: ,
: weather_info,
: function_call.name
})
second_chat_completion = create_completion()
gpt_output = second_chat_completion.choices[].message.content
(, gpt_output)
time.sleep()
messages.append({
: ,
: gpt_output,
})
:
(, response_message.content)
为了在资源受限的设备上运行,或者提高推理速度,可以对模型进行量化。ChatGLM3-6B 支持 4-bit 和 8-bit 量化。
在加载模型时,可以通过指定 load_in_4bit 参数来实现。这能显著降低显存占用,使模型能在更低配置的显卡上运行。
修改 basic_demo/cli_demo.py 或 api_server.py 中的模型加载部分:
model = AutoModel.from_pretrained(
"./chatglm3-6b",
trust_remote_code=True,
load_in_4bit=True # 启用 4-bit 量化
)
或者在命令行启动脚本时添加参数(取决于具体封装脚本):
python cli_demo.py --load-in-4bit
量化后的模型加载速度会变慢,但推理时的显存占用会大幅减少。对于消费级显卡(如 RTX 3060 12G),开启 4-bit 量化通常可以流畅运行 ChatGLM3-6B。
本文介绍了 ChatGLM3-6B 大模型的私有化部署流程,涵盖了云端和本地两种环境,以及 WebUI 体验和 API 开发。通过量化优化,可以进一步降低硬件门槛。希望这些经验能帮助开发者快速上手大模型应用开发。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online