欢迎光临
我们一直在努力

GLM-5.3-Flash 在 8×A800 (sm_80) 上跑通(三):性能数据、显存账与生产运维

GLM-5.3-Flash 在 8×A800 (sm_80) 上跑通(三):性能数据、显存账与生产运维

首发CSDN · 技术连载第 3 篇(共 3 篇) 配套开源项目:GLM-5.3-Flash on 8×A800 (sm_80) 部署套件 前两篇讲了方案和 7 连坑。本篇收尾:实测性能、为什么必须 8 卡、以及上生产后的日常运维。

1. 成功跑通(v7 里程碑)

一路修完 7 个坑之后,v7 镜像成功起服务:

阶段实测
权重加载 39.8 GiB/卡 ×8,~36 s(页缓存热)
引擎 init 全程 335.5 s(含 TileLang JIT、autotune、图捕获)
Graph 捕获 86 s,3.46 GiB
KV cache 18.39 GiB/卡 → 1,535,933 tokens(1M ctx 并发 1.46×)
VRAM 稳态 76.7/80 GiB 每卡(GMU 0.90 + graphs)

API 验证通过:

  • /v1/models:zai-org/GLM-5.3-Flash,max_model_len=1,048,576 ✓
  • 数学 sanity:13×17 → content=221,reasoning=13*17=221,reasoning_effort=low 生效 ✓
  • 中文长文生成质量正常(量子计算短文,结构完整)✓
  • 单流吞吐 61.9 → 72.2 tok/s(含 TTFT;MTP×5 生效)

2. 生产配置定稿(v8,端口 8008)

在 v7 基础上调整参数并重测:

变更v7生产(v8)
端口 8006 8008
GMU(显存利用率) 0.90 0.95
max_num_seqs 256 32(图捕获集缩小:86s/3.46GiB → 66s/2.71GiB)
max_model_len 1,048,576 1,048,576(保持)

生产实测(同机同镜像):

  • KV 池 2,004,983 tokens(GMU 0.95 后每卡 KV ≈22.4 GiB)
  • VRAM 稳态 ~78.0/80 GiB 每卡
  • 引擎 init ~5.5 min;sanity(13×17)响应 0.43 s
  • 单流吞吐 79.0 tok/s(含 TTFT,较 v7 的 72.2 提升约 9%)
  • 1M 上下文为真实可跑满的单路上限(池 2.0M > 1M),并发满长上限 ~1.9 路

一个细节:max_num_seqs 从 256 降到 32,反而让 graph 捕获更小更快(86s/3.46GiB → 66s/2.71GiB),吞吐还有提升。说明"并发参数不是越大越好"——它直接决定 CUDA-graph 捕获集的大小。

3. 为什么必须 8 卡?—— 显存账

很多人会问"4 卡行不行"。算一笔账就清楚了:

  • 权重 ≈306 GiB / 8 卡 ≈ 38.3 GiB/卡(实测加载 39.8 GiB)
  • gpu-memory-utilization 0.95 → 每卡预算 76 GiB → KV 池 2,004,983 tokens
  • 4 卡方案:仅权重就 76.5 GiB/卡 > 物理上限 80 GiB,直接不可行

所以 8 卡不是"选择",是硬性门槛。


4. 一键部署脚本

核心封装在 deploy_glm53_flash_a800.sh,默认值全部支持环境变量覆盖:

变量默认说明
PORT 8008 对外端口(容器内固定 8000)
GMU 0.95 GPU 显存利用率
MAX_SEQS 32 最大并发序列
MAX_MODEL_LEN 1048576 上下文长度
NUM_SPEC_TOKENS 5 MTP 投机解码 token 数
TP / GPUS 8 / 0…7 张量并行 / 卡映射
IMAGE glm53-flash-sm80 使用的镜像
EXTRA_ARGS 追加 vLLM 参数

本地权重路径通过一个 git 忽略的配置文件注入,仓库里的模板是通用路径。

# 一键部署
./deploy_glm53_flash_a800.sh

# 盯启动日志(关键里程碑见下表)
docker logs -f glm53-flash-a800-8008

启动里程碑(参考耗时):

里程碑参考耗时日志关键字
权重加载 ~36 s(页缓存热) Model loading took 39.8 GiB
引擎初始化(TileLang JIT + autotune) ~5.5 min init engine … took
CUDA 图捕获 ~66 s(2.71 GiB) Graph capturing finished
就绪 Application startup complete.

5. 冒烟验证

./test_api.sh 8008

脚本做三件事:/v1/models 探活 → chat completion 数学 sanity(13*17→221)→ reasoning 解析检查(产出如下):

content : 221
reasoning(head) : 13*17=221
usage : prompt=xx completion=xx reasoning_tokens=xx
finish_reason : stop
PASS if content above is 221.

直接对话示例(OpenAI 兼容,含 reasoning 解析):

curl -s http://localhost:8008/v1/chat/completions \\
-H 'Content-Type: application/json' \\
-d '{"model":"zai-org/GLM-5.3-Flash",
"messages":[{"role":"user","content":"用三句话介绍卷积神经网络"}],
"chat_template_kwargs":{"reasoning_effort":"low"}}'
| python3 -m json.tool


6. 日常运维

  • 重启:重复执行 ./deploy_glm53_flash_a800.sh(脚本自动删旧容器)。关键优化:Triton/TileLang JIT 缓存已持久化到 vllm_cache/,重启跳过重编译(省数分钟)
  • 停止:docker rm -f glm53-flash-a800-8008
  • 换端口试跑:PORT=9000 ./deploy_glm53_flash_a800.sh
  • 小上下文快速验证:MAX_MODEL_LEN=32768 ./deploy_glm53_flash_a800.sh
  • 前台调试(看全量日志,Ctrl+C 停):./run_debug.sh

# 前台调试启动(同生产配置,–rm + 前台,便于盯全量日志)
./run_debug.sh –enforce-eager –max-model-len 32768

# 日志查询
docker logs -f glm53-flash-a800-8008

run_debug.sh 默认端口 8007,参数已对齐生产配置(GMU 0.95 / seqs 32 / 1M ctx / sparse_mla_force_mqa / JIT 缓存挂载),避免"调试配置与生产行为不一致"的误导。


7. 三个可复用的工程经验

  • 把"能不能跑"这种问题提前到探针阶段——不对拍不动内核,动了必先对拍(见第 2 篇 §6)。
  • 编译缓存挂进卷——vllm_cache/(vllm/triton/tilelang 三个子目录)持久化,重启从"数分钟 JIT 重编译"降到"秒级"。
  • 并发参数不是越大越好——MAX_SEQS=32 换来更小的 CUDA-graph 捕获集,反而更快(66s vs 86s)且吞吐更高(79 vs 72 tok/s)。

  • 8. 项目文件速查

    文件用途
    deploy_glm53_flash_a800.sh 一键生产部署(TP8 + EP + MTP,端口 8008)
    run_debug.sh 前台调试启动(同配置,看全量日志)
    test_api.sh 冒烟测试(探活 + 数学 sanity + reasoning 解析)
    Dockerfile.glm53-sm80 基座镜像 + 补丁层 → 自定义镜像
    _port/patches_glm53_sm80/ 10 个镜像内补丁文件
    _port/probe_*.py GPU 探针:logits 内核正确性、kpool 量化字节级校验
    env.local.example 本机配置模板(复制为 env.local,git 忽略)

    9. 结语

    • 三篇连载到此结束。总结一句话:GLM-5.3-Flash 跑在 sm_80 上不是"能不能",而是"要不要"的问题——官方不支持的代价是一套约 10 个文件的补丁和几次连环踩坑,但换来的是在存量 A800 上把 320B MoE 模型以 79 tok/s 稳定对外服务。

    • 如果你的团队也在为"存量卡跑新模型"发愁,希望这套方案(尤其是探针方法论和架构门控思路)对你有用。

    开源项目链接:https://gitee.com/kill-life/glm5.3-flash-deployment-a800 许可:Apache-2.0。 补丁为 vLLM(Apache-2.0)衍生代码,含 PR #47629 社区内核。 模型权重由 Z.ai 独立分发,不在本套件内。

    赞(0)
    未经允许不得转载:171主机测评 » GLM-5.3-Flash 在 8×A800 (sm_80) 上跑通(三):性能数据、显存账与生产运维
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址