GLM-5 本地跑起来有多折腾?三个推理框架踩坑全记录
大家好,我是 147。
GLM-5 在 2 月 12 号开源了。744B 总参数,40B 激活参数,MoE 架构,MIT 协议。听起来很美好。
但我花了大半天时间才让 GLM-5 在本地稳定运行。中间换了 vLLM、SGLang、Ollama 三个推理框架,踩了至少五个坑。这篇文章把 GLM-5 本地部署的全过程记下来,省得你们重走一遍。
GLM-5 部署的硬件要求
GLM-5 的 BF16 版本需要大约 1.4TB 显存。你没看错,是 TB。这意味着你至少需要 8 张 H100(80GB)或者 8 张 A800。如果用 FP8 量化版(GLM-5-FP8),显存需求减半到大约 700GB,但仍然需要 8 卡。
消费级显卡?不用想了。即便是 4090(24GB),8 张加起来 192GB,连 FP8 版本的零头都不够。
不过 Ollama 提供了一个 glm-5:cloud 的选项,走的是云端推理,不需要本地显卡。后面会说。
方案一:用 vLLM 部署 GLM-5
vLLM 是目前社区里部署大模型最主流的框架。GLM-5 官方也推荐 vLLM 作为首选。
安装
官方给了两种方式,Docker 或者 pip。我建议用 Docker,环境更干净:
docker pull vllm/vllm-openai:nightly
如果选 pip 安装,注意一点:必须装最新的 nightly 版本,稳定版还不支持 GLM-5:
pip install -U vllm --pre --index-url https://pypi.org/simple --extra-index-url https://wheels.vllm.ai/nightly
然后还得升级 transformers 到主分支:
pip install git+https://github.com/huggingface/transformers.git
这一步很容易漏。我第一次跑就是因为 transformers 版本不对,报了一个 GLMVisionProcessor not found 的错。
启动
vllm serve zai-org/GLM-5-FP8 \
--tensor-parallel-size 8 \
--gpu-memory-utilization 0.85 \
--speculative-config.method mtp \
--speculative-config.num_speculative_tokens 1 \
--tool-call-parser glm47 \
--reasoning-parser glm45 \
--enable-auto-tool-choice \
--served-model-name glm-5-fp8
几个参数解释一下:
tensor-parallel-size 8:8 卡并行,低于 8 卡跑不动 FP8 版本speculative-config.method mtp:多 token 预测,GLM-5 原生支持,开了能提速 20-30%tool-call-parser glm47:工具调用解析器,用 glm47 版本。这里踩过坑,用旧版的 glm45 parser 会导致 function calling 输出格式错误reasoning-parser glm45:推理内容解析器
vLLM 部署 GLM-5 的已知问题
第一个坑,MTP 和结构化输出冲突。开了 speculative-config.method mtp 之后,如果同时要求模型输出 JSON 格式,偶尔会在 JSON 前面多出一个字符(比如 A{ 而不是 {)。GitHub 上有人报了这个 issue,暂时的解法是在需要结构化输出的时候关掉 MTP。
第二个坑,Pipeline Parallelism 吞吐很低。如果你的多卡走的是 PP(流水线并行)而不是 TP(张量并行),吞吐量会非常低。GLM-5 更适合走纯 TP。
第三个坑,长时间运行后偶现 CUDA 非法内存访问。GLM-4.6 系列在 vLLM 上就有这个问题,大约处理 200 多个请求后会触发。GLM-5 上目前还没有明确的复现报告,但建议做好进程自动重启的兜底。
方案二:用 SGLang 部署 GLM-5
SGLang 是 LMSYS 团队搞的推理框架,在 prefix caching 和批处理上做了不少优化。GLM-5 官方也给了 SGLang 的部署方案。
安装
官方直接给了 Docker 镜像,分 Hopper 和 Blackwell 两个版本:
docker pull lmsysorg/sglang:glm5-hopper # H100/H800
docker pull lmsysorg/sglang:glm5-blackwell # B200/B100
启动
python3 -m sglang.launch_server \
--model-path zai-org/GLM-5-FP8 \
--tp-size 8 \
--tool-call-parser glm47 \
--reasoning-parser glm45 \
--speculative-algorithm EAGLE \
--speculative-num-steps 3 \
--speculative-eagle-topk 1 \
--speculative-num-draft-tokens 4 \
--mem-fraction-static 0.85 \
--served-model-name glm-5-fp8
SGLang 用的是 EAGLE 投机解码,跟 vLLM 的 MTP 是不同的加速路线。实测下来,SGLang 在高并发批处理场景下吞吐量比 vLLM 高 10-15%,但单请求延迟差不多。
一个意外发现
之前 GLM-4.5-Air 在 vLLM 上有个 MTP + 结构化输出冲突的问题,在 SGLang 上完全没出现。怀疑是两个框架的投机解码实现方式不同导致的。如果你的场景大量用到 function calling + JSON 输出,SGLang 可能是更稳的选择。
方案三:用 Ollama 运行 GLM-5(cloud 模式)
没有 8 卡服务器怎么办?Ollama 提供了一个 glm-5:cloud 的标签,本质上是把推理请求转发到云端。
ollama run glm-5:cloud
就这么简单。不需要下载模型权重,不需要 GPU。
但有几个限制:
- 延迟比本地高,取决于你的网络状况
- 数据会经过 Ollama 的云端服务,如果你在意隐私需要考虑
- 不支持自定义推理参数(比如 temperature、top_p 这些可以调,但 TP 并行度、量化格式这些底层参数不可控)
适合个人试玩和快速验证。不适合生产环境。
vLLM vs SGLang vs Ollama:GLM-5 部署方案怎么选
| | vLLM | SGLang | Ollama Cloud | |---|---|---|---| | 硬件门槛 | 8×H100 / 8×A800 | 同左 | 无 | | 安装复杂度 | 中等 | 中等 | 极低 | | 推理速度 | 快 | 略快于 vLLM | 取决于网络 | | Function Calling 稳定性 | 有已知坑 | 更稳 | 未知 | | 社区生态 | 最大 | 增长快 | 最易用 | | 适合场景 | 生产部署 | 高并发批处理 | 个人试用 |
我的建议:如果你有足够的 GPU 资源,先试 SGLang,function calling 更稳;如果你的团队已经在用 vLLM 的基础设施,继续用 vLLM 问题也不大,注意绕开 MTP + 结构化输出的坑就行;如果只是想体验一下 GLM-5 的能力,Ollama cloud 五分钟搞定。
GLM-5 在华为昇腾 NPU 上的部署
顺带提一句,GLM-5 还支持在非 NVIDIA 芯片上跑,包括华为昇腾、摩尔线程、寒武纪等。官方给了 SGLang + Ascend、vLLM-Ascend、xLLM 三种方案。
翻了一下部署文档,昇腾的配置比 NVIDIA 卡复杂不少,Docker 镜像里挂载的设备节点就有十几个(/dev/davinci0 到 /dev/davinci15)。而且有个已知的文档错误(GitHub issue #4),说明这块还在快速迭代中。
如果你的基础设施是昇腾的,值得试一试。但目前这条路的社区支持和踩坑经验都明显少于 NVIDIA 侧。
常见问题
GLM-5 本地部署最少需要多少显存? FP8 量化版本(GLM-5-FP8)至少需要约 700GB 显存,即 8 张 H100/A800(80GB)。BF16 全精度版本需要约 1.4TB。消费级显卡无法运行。
vLLM 和 SGLang 部署 GLM-5 哪个更好? 如果你的场景大量使用 function calling + JSON 结构化输出,SGLang 更稳定(vLLM 的 MTP 与结构化输出有冲突)。如果团队已有 vLLM 基础设施,继续用 vLLM 也可以,注意绕开已知 bug。
没有 GPU 服务器怎么体验 GLM-5?
可以用 Ollama 的 glm-5:cloud 模式,走云端推理,不需要本地 GPU。或者直接使用 Z.ai 官方 API。
参考资料:
- GLM-5 官方 GitHub 部署文档:github.com/zai-org/GLM-5
- vLLM 部署 recipes:github.com/vllm-project/recipes/blob/main/GLM/GLM5.md
- SGLang cookbook:cookbook.sglang.io/autoregressive/GLM/GLM-5
- Ollama GLM-5 页面:ollama.com/library/glm-5:cloud