在 H100/H200/B300 上部署 GLM

1096 字
5 分钟
在 H100/H200/B300 上部署 GLM

前言#

由于一开始没有这个 Blog,现在已经发展到了 B300,这篇 Blog 就将就着看吧

Why SGLang#

无他,因为一开始 VLLM 和 SGLang 我两个框架都不熟,然后 SGLang 的文档明显比 VLLM 好一万倍,于是我就选 SGLang 了

两者都是相当成熟的模型框架,问 AI 怎么选的时候容易被骗,看个人吧

H100 on AWS#

第一台服务器是老板用 AWS 大客户权益给我们摸的 8XH100,实例类型是 p5.48xlarge, 拥有 8 卡 H100,28 TB NVME SSD,2TB 内存和双路 AMD EPYC 7R13

不过,8xH100 用来跑黄图可以,部署当时比较热门的大模型, 比如 GLM-5.1-FP8,除非 CPU offload,但是 fp8 cpu offload 后只有 8-10 TPS,有点神了,Hopper 还不支持 NVFP4

后面还试了 GLM-5.1-AWQ,SGLang 不支持,魔改了 SGLang 识别 model name 的代码才算跑起来,有点神

GLM-5.1-GGUF UD-Q4_K_XL 倒是可以跑起来,现在想想,KTransformer 的应该更适合这种推理场景

H200#

第二台倒是好点,虽然是 CN Server,但也还可以跑起来 GLM 5.1 FP8,算是能用了,也积攒了不少经验

当时还被 CLAUDE_CODE_ATTRIBUTION_HEADER 炸过缓存,P50 TTFT 直接飙到 5 秒多,后来才发现

SGLang 上 GLM 5.1 的文档是真不详细啊

B300#

得劲的来了,8 卡 B300,288GB 显存,4TB 内存,双路 Intel Xeon 6767P, 256 个逻辑核心

alt text
alt text

备注: 这里的 L20D 不用管,这是正宗 B300

一开始呢以为 B300 一上,从此 AI 自由,可以打着 200 RPM 进去,没想到还是踩了很多坑

卡在哪#

主要原因就是长上下文未缓存命中的请求进来,该 TP 会调度用来 Prefill,尽管 B300 上的 prefill speed 高达 10000TPS,但是对于动辄 100K 以上的上下文,prefill 速度还是不够快,那么就会产生大量排队,导致 TTFT 严重增加,影响用户体验

一些我的优化经验:

上下文#

上下文砍半是个相当不错的选择,1M 上下文大部分人完全用不到,但一次就是要占用这么多 KVCache,导致 KVCache 严重浪费,经过评估 context-length 548576 完全够用,Claude Code 大部分情况下都会把 context 控制在 400K 以内

Terminal window
--context-length 548576

HiCache#

将内存作为 L2 Cache 存储 KVCache,显著提升高请求下的 Prefill 速度

但是代价就是 Prefill 阶段下的 Cuda Graph 被强制关闭,影响 Prefill 速度,需要根据实际情况权衡

Terminal window
--enable-hierarchical-cache \
--hicache-size 224 \
-hicache-write-policy write_back \
--hicache-mem-layout page_first \

加载速度优化#

方便修改参数调试,CPU 多且带宽足够的情况下可以显著提升加载速度

--model-loader-extra-config {"enable_multithread_load":true,"num_threads":64} \
--weight-loader-prefetch-checkpoints \
--weight-loader-prefetch-num-threads 64 \

使用 fastsafetensor 并没有感受到明显提升,所以暂不使用

上下文并行#

以前只支持 Hopper,最近 Blackwell 也上了,体验一波,虽然可以提升 Prefill 速度,但是和 DP 模式不兼容,会影响最大吞吐量,我们人少

--attn-cp-size 8 \
--enable-prefill-cp \
--cp-strategy interleave \

一些小优化#

--tokenizer-backend fastokens

优化 tokenizer 足够,千万不要加上什么 tokenizer worker,几乎没有收益,并且会提升系统不稳定性(有天 DetokenizerWorker 突然崩溃,整个系统宕机了 20 Min,然后 SGLang 才自动恢复 tokenizer)

--enable-nccl-nvls \
--pre-warm-nccl \

使用 NCCL 优化传输

Chunked Prefill Size 和 Cuda Graph Decode 调参#

没啥意义,收益较小

其他未来的尝试#

DSpark#

基于这个仓库 https://huggingface.co/RedHatAI/GLM-5.2-speculator.dspark ,当时还花了好久换成 VLLM,因为只有 VLLM 支持 GLM 5.2 DSpark(但是用的是 epoch-3 版本)

很失败,这个 dspark 推理解码不成熟,100k 开外直接预测成 [-1,-1,-1,-1,-1,-1,-1],没啥用

4 天前又更新了版本,不知道这个新版怎么样,不过要换 Kimi K3 了

PD 分离#

不是 PD 分离不行,而是我们就一台机器,PD 分离成负优化了

就这么简单

Hisparse#

用于 PD 分离中的 Decode 端,按照官方的说法

HiSparse 通过在 GPU 上只保留一个小的“热”KV 缓冲区,同时将完整的 KV 数据保留在 CPU 钉置内存中,从而减少解码阶段的每次请求 GPU 内存消耗。结合PD拆分,它实现了显著更高的译码并发性。

是一个非常有前景的功能,可惜就一台机器,等后面有两台了多少测试测试

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

在 H100/H200/B300 上部署 GLM
https://blog.aeroides.dev/posts/2026/post1/deploy-glm-on-h100-h200-b300/
作者
Aeroides
发布于
2026-07-29
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Aeroides
Hello, I'm Aeroides.
公告
分类
标签
站点统计
文章
7
分类
2
标签
20
总字数
6,123
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.13.6
文章许可
CC BY-NC-SA 4.0

文章目录