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

ChatGLM3-6B 大模型本地及云端部署与使用指南

综述由AI生成介绍国产开源大模型 ChatGLM3-6B 的部署与使用方法。涵盖云环境和本地 Windows 环境的安装步骤,包括依赖配置、模型下载及虚拟环境搭建。详细说明了如何通过 WebUI 进行对话、工具调用及代码解释器测试,并提供了基于 OpenAI 接口规范的 API 服务启动与 Python 客户端调用示例,帮助开发者快速上手私有化部署及应用开发。

城市逃兵发布于 2025/2/6更新于 2026/5/3016 浏览
ChatGLM3-6B 大模型本地及云端部署与使用指南

ChatGLM3-6B 大模型本地及云端部署与使用指南

部署一个自己的大模型,进行开发测试,可能是很多技术同学想做但又迟迟没下手的事情。原因可能是成本较高,需要高性能显卡,或者官方部署说明过于简单,安装时容易遇到各种兼容性问题。本文分享安装部署经验,包括本地和租用云服务器的方式,以及如何通过 API 调用大模型开发 AI 应用。

ChatGLM3-6B 简介

本次部署使用的模型是 ChatGLM3-6B,这是清华智谱研发并开源的高性能中英双语对话语言模型。它凭借创新的 GLM(Gated Linear Units with Memory)架构及庞大的 60 亿参数量,在对话理解与生成能力上表现卓越。

ChatGLM3-6B 能够处理复杂的跨语言对话场景,实现流畅的人机互动,还具备函数调用以及代码解释执行的能力。开发者可以通过 API 调用,让模型执行特定任务或编写、解析简单的代码片段。此外,支持对预训练模型进行定制化微调,也能对模型进行量化,使用较低的数字精度来表示权重,使得模型可以运行在消费级显卡甚至 CPU 上。

云环境部署

这里以 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 即可。

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3

创建一个 Python 的虚拟环境,这样方便隔离不同项目对 Python 环境的不同要求。这里使用 source activate 激活虚拟环境,很多文章中是 conda activate,这和 conda 的版本有关系,AutoDL 中的版本不支持 conda activate。

conda create -n chatglm3-6b python=3.10.8 
source activate chatglm3-6b

然后使用 uv 安装依赖的程序包。为什么用 uv?因为 requirements 中很多包的版本要求都是 >=,直接使用 pip 的时候会安装最新的版本,最新的版本往往和开发者使用的版本不同,这会导致一些兼容问题,所以最好就是 == 的那个版本,这个版本能用,而且一般就是开发者使用的版本。

pip install uv
uv pip install --resolution=lowest-direct -r requirements.txt

然后我们还要下载大模型文件,这里从 AutoDL 的模型库中下载,速度比较快。使用 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,可以把它理解为一个 Python 集成环境,通过它我们可以方便的开发 Python 程序。

安装成功后,启动'Anaconda Navigator',在其中点击'Environments'->'base(root)' ->'Open Terminal',打开终端。

这是一个命令行工具,我们将主要在这里边通过执行命令安装 ChatGLM3-6B。

然后还需要从 Github 上下载代码到本地,推荐使用 Git。当然直接从 Github 下载程序包到本地也可以。

将程序放到指定目录,例如 C:\ChatGLM3。

cd C:\
git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3

使用下面的命令创建一个 Python 的虚拟环境并激活,这样方便隔离不同项目对 Python 环境的不同要求。

conda create -n chatglm3-6b python=3.10.8 
conda activate chatglm3-6b

然后还需要把相关模型文件下载到本地,为了防止下载方式失效,这里提供多种方法:

(1)下载 AutoDL 用户分享的模型,执行下面的命令,它会下载到 C:\ChatGLM3\THUDM,速度还可以。

pip install requests
pip install codewithgpu
cg down xxxiu/chatglm3-6b/config.json -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/configuration_chatglm.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/gitattributes -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model.safetensors.index.json -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/MODEL_LICENSE -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00001-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00002-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00003-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00004-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00005-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00006-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/model-00007-of-00007.safetensors -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/modeling_chatglm.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/pytorch_model.bin.index.json -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/quantization.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/README.md -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/tokenization_chatglm.py -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/tokenizer.model -t C:\ChatGLM3\THUDM
cg down xxxiu/chatglm3-6b/tokenizer_config.json -t 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 代码,就像使用大多数的大语言模型一样。额外的用户还可以配置一些参数,比如一次生成 Token 的数量、系统提示词、采样的随机性控制等。

启动 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,可知这个 WebUI 使用的是 streamlit 框架。

如果是在个人电脑上安装的,点击这里的连接就可以在浏览器访问了。

如果是在 AutoDL 上的实例,还需要再折腾一下。因为这个 WebUI 使用了 WebSocket,但是 AutoDL 开放的外网端口不支持 WebSocket。此时可以通过 SSH 隧道的方式来打通本地与 AutoDL 实例的网络。

我们需要类似下面这样的一条指令:

sudo ssh -CNg -L 8501:127.0.0.1:8501 root@connect.westb.seetacloud.com -p 12357

其中的 connect.westb.seetacloud.com 和端口号需要替换成你自己实例的,在实例列表中复制登录指令。

在个人电脑的终端或者命令行工具执行上面写好的指令,首先需要统一添加主机(输入 yes),然后需要输入主机登录密码,还是从 AutoDL 的实例列表拷贝。

登录成功后,这个界面会挂起,不会输出任何内容。此时我们在浏览器地址栏输入 http://127.0.0.1:8501 就可以访问了。

使用 WebUI

这个 WebUI 左边是参数区域,右边是使用区域,有三种使用方式:Chat、Tool 和 Code Interpreter,分别就是聊天、工具或插件、代码解释器。

聊天就不用说了,我们看下工具或插件的使用。它会完整的展现出来插件的使用过程,用户询问问题,触发大模型调用插件,展现插件返回的内容,大模型整理插件返回的内容并输出给用户。

具体的可以修改这个文件中的第 144 行 -198 行:composite_demo/demo_tool.py。

实例代码中提供了两个工具,一个是获取实时天气,另一个是生成随机数,用户还可以修改代码增加自己的工具插件,在 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 角色实现的。

在 composite_demo/demo_ci.py 中可以看到提示词:

当程序执行出错的时候,程序会通过 observation 角色把错误再发给 ChatGLM 进行分析,然后 ChatGLM 会修改代码,再重新输出到程序中,最后使用 Jupyter 内核执行代码。

使用 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
# conda 如果不行就使用 source activate chatglm3-6b

最后启动 API 服务器:python openai_api_demo/api_server.py。

看到 running on http://127.0.0.1:6006 的提示信息就代表启动成功了。

注意这里的端口号,如果你是在 AutoDL 部署的程序,需要将端口号修改为 6006,然后才能通过 AutoDL 提供的'自定义服务'在外网访问,端口号在 openai_api_demo/api_server.py 文件的最末尾。

修改后重启 API 服务,然后在 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,
    #temperature=0.1,
    top_p=0.3,
    #frequency_penalty=0.5,
    presence_penalty=0.2,
    seed=12345,
    #stop='30 年',
    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"]
    #print(json.dumps(data))
    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 客户端,获取 API Key 请看文章最后
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)
    #print(response_message)
    # 根据插件命中情况,执行插件逻辑
    if response_message.function_call is not None:
        function_call = response_message.function_call
        # 追加插件生成的天气内容到聊天上下文
        weather_info = get_city_weather(function_call.arguments)
        #print(weather_info)
        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
        # 打印 GPT 合成的天气内容
        print("GLM:",gpt_output)
        time.sleep(0.2)
        # 将 GPT 的回答也追加到上下文中
        messages.append({
            "role": "assistant",
            "content": gpt_output,
        })
    else:
        print("GLM:",response_message.content)

执行效果如下:

目录

  1. ChatGLM3-6B 大模型本地及云端部署与使用指南
  2. ChatGLM3-6B 简介
  3. 云环境部署
  4. 使用现有镜像
  5. 自己手动安装
  6. 本地环境安装
  7. 使用 WebUI 体验
  8. 启动 WebUI 服务
  9. conda 如果不行就使用 source activate chatglm3-6b
  10. 使用 WebUI
  11. 使用 API 开发应用
  12. 启动 API 服务
  13. conda 如果不行就使用 source activate chatglm3-6b
  14. 调用 API 服务
  15. 一个简单的聊天程序
  16. 获取天气的方法
  17. 天气插件的定义
  18. 创建 OpenAI 客户端,获取 API Key 请看文章最后
  19. 定义请求 GPT 的通用方法
  20. 我的三个问题
  21. 聊天上下文,初始为空
  22. 遍历询问我的问题
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • HDFS 编程实践:命令、API 与部署
  • 本地部署 Llama3:基于 Ollama 的离线运行指南
  • 本地大模型工具调用能力评测:主流 Agent 框架实测与局限
  • Web3 开发者必读:深入理解 10 个核心 ERC 标准
  • C++ 图论基础与实战应用
  • EhViewer:开源免费安卓 E-Hentai 漫画浏览器安装与使用教程
  • C++ 模板进阶:特化、萃取与可变参数模板
  • 开源数字图书馆构建指南:去中心化知识共享平台实践
  • Java 核心:char、String、StringBuilder 与 StringBuffer 详解
  • Linux 操作系统核心概念与实战入门
  • 算法进阶:一维前缀和原理与实战
  • Python 初学者必会的常用代码示例与算法解析
  • Android 插件化技术全解析与核心原理实践
  • 行星减速器原理、计算公式与 C++ 实现
  • 县城学子考入清北的困境与教育差距观察
  • 垂直行业大模型的训练策略与实施挑战分析
  • Java 高频面试题汇总与答案解析
  • 2026 年主流 AI 大模型实测排名与选型建议
  • Python 网络爬虫实战指南:13 个核心场景与反爬策略解析
  • C++ 多线程进阶:深入理解互斥锁与竞态条件

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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