Skip to content

GLM-5.2(MTP-Mix)部署教程、性能优化与压测方案

场景:8 卡国产加速卡服务器,以 Docker 单容器运行 vLLM 托管 GLM-5.2-MTP-Mix 模型, 对外提供 OpenAI 兼容 API。本文覆盖:硬件初始化 → 驱动安装 → 容器启动 → 分层性能优化(含硬件底层)→ 冒烟测试 → 完整性能测试方案 → 交付验收。

依据 2026-07-28 实际交付操作文档整理重写,压测方案在原版基础上重新设计。


1. 环境信息与部署架构

项目规格
加速卡LYP8 国产加速卡 × 8(PCIe 3.0)
推理引擎vLLM(DLC 定制版,镜像 vllm_glm5.2_20260728
模型GLM-5.2-MTP-Mix(MoE 架构,支持 MTP 投机解码)
精度bfloat16
并行方式TP=8 张量并行 + MoE 专家并行(ep size 2)
上下文长度最大 24k tokens
服务端口8000(host 网络模式直接暴露)

部署链路:

硬件初始化(cltech-init,PCIe/算力规格/固件)
  → 驱动与固件加载(cltech-init 一步完成)
  → Docker 容器启动 vLLM 服务(8000 端口)
  → 状态校验 + curl 冒烟
  → Evalscope 分层压测 → 交付验收

2. 硬件初始化与驱动安装(底层优化第一步)

部署前执行硬件初始化脚本,一步完成 PCIe 模式、算力规格配置与底层驱动/固件加载:

bash
cltech-init -i 20260707 -g 2.8 --set-pcie-gen 3 --lyp8 -f
参数配置值作用
-i20260707硬件初始化版本号
-g2.8硬件算力规格
--set-pcie-gen3锁定 PCIe 3.0 总线模式(避免协商降速影响卡间通信)
--lyp8-适配 LYP8 硬件卡
-f-强制刷新硬件配置

执行无报错即代表驱动与固件安装完成,无单独驱动安装步骤。

⚠️ 这一步直接影响后续所有推理性能:PCIe 协商降档会拉低 TP=8 卡间 all-reduce 通信带宽,是高并发下吞吐不达标最常见的底层原因之一。执行后建议确认链路速率符合预期。

3. Docker 启动模型服务

3.1 完整启动脚本

bash
docker run -itd \
--name glm-5.2 \
--privileged \
--pid=host \
--net host \
--shm-size 128G \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
-v /data:/data \
-e CL_DRIVER_PATH=/usr/local/cltech/driver \
-e VLLM_DLC_INDEX_TOPK=256 \
-e VLLM_USE_V2_MODEL_RUNNER=1 \
-e DLC_SYN_GRAPH_CACHE=1 \
-e OMP_NUM_THREADS=8 \
-e DLC_SYN_COPY_ASYNC=O2 \
-e DLC_SYN_URING=0 \
-e VLLM_USE_DLC_COL_MAJOR_MATMUL=1 \
hangzhou-harbor.infraai.top/qingting/vllm_glm5.2_20260728 \
bash -c 'vllm serve \
--model /data/models/GLM-5.2-MTP-Mix/ \
--dtype bfloat16 \
--gpu-memory-utilization 0.99 \
--trust-remote-code \
--no-enable-prefix-caching \
-tp 8 \
--enable-expert-parallel \
--enable-auto-tool-choice \
--tool-call-parser glm47 \
--reasoning-parser glm45 \
--block-size 256 \
--compilation-config \
'"'"'{"mode":0,"cudagraph_mode":"FULL_DECODE_ONLY"}'"'"' \
--max-num-seqs 1 \
--hf-overrides \
'"'"'{"use_index_cache":true,"index_topk_pattern":"FFFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSSFSSS"}'"'"' \
--max-num-batched-tokens 2048 \
--no-scheduler-reserve-full-isl \
--enable-log-requests \
--max-model-len 24k \
--speculative-config \
'"'"'{"num_speculative_tokens":5,"method":"deepseek_mtp"}'"'"' \
moe ep size 2'

3.2 容器基础参数

参数配置值用途
--nameglm-5.2容器命名
--privileged-开启容器完整宿主机权限(访问加速卡设备)
--pid=host-共享宿主机 PID 命名空间
--net host-共享宿主机网络,直接暴露 8000 端口
--shm-size128G共享内存大小,适配大模型 KV 缓存与 TP 通信
-v /data:/data-挂载宿主机模型存储目录

3.3 服务启动状态校验

bash
docker logs -f glm-5.2

出现以下关键信息代表服务就绪:

  1. 模型权重加载完成提示;
  2. Uvicorn running on http://0.0.0.0:8000
  3. vLLM engine 初始化完成、编译 Graph 缓存就绪。

4. 分层性能优化详解

性能优化按「硬件底层 → 驱动/运行时 → vLLM 引擎 → 模型算法」四层理解, 每一层的开关都已固化在启动脚本中,本节说明各项的原理与调优方向。

4.1 硬件底层优化

优化项配置收益
PCIe 模式锁定cltech-init --set-pcie-gen 3保证 8 卡互联带宽稳定,避免协商降速拖垮 TP 通信
算力规格标定cltech-init -g 2.8按标称算力运行,防止硬件保守降频
共享内存--shm-size 128GKV 缓存与跨进程通信不走慢速路径

4.2 驱动 / 运行时环境变量优化

环境变量作用
CL_DRIVER_PATH/usr/local/cltech/driver底层硬件驱动路径
VLLM_USE_V2_MODEL_RUNNER1启用 V2 版推理运行时,调度与执行路径更优
DLC_SYN_GRAPH_CACHE1开启 Graph 编译缓存,加速二次启动、稳定解码执行图
DLC_SYN_COPY_ASYNCO2H2D/D2H 拷贝异步化(O2 级),隐藏数据传输延迟
DLC_SYN_URING0关闭 io_uring 路径(当前版本下更稳)
VLLM_USE_DLC_COL_MAJOR_MATMUL1使用列主序矩阵乘 kernel,贴合硬件计算单元布局
VLLM_DLC_INDEX_TOPK256索引检索 TopK 数量,配合稀疏注意力索引缓存
OMP_NUM_THREADS8CPU 并行线程数,避免 OMP 线程争抢拖慢调度

4.3 vLLM 引擎参数优化

参数配置说明
--dtypebfloat16推理精度
--gpu-memory-utilization0.99显存吃满,最大化 KV 缓存容量
-tp88 卡张量并行
--enable-expert-parallel + moe ep size 2-MoE 专家并行,专家权重按 2 组分片,降低单卡显存压力并提升专家计算并行度
--block-size256KV 缓存分页块大小,大块降低管理开销
--compilation-config{"mode":0,"cudagraph_mode":"FULL_DECODE_ONLY"}Graph 编译仅对解码阶段启用全量捕获,兼顾启动耗时与解码性能
--max-num-batched-tokens2048单批最大 token 数,控制 prefill 分块
--max-model-len24k最大上下文 24000 tokens
--no-scheduler-reserve-full-isl-调度器不为完整输入长度预留空间,提升长输入场景调度效率

4.4 模型算法层优化

优化项配置收益
MTP 投机解码--speculative-config {"num_speculative_tokens":5,"method":"deepseek_mtp"}每步预生成 5 个候选 token,实测接受率 72.6%,解码吞吐提升显著
稀疏注意力索引缓存--hf-overrides {"use_index_cache":true,"index_topk_pattern":"FFF..."}按层交替启用索引缓存(F=关闭/S=开启模式),长上下文注意力开销大幅下降

4.5 可开关的调优项(A/B 对比用)

以下两项默认关闭/固定,压测阶段建议做消融实验量化收益(见 6.5):

  • Prefix 缓存:默认 --no-enable-prefix-caching,多轮对话/固定前缀业务可改为 --enable-prefix-caching,命中率高的业务 TTFT 可大幅降低;
  • --max-num-seqs:当前为 1(单批单序列,面向低延迟交付场景)。如需提升 高并发吞吐,可逐步调大(如 4/8/16),代价是单请求 TPOT 恶化,需按压测结果权衡。

5. 冒烟功能测试

5.1 curl 调用

bash
curl -X POST http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/data/models/GLM-5.2-MTP-Mix/",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "1+1等于多少,直接说答案"
}
],
"stream": true,
"temperature": 0
}'

5.2 预期结果

流式返回 2,无报错、无超时、无乱码,代表模型基础推理功能正常。

6. 性能测试方案(重新设计)

6.1 测试目标

  1. 建立单并发基线与并发梯度容量模型,输出线上容量规划依据;
  2. 量化各优化项(投机解码、prefix 缓存、索引缓存)的实际收益(消融对比);
  3. 验证典型业务输入/输出比例下的吞吐与延迟 SLA;
  4. 验证极限上下文、极限显存占用与长时间运行的稳定性。

6.2 前置条件

  1. 模型容器正常启动,docker logs 无报错;
  2. Evalscope 评估容器正常拉起,网络可通 8000 端口:
bash
docker run -it -v /data/:/data/ --net host hangzhou-harbor.infraai.top/library/evalscope:0721 bash
  1. 宿主机无其他高负载进程,GPU/CPU/内存资源独占;
  2. 监控采集就绪:显存/利用率/温度/功耗、CPU、内存、容器 shm、网络带宽(与压测时间轴对齐)。

6.3 测试方法论(相对原版的改进)

原版方案每个场景只跑一轮,容易把冷启动、预热波动计入结果。改进约定:

  • 预热:每个场景正式采样前先以相同并发跑 ≥2 分钟预热(Graph 缓存、KV 池、驱动状态进入稳态),预热数据不计入报告;
  • 稳态采样:报告以 Evalscope 的 Steady (drop 20%)(掐头去尾)为准,Overall 仅作参考;
  • 重复取中位:每个场景独立跑 3 轮,指标取中位数,剔除异常轮次(硬件温度超限、宿主机抖动);
  • 一次只改一个变量:消融实验除被测开关外,启动参数与负载配置完全一致;
  • 时间轴对齐:压测窗口与硬件监控打点严格对齐,便于定位拐点成因。

6.4 场景矩阵

#场景并发Prompt/Output请求数/时长目的
S1单并发基线11024 / 102420基线吞吐、单用户延迟
S2并发梯度容量2/4/8/16 逐档1024 / 1024每档 30 且 ≥5min找最大稳定并发与吞吐拐点
S3短输入长输出4256 / 204820生成类业务(文案/代码/长推理)
S4长输入短输出28192 / 51215文档问答、摘要
S5极限上下文120000 / 10245验证 24k 上限,防 OOM
S6Prefix 缓存41024(+1024 固定前缀) / 102430缓存复用收益(需开启 --enable-prefix-caching
S7消融 A/B1 + 41024 / 1024各 20量化优化项收益(见 6.5)
S8耐久稳定性81024 / 10247200s内存/显存泄漏、吞吐漂移

S2 单档示例(并发 4):

bash
evalscope perf \
--parallel 4 \
--number 30 \
--model "/data/models/GLM-5.2-MTP-Mix/" \
--url http://127.0.0.1:8000/v1/chat/completions \
--api openai \
--dataset random \
--max-tokens 1024 \
--min-tokens 1024 \
--min-prompt-length 1024 \
--max-prompt-length 1024

S3 短输入长输出:

bash
evalscope perf \
--parallel 4 \
--number 20 \
--model "/data/models/GLM-5.2-MTP-Mix/" \
--url http://127.0.0.1:8000/v1/chat/completions \
--api openai \
--dataset random \
--max-tokens 2048 \
--min-tokens 2048 \
--min-prompt-length 256 \
--max-prompt-length 256

S4 长输入短输出:

bash
evalscope perf \
--parallel 2 \
--number 15 \
--model "/data/models/GLM-5.2-MTP-Mix/" \
--url http://127.0.0.1:8000/v1/chat/completions \
--api openai \
--dataset random \
--max-tokens 512 \
--min-tokens 512 \
--min-prompt-length 8192 \
--max-prompt-length 8192

S5 极限上下文(并发 1,避免 OOM):

bash
evalscope perf \
--parallel 1 \
--number 5 \
--model "/data/models/GLM-5.2-MTP-Mix/" \
--url http://127.0.0.1:8000/v1/chat/completions \
--api openai \
--dataset random \
--max-tokens 1024 \
--min-tokens 1024 \
--min-prompt-length 20000 \
--max-prompt-length 20000

S6 Prefix 缓存(先改启动参数为 --enable-prefix-caching 重启服务):

bash
evalscope perf \
--parallel 4 \
--number 30 \
--model "/data/models/GLM-5.2-MTP-Mix/" \
--url http://127.0.0.1:8000/v1/chat/completions \
--api openai \
--dataset random \
--prefix-length 1024 \
--max-tokens 1024 \
--min-tokens 1024 \
--min-prompt-length 1024 \
--max-prompt-length 1024

S8 耐久压测:

bash
evalscope perf \
--parallel 8 \
--duration 7200 \
--model "/data/models/GLM-5.2-MTP-Mix/" \
--url http://127.0.0.1:8000/v1/chat/completions \
--api openai \
--dataset random \
--max-tokens 1024 \
--min-tokens 1024 \
--min-prompt-length 1024 \
--max-prompt-length 1024

6.5 消融实验设计(S7)

基线 = 第 4 节完整优化配置。每轮只关/开一个变量:

实验变量对比项预期观测
A投机解码开/关num_speculative_tokens=5 vs 去掉 speculative-config解码吞吐差值、接受率与吞吐的关系
B索引缓存开/关use_index_cache true/false长输入(8k/20k)TTFT 差值
CPrefix 缓存开/关配合 S6Cached Prompt tok/s、TTFT 差值
D--max-num-seqs 1/4/8并发 8 固定负载总吞吐 vs TPOT 恶化的权衡曲线

6.6 采集指标清单

业务接口指标(Evalscope 输出)

  1. 基础汇总:总生成 token、平均吞吐 tokens/sec、总耗时、请求成功率;
  2. 并发指标:RPS、单并发解码吞吐、投机解码接受率;
  3. 延迟指标:平均 / P50 / P99 / Max 总延迟 Latency、TTFT 首 token 延迟、TPOT 单 token 生成耗时;
  4. 缓存指标:New Prompt tok/s、Cached Prompt tok/s。

硬件资源指标(与压测时间轴同步采集)

  1. GPU:显存占用峰值、利用率、卡温度、功耗;
  2. CPU:整机平均使用率、OMP 线程负载;
  3. 内存:宿主机内存、容器 shm 占用变化曲线;
  4. 网络:容器进出带宽、端口连接数。

6.7 验收 SLA

负载场景吞吐底线TTFT P99 上限TPOT 平均成功率投机解码接受率
单并发 1024+1024≥30 token/s≤1500ms≤40ms100%≥70%
并发 4 标准负载≥80 token/s≤2500ms≤45ms100%≥68%
并发 8 标准负载≥130 token/s≤4000ms≤55ms≥99.5%≥65%
长输入 8k 场景≥12 token/s≤5000ms≤45ms100%≥65%
24k 极限上下文≥5 token/s≤8000ms≤60ms100%≥60%
耐久 2h 压测吞吐波动 ≤10%无持续上涨平稳无恶化100%无持续下跌

6.8 异常判定(满足任一即不达标)

  1. 请求成功率低于 99%;
  2. P99 TTFT 超 SLA 阈值 20% 以上;
  3. 压测中显存持续上涨、出现 OOM 重启;
  4. 标准负载下投机解码接受率低于 60%;
  5. 耐久测试吞吐持续下跌、延迟持续走高;
  6. GPU 温度超过 85℃、硬件降频。

6.9 交付物

  1. 各场景 Evalscope 完整性能报告(3 轮原始数据 + 中位数汇总);
  2. 硬件资源监控时序图表(与压测窗口对齐);
  3. 并发梯度吞吐-延迟对比汇总表(含拐点标注);
  4. 消融实验收益对比表(投机解码 / 索引缓存 / prefix 缓存 / max-num-seqs);
  5. 极限上下文与耐久场景稳定性说明;
  6. 线上推荐并发容量与输入/输出长度限制建议。

7. 基准压测结果样例(单并发 S1 实测)

7.1 汇总

字段数值说明
Test Datasetrandom随机测试数据集
API TypeopenaiOpenAI 兼容接口
Total Generated tokens10,240总生成 token 数量
Avg Output Rate30.16 tokens/sec平均生成吞吐
Total Test Time339.57s总压测耗时
Success100.0%请求全部成功

7.2 单请求延迟(并发=1)

Metricavgp50p99max
Latency (s)33.95734.71040.95040.950
TTFT (ms)1317.31323.71369.41369.4
TPOT (ms)31.932.638.738.7
Decode tok/s31.34---
Spec. Accept Rate72.6%---

7.3 链路吞吐

指标OverallLast 30sSteady (drop 20%)
Completion tok/s30.1628.8430.78
New Prompt tok/s30.1628.8430.78
Cached Prompt tok/s0.000.000.00

7.4 结论

  1. 单并发稳定吞吐 30.16 token/s(稳态 30.78),投机解码接受率 72.6%,MTP 加速确认生效;
  2. TTFT 平均 1.3s,1024 输入场景首包延迟可控;
  3. 全部请求 100% 成功,满足 SLA;
  4. 无缓存命中,全部为全新 Prompt 推理(符合默认关闭 prefix 缓存的配置)。

8. 交付验收清单

  • [ ] 硬件初始化(cltech-init)执行无报错,PCIe 速率符合预期;
  • [ ] Docker 容器正常拉起,日志无加载异常;
  • [ ] curl 冒烟测试正常返回推理结果;
  • [ ] 单并发基线压测满足 SLA(吞吐 ≥30 token/s、成功率 100%);
  • [ ] 场景矩阵按需执行完毕,各场景指标满足对应 SLA(3 轮中位数);
  • [ ] 投机解码接受率 ≥70%,推理加速特性生效;
  • [ ] 极限 24k 上下文场景无 OOM、推理正常返回;
  • [ ] 耐久 2 小时测试无内存/显存泄漏、服务无重启崩溃;
  • [ ] 交付物(报告、监控图、容量建议)齐全。

9. 常见问题

现象排查方向
高并发吞吐远低于 SLA确认 PCIe 协商速率(4.1);确认 --max-num-seqs 配置(4.5-D)
启动很慢但每次正常Graph 编译为首次耗时项,确认 DLC_SYN_GRAPH_CACHE=1 已开启,二次启动应明显变快
长输入 TTFT 超阈值确认 use_index_cacheVLLM_DLC_INDEX_TOPK=256 生效(消融实验 B)
压测中吞吐突然下跌检查卡温是否超 85℃ 触发降频;检查宿主机是否有其他进程抢占 CPU(OMP_NUM_THREADS=8 之外的负载)
投机解码接受率偏低高温降频或驱动版本不匹配会导致接受率下降,先核对 cltech-init 版本号