学习路径
GLM-5 是 Z.ai 最新的开放式推理模型,因其在编码、代理工作流和长上下文对话方面的强劲表现而迅速受到关注。
许多开发者已经在用它一键生成网站、构建小型应用,并尝试本地 AI 代理。
挑战在于 GLM-5 体量非常大,在消费级硬件上本地运行并不现实。即使是量化版本也需要数百 GB 的内存以及强大的 GPU 配置。
在本教程中,我们将演示一种务实的方法:在 NVIDIA H200 集群上使用 2-bit GGUF 量化在本地运行 GLM-5,通过 llama.cpp 提供服务,并将其连接到 Aider,这样您就能在自己的项目中把 GLM-5 当作真正的编码代理来使用。
另外,也推荐查看我们的指南:本地运行 GLM 4.7 Flash。
先决条件:运行 GLM-5 需要什么
在本地运行 GLM-5 之前,您需要合适的模型变体、足够的内存来加载它,以及一套可用的 GPU 软件栈。
硬件需求取决于量化规模:
- 2-bit(281GB):适配约 300GB 统一内存系统,或使用 1×24GB GPU + 约 300GB RAM 并配合 MoE offloading 也能良好运行
- 1-bit:适配约 180GB RAM
- 8-bit:需要约 805GB RAM
为获得最佳性能,您的 VRAM 与系统内存的总和应尽量接近量化大小。否则,llama.cpp 可以将部分负载卸载到 SSD,但推理会更慢。在 llama.cpp 中使用 --fit 以最大化 GPU 使用率。
在我们的配置中,我们在 NVIDIA H200 上运行 GLM-5-UD-Q2_K_XL,并配备足够的 VRAM 与系统内存,以高效容纳模型。
软件先决条件:
- 已安装的 GPU 驱动
- CUDA Toolkit
- 可用的 Python 环境
如何在本地运行 GLM-5
下面是本地运行 GLM-5 的分步说明:
1. 设置本地环境
即使是 1-bit 版本的 GLM-5,也大到多数消费级笔记本无法承载。因此在本教程中,我将使用Runpod,并配备一块NVIDIA H200 GPU。
首先创建一个新的 pod,并选择最新的PyTorch 模板。

然后点击Edit 来调整 pod 设置:
- 将卷磁盘大小提升至 500GB,因为我们的 2-bit 模型约为 280GB,且需要额外空间进行构建和试验。
- 打开8080 端口,这样您可以直接在浏览器中访问 llama.cpp 的 Chat UI。
- 将您的Hugging Face 令牌添加为环境变量,以加速模型下载(您可以在 Hugging Face 账户中生成令牌)。

确认无误后,查看 pod 摘要并点击Deploy On-Demand。

当 pod 就绪后,打开JupyterLab,启动一个终端(Terminal)并从那里开始操作。使用 Jupyter 终端很方便,因为无需依赖 SSH 就能顺畅运行多个会话。

首先,确认 GPU 可用:
nvidia-smi
您应当能在输出中看到 H200。

接下来,安装克隆和构建 llama.cpp 所需的 Linux 软件包:
sudo apt update
sudo apt install -y git cmake build-essential curl jq
2. 使用 CUDA 支持编译 llama.cpp
现在 Runpod 环境已就绪且 GPU 正常工作,下一步是安装并编译llama.cpp,启用 CUDA 加速,使 GLM-5 能在 H200 上高效运行。
首先,进入工作区目录并克隆官方 llama.cpp 仓库:
cd /workspace
git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
此时需要注意:最新的稳定版 llama.cpp 尚未完全即开即用地支持 GLM-5。您需要拉取包含近期兼容性更新的特定上游 PR。
获取并检出更新的分支:
git fetch origin pull/19460/head:MASTER && git checkout MASTER && cd ..
接下来配置构建系统,使 llama.cpp 以启用 CUDA 的方式进行编译,从而让模型使用 GPU 加速,而不是完全在 CPU 上运行。
使用开启 CUDA 标志运行 CMake:
cmake llama.cpp -B llama.cpp/build \
-DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON

这会创建一个独立的build/ 目录,并确保 llama.cpp 服务器二进制文件支持 NVIDIA GPU 执行。
配置完成后,构建llama-server 目标:
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-server

这一步可能需要几分钟,取决于 pod 性能。完成后,您将获得一个启用 CUDA 的服务器二进制文件,可用于运行 GLM-5。
最后,将编译好的可执行文件复制到主文件夹,方便访问:
cp llama.cpp/build/bin/llama-* llama.cpp
3. 从 Hugging Face 下载 GLM-5 模型
llama.cpp 编译就绪后,下一步是从 Hugging Face 下载GLM-5 GGUF 模型文件。
由于这些模型检查点极其庞大,启用最快的下载方式非常重要。
Hugging Face 提供了可选工具,如hf_xet 和hf_transfer,它们能显著提升下载速度,尤其是在像 Runpod 这样的云主机上。
先安装所需的 Hugging Face 下载工具:
pip -q install -U "huggingface_hub[hf_xet]" hf-xet
pip -q install -U hf_transfer
这些软件包支持更快的并行下载,并在拉取数百 GB 的模型分片时提供更好的性能。
现在下载本教程中使用的特定量化模型变体。我们只需要UD-Q2_K_XL 文件,而不是整个上传集:
hf download unsloth/GLM-5-GGUF \
--local-dir models/GLM-5-GGUF \
--include "*UD-Q2_K_XL*"
这会将模型直接保存到 models/GLM-5-GGUF 目录中。
在我们的环境中,下载速度可达1.2 GB/s,这是因为我们启用了hf_xet 并提前提供了 Hugging Face 令牌。匿名下载通常会慢很多,因此在处理此规模的模型时,设置认证与传输加速能带来巨大差异。

4. 在单块 GPU 上启动 GLM-5 模型
现在模型已下载且 llama.cpp 已启用 CUDA 支持,我们可以使用内置的llama-server 启动 GLM-5。
运行以下命令启动服务器:
./llama.cpp/llama-server \
--model models/GLM-5-GGUF/UD-Q2_K_XL/GLM-5-UD-Q2_K_XL-00001-of-00007.gguf \
--alias "GLM-5" \
--host 0.0.0.0 \
--port 8080 \
--jinja \
--fit on \
--threads 32 \
--ctx-size 16384 \
--batch-size 512 \
--ubatch-size 128 \
--flash-attn auto \
--temp 0.7 \
--top-p 0.95
这里有几个重要参数需要理解:
--host 0.0.0.0将服务器暴露出来,便于从浏览器访问--port 8080与我们之前在 Runpod 中打开的端口一致--fit on确保在溢出到 RAM 前尽可能利用 GPU--ctx-size 16384设置推理的上下文窗口大小--flash-attn auto在支持时启用更快的注意力内核
启动服务器后,您会注意到 llama.cpp 几乎使用了所有可用的 GPU 内存,剩余的模型层会卸载到系统内存中。这是预期行为,并且在 H200 配置上效果良好。

模型应在一分钟内加载并开始提供服务。如果您的 pod 用时显著更长,实例可能存在问题。这种情况下,通常更快的做法是终止该 pod 并新建一个。

服务器运行后,通过查询 OpenAI 兼容端点来验证 GLM-5 是否可用:
curl -s http://127.0.0.1:8080/v1/models | jq
您应在响应中看到 "GLM-5",这表明模型已加载并可使用。
{
"models": [
{
"name": "GLM-5",
"model": "GLM-5",
"modified_at": "",
"size": "",
"digest": "",
"type": "model",
"description": "",
"tags": [
""
],
"capabilities": [
"completion"
],
"parameters": "",
"details": {
"parent_model": "",
"format": "gguf",
"family": "",
"families": [
""
],
"parameter_size": "",
"quantization_level": ""
}
}
],
"object": "list",
"data": [
{
"id": "GLM-5",
"object": "model",
"created": 1770900487,
"owned_by": "llamacpp",
"meta": {
"vocab_type": 2,
"n_vocab": 154880,
"n_ctx_train": 202752,
"n_embd": 6144,
"n_params": 753864139008,
"size": 281373251584
}
}
]
}
5. 通过聊天界面测试 GLM-5 模型
服务器运行后,您可以直接通过内置的 llama.cpp Chat UI 测试 GLM-5。
通常,WebUI 可在本地访问:http://127.0.0.1:8080
不过,由于我们在云端的 Runpod 上运行,该 localhost 链接无法从您的本机访问。
请改为前往您的Runpod 控制台,点击 8080 端口对应的HTTP Service 链接。这是转发到您正在运行的 llama-server 的公共 URL。
打开该链接将进入 Chat UI,GLM-5 模型已加载就绪。

为确认一切正常,先发送一个简单消息,如 “Hey!!”。您应能看到模型立即响应。
在我们的情况下,推理速度约为每秒 8.7 个 token,考虑到 GLM-5 的体量和 281GB 的量化检查点,这个性能非常出色。

6. 安装并连接 Aider
Aider 是一个基于终端的 AI 结对编程工具,可直接在您的项目文件夹中工作。
您可以像与编码伙伴聊天一样与它交流,它能在整个代码仓中创建、编辑和重构文件,同时始终基于您的实际代码库与 git 工作流。
它还支持连接到任何兼容 OpenAI 的 API 端点,这使它非常适合与我们本地的 llama.cpp 服务器配合使用。
首先安装 Aider:
pip install -U aider-chat
接着,将 Aider 指向您的本地 llama.cpp OpenAI 兼容服务器。我们设置了一个占位 key,因为 llama.cpp 并不需要真实的 OpenAI key:
export OPENAI_API_BASE=http://127.0.0.1:8080/v1
export OPENAI_API_KEY=local
export OPENAI_BASE_URL=$OPENAI_API_BASE
现在创建一个全新的演示项目文件夹(让 Aider 有一个干净的仓库来工作):
mkdir -p glm5-demo-app
cd glm5-demo-app
最后,启动 Aider,并使用我们先前暴露的模型别名连接到 GLM-5:
aider --model openai/GLM-5 --no-show-model-warnings
此时,您在 Aider 中的任何请求都会通过本地 GLM-5 服务器路由,Aider 会将更改直接应用到 glm5-demo-app 中的文件。
将 GLM-5 用作您的编码代理
一旦 Aider 连接到 GLM-5,您就可以在仓库内将其当作编码代理来使用。先用一个简单的问候语确认其响应迅速。

然后,给出一个清晰的任务提示,例如:
Create a simple Python FastAPI project with one /health endpoint, a README, and instructions to run it locally.

Aider 会先提出一个计划,然后请求允许应用修改。

接受修改后,它会自动生成文件。
在像GLM-5-UD-Q2_K_XL 这样的 2-bit 量化上,您可能会看到一些小错误,例如创建一个类似 pip install -r requirements.txt 这样的文件——这是错误的。完整模型更不容易犯此类错误,但 2-bit 模型在快速人工检查下仍非常好用。

Aider 完成项目写入后,进入该文件夹,安装依赖并运行服务器:
cd glm5-demo-app/pip install -r requirements.txt
使用 Uvicorn 启动 FastAPI 应用:
uvicorn main:app --reload
服务器将运行在 8000 端口。

测试健康检查端点:
curl -s http://127.0.0.1:8000/health
您应当得到:
{"status":"ok"}
结语
GLM-5 正迅速成为 AI 社区最受讨论的开源权重模型之一,尤其因为它将开源性能进一步逼近闭源模型,同时面向深度推理、代理式工作流与编码任务而设计。
尽管声势很大,在本地运行全尺寸模型对普通用户而言仍然是挑战。
即便经过量化,像 GLM-5 这样的模型仍需要数百 GB 的内存与高速 GPU,这并不是许多人在家用设备上所具备的。
这意味着大多数人要么依赖云端 GPU pod(如本教程中的 H200 配置),要么使用托管的 API 服务。
GLM-5 的开源权重特性非常有力,因为它让您可以自行托管与控制实例,而无需依赖专有 API 提供商;但这也凸显了为什么在 AI 领域,“开源”并不意味着人人都能“在笔记本上跑起来”。
在本教程中,我们展示了如何在Runpod 的 H200 GPU 上使用 2-bit 量化版 GLM-5 来克服这些硬件障碍。我们依次完成了环境搭建、编译启用 CUDA 的 llama.cpp、高效下载模型、启动推理服务器、通过浏览器 UI 测试,最后连接 Aider,将 GLM-5 用作实际开发任务的代理。
GLM-5 常见问题
什么是 GLM-5,为什么它很重要?
GLM-5 是 Z.ai 最新的开放式推理模型,专为编码、代理式工作流和长上下文聊天等复杂任务打造。其参数量超过7500 亿,是一款庞大的混合专家(MoE)模型,在逻辑与问题求解方面可与顶级专有模型媲美。它尤其以能够进行“一次成型”的网站生成和深度推理而著称,这些往往是小型开源模型所难以胜任的。
2-bit 量化模型是否足够聪明,能胜任编码?
可以。尽管传统上 2-bit 量化会降低性能,但 GLM-5 的巨大规模使其对压缩具有很强的韧性。即使在 2-bit 精度下,模型仍保留了绝大多数推理能力,在复杂编码任务上可胜过许多更小的 FP16 模型(如 Llama-3-70B)。它在逻辑与架构方面表现出色,不过建议配合 Aider 等工具来捕捉细小的语法错误。
GLM-5 与 GLM-4 等前代版本有何不同?
最大的差异在于规模与侧重点。GLM-5 在深度推理与代理能力上实现了代际跃迁。GLM-4 是强大的全能型选手,而 GLM-5 作为巨型 MoE(混合专家)模型,被设计为能“思考”多步工程问题。它还拥有显著更大的上下文窗口(训练可达 20 万),在分析大型代码库或长文档方面要强得多。
为什么需要从源代码编译 llama.cpp 才能运行?
标准版的 llama.cpp 往往落后于最新的模型架构。由于 GLM-5 使用了特定的 MoE 变体和新的张量操作,它需要一些尚未合并到主分支的上游更改。使用带有 CUDA 标志从源代码编译,能确保具备将模型层卸载到 NVIDIA H200 等 GPU 所需的内核;否则模型可能无法加载。
GLM-5 是否支持“思考”或“推理”过程 token?
是的,GLM-5 被定位为开放式推理模型。这意味着对于复杂查询,它可以生成内部的“思维”链条,将问题分解后再输出最终答案。与 Aider 等编码代理配合时,模型能够逐步规划重构或调试隐晦错误,较之标准的“预测下一个 token”模型,能带来更高质量的代码生成。
作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。
