跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

大模型私有化部署:清华智谱 GLM 大模型部署与使用指南

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

山野诗人发布于 2025/2/7更新于 2026/9/866 浏览
大模型私有化部署:清华智谱 GLM 大模型部署与使用指南

大模型私有化部署:清华智谱 GLM 大模型部署与使用指南

部署一个自己的大模型,是许多技术同学希望实现的目标。常见的顾虑包括硬件成本过高或官方部署说明过于简单导致安装困难。本文将分享本地和租用云服务器两种方式下的 ChatGLM3-6B 大模型安装部署经验,以及如何通过 API 调用开发 AI 应用。

ChatGLM3-6B 简介

本次部署使用的模型是 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

将相关模型文件下载到本地。为了防止下载方式失效,提供多种方法:

  1. 下载 AutoDL 用户分享的模型,执行下边的命令,它会下载到 C:\ChatGLM3\THUDM。
  2. 从 HuggingFace 的镜像下载。

最后做一个简单测试,执行命令: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

使用 WebUI 体验

ChatGLM 提供了一个 Web 界面,用户可以直接在这个页面上聊天、使用插件,以及执行 Python 代码。

启动 WebUI 服务

首先修改程序中的模型目录,在下载程序中找到文件 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

这个 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 开发应用

使用大模型 API,我们可以完全自定义自己的交互页面,增加很多有趣的功能,比如提供联网能力。

这里我们使用的是 ChatGLM3-6B 自带的一个 API 示例程序,这个程序中有一个参考 OpenAI 接口规范开发的 API 服务,我们可以直接使用 OpenAI 的客户端进行调用。

启动 API 服务

首先修改程序中的模型目录,在下载程序中找到文件 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 提供的'自定义服务'在外网访问。

调用 API 服务

这里还是以 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")

# 定义请求 GPT 的通用方法
def create_completion():
    return client.chat.completions.create(
        messages=messages,
        model='chatglm3-6b',
        stream=False,
        tool_choice="auto",
        tools=[weather_tool]
    )

# 我的三个问题
questions = ["请问上海天气怎么样?", "请问广州天气怎么样?", "成都呢?", "北京呢?"]

# 聊天上下文,初始为空
messages = []

print("---GLM 天气插件演示--- ")

# 遍历询问我的问题
for question in questions:  
    # 将问题添加到上下文中
    messages.append({
        "role": "user",
        "content": question,
    })
    print("路人甲:", question)

    # 请求 GPT,并拿到响应
    response_message = create_completion().choices[0].message
    # 把响应添加到聊天上下文中
    messages.append(response_message)
    
    # 根据插件命中情况,执行插件逻辑
    if response_message.function_call is not None:
        function_call = response_message.function_call
        # 追加插件生成的天气内容到聊天上下文
        weather_info = get_city_weather(function_call.arguments)
        messages.append({
            "role": "function",
            "content": weather_info,
            "name": function_call.name
        })
        # 再次发起聊天
        second_chat_completion = create_completion()
        gpt_output = second_chat_completion.choices[0].message.content
        print("GLM: ", gpt_output)
        time.sleep(0.2)
        # 将 GPT 的回答也追加到上下文中
        messages.append({
            "role": "assistant",
            "content": gpt_output,
        })
    else:
        print("GLM: ", response_message.content)

模型量化与优化

为了在资源受限的设备上运行,或者提高推理速度,可以对模型进行量化。ChatGLM3-6B 支持 4-bit 和 8-bit 量化。

4-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 开发。通过量化优化,可以进一步降低硬件门槛。希望这些经验能帮助开发者快速上手大模型应用开发。

目录

  1. 大模型私有化部署:清华智谱 GLM 大模型部署与使用指南
  2. ChatGLM3-6B 简介
  3. 云环境部署
  4. 使用现有镜像
  5. 自己手动安装
  6. 本地环境安装
  7. 使用 WebUI 体验
  8. 启动 WebUI 服务
  9. conda 如果不行就使用 source activate chatglm3-6b
  10. 使用 WebUI
  11. 工具或插件
  12. 代码解释器
  13. 使用 API 开发应用
  14. 启动 API 服务
  15. 调用 API 服务
  16. 简单聊天程序
  17. 使用插件
  18. 获取天气的方法
  19. 天气插件的定义
  20. 创建 OpenAI 客户端
  21. 定义请求 GPT 的通用方法
  22. 我的三个问题
  23. 聊天上下文,初始为空
  24. 遍历询问我的问题
  25. 模型量化与优化
  26. 4-bit 量化部署
  27. 总结

更多推荐文章

查看全部
  • Python 20 个常用库详解及代码示例
  • WebMCP:Chrome 新 API 特性与 Agentic Web 前瞻
  • OpenClaw 集成飞书机器人实战指南
  • Spring AI 开发 MCP Server 与 MCP Client(SSE 方式)
  • 教育类 APP 防越狱攻击:Qwen3Guard-Gen-WEB 实战指南
  • VR-Reversal:利用 MPV 将 3D 视频转换为 2D 格式的工具指南
  • AI 辅助开发实战:用 DeepSeek 构建贪吃蛇游戏
  • 算法实战:位运算解决两数之和、唯一数字与缺失数字
  • 基于动态反演与 ESO 的无人机鲁棒反馈线性化自适应姿态控制
  • Z-Image-Turbo 集成至 Photoshop 插件的 AI 绘画工作流
  • 网络安全 SRC 漏洞挖掘实战指南与学习路径
  • 深入解析 AI 大模型:概念、技术架构与产业现状
  • Kafka ISR 与 AR 深度解析:副本同步机制核心概念
  • Telegram 搜索机器人推荐:高效检索海量资源
  • Python 实现智能 PDF 文档助手 AI 小工具
  • 开源大模型文件后缀含义与量化选型指南
  • GenSE:基于分层建模的生成式语音增强语言模型方法
  • LatentSync 1.5 开源:字节 AI 数字人框架支持一键部署与中文优化
  • Java 工程项目管理系统功能模块与技术架构说明
  • Linux 核心 IO 模型深析:Cmake 构建与 poll 多路转接实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online