From 4d6dac010ca5df880aa7e26873e5aa5f4029b7fa Mon Sep 17 00:00:00 2001 From: yy-fighting <2351884576@qq.com> Date: Wed, 9 Sep 2026 09:24:25 +0800 Subject: [PATCH] r37 addendum: B'(nomtp) vs PP+MTP same-profile input/output throughput comparison (i16k/o512 random-ids cc8-64) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 同栈同脚本 nomtp 对拍:cc8 打平(每token 41.0 vs 41.6ms 拐点实证)、cc16 mtp +6%+TTFT-32%、cc>=32 B' 反超 0.9-5.4%(TPOT 好2x);图修复把 r36 1.81x 惨败收敛到 ±6% 水平线;生产 r37 mtp 已恢复核验 --- .../glm53_ppmtp_r37_verify_graph/README.md | 5 +++ .../results/bench_results.md | 37 +++++++++++++++++++ .../scripts/nomtp_cc_sweep.sh | 26 +++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 experiments/pro6000/glm53_ppmtp_r37_verify_graph/scripts/nomtp_cc_sweep.sh diff --git a/experiments/pro6000/glm53_ppmtp_r37_verify_graph/README.md b/experiments/pro6000/glm53_ppmtp_r37_verify_graph/README.md index 00b64ab..6192692 100644 --- a/experiments/pro6000/glm53_ppmtp_r37_verify_graph/README.md +++ b/experiments/pro6000/glm53_ppmtp_r37_verify_graph/README.md @@ -64,5 +64,10 @@ draft 图(DRAFTEAGER=0)实测无增益(噪声带内互有胜负),保 - 语料池 61,772 token 剩余(< 一次 i8k 262,144),i8k 永久无重跑余量,killer random-ids 为标准口径。 - 09-09 补测 cc 扫频(i16k/o512,cc 8/16/32/40/64,nreq=2cc):吞吐 cc16 起饱和 130-135 tok/s, accept 全档 3.46-3.68,详见 results/bench_results.md;扫频脚本 scripts/r37_cc_sweep.sh、日志 results/r37sweep_cc*.log。 +- **09-09 B'(nomtp) 同口径对拍**(同栈同脚本 nomtp 模式、同 seed/nreq/flush-cache,唯一变量=开不开 MTP): + cc8 打平(拐点实证:每 token 41.0 vs 41.6ms)、**cc16 mtp +6% 且 TTFT -32%**、cc≥32 B' 反超 0.9-5.4% + 且单请求 TPOT 好 2×(verify 大步×chunk 交错放大排队相位停顿)。图修复把 r36 时代 1.81× 惨败收敛到 ±6% + 水平线。脚本 scripts/nomtp_cc_sweep.sh、日志 results/nomtpsweep_cc*.log + nomtp_sweep_all.log, + 判读全表见 results/bench_results.md "B'(nomtp) vs PP+MTP(r37)" 节。 - 勘误:历次 bench 的 rc=1 与 JSON 缺失真因 = 容器内 /data/hf_models/bs_results/ 目录从未存在(写 output-file 必失败,指标在 stdout 日志无损);09-09 已补建目录,此后 JSON 可正常落盘。 diff --git a/experiments/pro6000/glm53_ppmtp_r37_verify_graph/results/bench_results.md b/experiments/pro6000/glm53_ppmtp_r37_verify_graph/results/bench_results.md index 029496e..24997a2 100644 --- a/experiments/pro6000/glm53_ppmtp_r37_verify_graph/results/bench_results.md +++ b/experiments/pro6000/glm53_ppmtp_r37_verify_graph/results/bench_results.md @@ -62,8 +62,45 @@ bench_serving 的 rc=1 真因 = 跑完打印全部指标后写 `--output-file` 从未写成功过**(本 README 早先版本"JSON 被 A16 复测覆盖"的说法有误,目录 09-09 已补建,此后 JSON 可正常落盘)。 指标以 stdout 日志为准(results/ 下 5 份扫频日志 + 会话记录中的 killer/A16 数字均完整)。 +## B'(nomtp) vs PP+MTP(r37) 输入/输出吞吐对拍(09-09) + +用户问题:"pp不开投机 vs pp+mtp 的输入吞吐和输出吞吐对比"。此前 B' 仅有语料 i8k 口径数据 +(r36 判决:B' e2e 61.5s ≡ B 基线 62s;当年 PP+MTP eager 输它 1.81×)——语料池已耗尽无法复测 mtp 侧, +故 09-09 用 **deploy_ppmtp_r37.sh nomtp 模式**(= B' 同栈同脚本同 9 挂载,无 spec 无图捕获路径差异) +在 60.8 临时部署,跑 **与 r37 扫频完全相同**的 random-ids i16k/o512 负载(同 seed 6508-6564、同 nreq=2×cc、 +同 --flush-cache、同 mrr16/memfrac/chunk),唯一变量 = 是否开 MTP。跑完 r37 mtp 生产已恢复。 + +| cc (nreq) | B' 输入 (tok/s) | r37 输入 (tok/s) | B' 输出 (tok/s) | r37 输出 (tok/s) | 输出 Δ | B' TPOT (ms) | r37 TPOT (ms) | B' TTFT (s) | r37 TTFT (s) | +|---|---|---|---|---|---|---|---|---|---| +| 8 (16) | 3321.8 | 3379.4 | 103.8 | 105.6 | **mtp +1.7%** | 41.6 | 41.0 | 18.2 | **14.9** | +| 16 (32) | 4073.3 | 4318.6 | 127.3 | 135.0 | **mtp +6.0%** | 48.5 | 69.3 | 30.9 | **21.0** | +| 32 (64) | 4285.0 | 4247.4 | 133.9 | 132.7 | B' +0.9% | 48.5 | 93.1 | 74.9 | **62.0** | +| 40 (80) | 4303.1 | 4171.5 | 134.5 | 130.4 | B' +3.1% | 53.2 | 100.7 | 93.9 | **86.1** | +| 64 (128) | 4428.6 | 4187.9 | 138.4 | 130.9 | B' +5.4% | 50.2 | 102.1 | 161.3 | **155.6** | + +(r37 accept 全档 3.46-3.68;输入吞吐与输出吞吐同比率变化——同 token 总量÷同时长,天然一致。) + +**判读:** +- **cc8(单波纯 decode 相位)= 拐点数学的直接实证**:mtp 每步 41.0ms×3.46=142ms 产 3.46 tok vs + B' 每步 41.6ms 产 1 tok → 每输出 token 41.0 vs 41.6ms,**打平**。图修复后 MTP 恰好落在净收益线上 + (r36 eager 时代每步 272-275ms,是它输 B' 1.81× 的原因;图化把步成本砍近半,把 1.81× 差距收敛到 ±6%)。 +- **cc16(甜点)mtp +6%**:唯一显著胜点,且 TTFT 30.9→21.0s(-32%)——decode 总步数少 3.46× → decode + 与 prefill 的争用窗口更少 → 准入队列消化更快。输入吞吐同 +6%。 +- **cc≥32(过饱和排队档)B' 反超 0.9-5.4%**,且单请求 TPOT 差到 2×(B' 48-53ms 恒定 vs mtp 93-102ms): + verify 大步(16 req × 4 draft token = 64 token/步)与 chunk prefill 相撞时,单步停顿被放大 3.4×; + mrr16 准入上限下两臂吞吐都在 130-138 tok/s 饱和,差异全部来自排队相位的长短。 +- **TTFT mtp 全档更低**(decode 步数少 → prefill 窗口多),与吞吐胜负无关的独立改善。 +- **口径警示**:历史 B' 语料 i8k 数据(61.5s,out ≈265 tok/s 口径)与本表 random-ids i16k 不可直接比—— + 语料含前缀缓存/不同输入长度/不同输出长度,仅可作"图修复前后相对关系"的参照。 + +**生产含义**:cc≤16 负载形态(生产甜点)留 r37 mtp——+6% 吞吐 + TTFT -32%;持续过饱和大队列 +(cc>>16 长驻排队)业务则 B' nomtp 更优(吞吐 +1-5%,单请求 decode 延迟好 2×)。 +r37 修复的真正价值 = 把 PP+MTP 从 1.81× 惨败拉回与 B' 同一水平线并在甜点小胜,而非大幅放大吞吐。 + ## 生产部署(终态) - 容器 glm53-nvfp4 @ 60.8:30000,`--restart unless-stopped`,health 200。 - 启动命令:`bash /root/deploy_ppmtp_r37.sh '--tp 4 --pp-size 2 --disable-overlap-schedule --max-prefill-tokens 16384' mtp 8192 0.88 1 1 0 0` (degloo=1, drafteager=1, verifyeager=0, specdebug=0) - 与 A16 对比后胜出留役;A16 恢复脚本 deploy_glm53_605.sh 留盘可随时切回。 +- 09-09 曾为 B' 对拍临时换 nomtp 部署约 1.5h(扫频后已按上述命令恢复 mtp 并核验 health 200 + + 生成抽检正常 + restart=unless-stopped 已设回)。 diff --git a/experiments/pro6000/glm53_ppmtp_r37_verify_graph/scripts/nomtp_cc_sweep.sh b/experiments/pro6000/glm53_ppmtp_r37_verify_graph/scripts/nomtp_cc_sweep.sh new file mode 100644 index 0000000..bf7e1cf --- /dev/null +++ b/experiments/pro6000/glm53_ppmtp_r37_verify_graph/scripts/nomtp_cc_sweep.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# r37 PP+MTP verify-graph cc 扫频:i16k/o512 random-ids,cc 8/16/32/40/64 +# 口径:nreq = 2*cc(每档至少两波,测稳态吞吐;与 D 方案 cc40/64 的 nreq=2cc 约定一致), +# seed 逐档更换,--flush-cache,输出文件逐档独立(防覆盖)。 +# 用法: nohup bash r37_cc_sweep.sh > /root/r37_sweep.log 2>&1 & +for cc in 8 16 32 40 64; do + nreq=$((cc*2)) + seed=$((6500+cc)) + echo "=== cc=$cc nreq=$nreq seed=$seed start $(date +%T) ===" + docker exec glm53-nvfp4 python3 -m sglang.bench_serving \ + --backend sglang --host 127.0.0.1 --port 30000 \ + --dataset-name random-ids --tokenizer /data/hf_models/GLM-5.3-NVFP4 \ + --num-prompts $nreq --random-input-len 16384 --random-output-len 512 \ + --random-range-ratio 1.0 --max-concurrency $cc \ + --temperature 0.0 --flush-cache --warmup-requests 1 --seed $seed \ + --output-file /data/hf_models/bs_results/nomtpsweep_cc${cc}.json \ + > /root/nomtpsweep_cc${cc}.log 2>&1 + rc=$? + echo "=== cc=$cc done rc=$rc $(date +%T) ===" + grep -E 'Successful requests|Benchmark duration|Output token throughput|Mean TPOT|Accept length|Mean TTFT' /root/nomtpsweep_cc${cc}.log | head -8 + if [ $rc -ne 0 ]; then echo "BENCH-FAILED cc=$cc"; fi + if ! docker ps --format '{{.Names}}' | grep -q '^glm53-nvfp4$'; then + echo "CONTAINER-DIED at cc=$cc $(date +%T)"; docker logs --tail 40 glm53-nvfp4 2>&1 | grep -iE 'error|assert' | tail -8; break + fi +done +echo SWEEP-DONE