在 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 个逻辑核心

备注: 这里的 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 以内
--context-length 548576HiCache
将内存作为 L2 Cache 存储 KVCache,显著提升高请求下的 Prefill 速度
但是代价就是 Prefill 阶段下的 Cuda Graph 被强制关闭,影响 Prefill 速度,需要根据实际情况权衡
--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拆分,它实现了显著更高的译码并发性。是一个非常有前景的功能,可惜就一台机器,等后面有两台了多少测试测试
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!





