From 25418ec1749e7716b973a767120e4a5e17dc50be Mon Sep 17 00:00:00 2001 From: Zhiyi Hong <2497491955@qq.com> Date: Thu, 30 Jul 2026 23:10:22 +0800 Subject: [PATCH] [Docs] record completed DSV4-Pro Phase 1 quick map --- README.md | 4 + ...v4pro_pro6000d_2node_sglang_quick_map.html | 109 +- ...e_sglang_prefill_hardware_attribution.html | 77 +- .../aggregate.csv | 13 + .../report.md | 31 + .../run.log | 53 + .../run_manifest.json | 43 + .../server/head_nccl_transport.log | 1012 +++++++++++++++++ .../server/head_server_cmd.txt | 1 + .../server/worker_nccl_transport.log | 918 +++++++++++++++ .../server/worker_server_cmd.txt | 1 + .../summary.csv | 13 + .../summary.jsonl | 12 + .../推理优化计划.html | 68 +- 14 files changed, 2249 insertions(+), 106 deletions(-) create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/aggregate.csv create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/report.md create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/run.log create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/run_manifest.json create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/server/head_nccl_transport.log create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/server/head_server_cmd.txt create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/server/worker_nccl_transport.log create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/server/worker_server_cmd.txt create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/summary.csv create mode 100644 docs/dsv4pro_pro6000d_2node_sglang/results/dsv4pro-phase1-full-20260730-220916/summary.jsonl diff --git a/README.md b/README.md index ea0f4a1..0fb13b0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # sskj — 多平台大模型推理性能基准测试项目 +> **更新(2026-07-30 23:06:01 CST)** +> +> 完成 DeepSeek-V4-Pro 双机 Pro6000D SGLang TP16 Phase 1 正式 quick-map。Head 与 Worker 均通过 `mlx5_0/mlx5_3` 双 Rail `NET/IB + GDRDMA` 门禁;9 个固定点和 3 个混合 A/B 结果共 12/12 成功,总用时 28 分 36 秒。32K/128K 单请求 Prefill 输入吞吐为 2,652.76/2,710.16 token/s;在 C=32 Decode 中注入一个 128K Prefill 后,Output TPS 下降 24.08%,TPOT P95 增加 66.55%。阶段 HTML 已重写为只保留成功结果,并补充正式汇总、运行清单和 Phase 2 三个诊断负载;两节点容器和 16 张 GPU 已清理。 +> > **更新(2026-07-30 18:40:53 CST)** > > 为 DeepSeek-V4-Pro 双机 TP16 quick-map 的唯一入口新增 `CASE_IDS` 场景过滤和未知 Case 预检,可在完整九点实验前先跑 1K/32K Prefill 与 C1/C32 Decode 四点 Sanity;运行清单会记录实际过滤条件。同步精简阶段档案:正文只保留最终成功 Run 与有效结论,历史失败压缩到末尾经验教训。 diff --git a/docs/dsv4pro_pro6000d_2node_sglang/phase1_dsv4pro_pro6000d_2node_sglang_quick_map.html b/docs/dsv4pro_pro6000d_2node_sglang/phase1_dsv4pro_pro6000d_2node_sglang_quick_map.html index 1d3f41c..31cf0e0 100644 --- a/docs/dsv4pro_pro6000d_2node_sglang/phase1_dsv4pro_pro6000d_2node_sglang_quick_map.html +++ b/docs/dsv4pro_pro6000d_2node_sglang/phase1_dsv4pro_pro6000d_2node_sglang_quick_map.html @@ -112,6 +112,12 @@ color: #075e58; } + .decision { + padding: 14px 18px; + background: var(--teal-soft); + border-left: 4px solid var(--teal); + } + h2 { margin: 48px 0 16px; padding-bottom: 9px; @@ -228,7 +234,7 @@
节点:174.1.51.5 + 174.1.51.7 拓扑:SGLang TP16 / EP2 - 更新:2026-07-30 17:54 CST + 更新:2026-07-30 22:55:37 CST
@@ -237,9 +243,10 @@ 返回推理优化主计划

- 阶段状态:等待真实双 Rail RDMA 重跑。 - 启动器与静态验证已完成;历史无效 Run 不进入最终分析。下一次仅在 - NCCL 日志通过 NET/IB 门禁后执行 Sanity 和完整 quick map。 + 阶段状态:已完成。 + 正式 Run dsv4pro-phase1-full-20260730-220916 在双 Rail + NET/IB + GDRDMA 下完成 9 个固定点和 3 个混合 A/B 结果, + 共 12/12 成功,用时 28 分 36 秒;服务、容器与 16 张 GPU 已清理。

1. 目标与边界

@@ -530,34 +537,96 @@ wait "${background_pid}" 完整 Dry-run通过服务、九个固定点、混合 A/B、清理均展开成功 真实旧 Bench JSON 解析通过成功解析 P50/P95/P99 与吞吐字段 项目精简通过实验目录顶层仅保留一个 Shell 入口 - RDMA fail-closed静态验证通过非法网卡、缺失设备或未出现 NET/IB 时禁止 benchmark + 双 Rail 传输门禁通过Head 与 Worker 均识别 mlx5_0/mlx5_3,跨节点 Channel 使用 NET/IB/*/GDRDMA + 四点 Sanity4/4 通过1K/32K Prefill 与 C1/C32 Decode 均恢复到合理量级 + 冷 Prefix 口径通过正式测量请求的 Head 日志显示 #cached-token: 0 + 完整真机 Run12/12 通过固定矩阵 9/9,混合 A/B 3/3,运行期失败 0 + 资源清理通过两节点相关容器与计算进程为 0,16 张 GPU 显存占用为 0

9. 最终真机结果

-

- 正确双 Rail RDMA 下的正式结果尚未生成。本节只接受通过传输门禁、 - 冷缓存口径和结果校验的最终 Run;完成后将写入四点 Sanity、九个固定点、 - 混合 A/B 与阶段结论。 +

+ 本节只使用正式成功 Run。Profiler 与投机解码均关闭,每个 Case 只做一次快速测量, + 所以它适合决定下一步 Profile 对象,不作为需要统计置信度的最终容量认证。

+ +

9.1 执行摘要

- + - - - - + + + +
门禁或实验状态最终证据
项目结果证据
双 Rail NET/IB待真机验证头、Worker 日志均需识别 mlx5_0/mlx5_3
四点 Sanity待执行1K/32K Prefill 与 C1/C32 Decode
九个固定点待执行最终 summary.csvreport.md
混合 A/B待执行Control 与 Treatment 的 Decode 指标变化
Run IDdsv4pro-phase1-full-20260730-220916COMPLETED
运行时间28 分 36 秒22:09:47 至 22:38:22 CST
网络路径双 Rail NET/IB + GDRDMAmlx5_0mlx5_3
结果完整性12/12 成功固定点 9/9;混合 A/B 3/3
+

9.2 Prefill

+ + + + + + + + + + +
场景Input TPSTTFT P95观察
1K → 1,C=11,969.66 tok/s0.502 s短请求固定开销占比更高
32K → 1,C=12,652.76 tok/s12.335 s单请求吞吐进入稳定区间
128K → 1,C=12,710.16 tok/s48.344 s长 Prefill 代表点
32K → 1,C=163,112.77 tok/s162.087 s聚合吞吐仅比 C=1 高 17.3%,排队时延显著增加
+ +

9.3 Decode

+ + + + + + + + + + +
1K → 1KOutput TPSTTFT P95TPOT P95E2E P95
C=131.41 tok/s0.363 s31.47 ms32.555 s
C=16295.29 tok/s4.950 s50.02 ms55.444 s
C=32461.68 tok/s8.022 s63.31 ms70.933 s
C=64647.42 tok/s12.716 s93.44 ms101.163 s
+

+ Decode 吞吐到 C=64 仍在上升,但增益递减且 TPOT 明显变差。综合场景 + 32K → 1K,C=8 的 Input/Output TPS 为 + 2,038.00 / 63.69,TTFT P95 为 82.084 s, + 说明 Prefill 与 Decode 同时存在时干扰很强。 +

+ +

9.4 混合 Prefill/Decode A/B

+ + + + + + + + + + +
指标A:仅 DecodeB:注入 128K Prefill变化
Output TPS455.68 tok/s345.95 tok/s-24.08%
TTFT P959.443 s10.194 s+7.96%
TPOT P9565.88 ms109.73 ms+66.55%
E2E P9572.008 s117.630 s+63.36%
+

+ Phase 2 优先采集三类代表负载:128K → 1,C=1 的纯长 Prefill、 + 32K → 1,C=16 的并发 Prefill,以及 + 1K → 1K,C=32 在有无 128K 注入时的混合 A/B。 + 目标是区分计算、显存带宽、调度排队、跨机通信和节点不均衡。 +

+

+ 完整产物: + 报告、 + 逐点汇总、 + 聚合表、 + 运行清单。 +

+

10. 经验教训

历史排查细节保存在 @@ -570,11 +639,11 @@ wait "${background_pid}"

11. 运行命令

cd /data/hzy/sskj/experiments/pro6000/dsv4pro_pro6000d_2node_sglang_tp16_quick_map
 
-tmux new-session -d -s dsv4pro-pro6000d-2node-sglang-quick-map -c "$PWD"
-tmux send-keys -t dsv4pro-pro6000d-2node-sglang-quick-map \
-  'RUN_ID=dsv4pro-pro6000d-2node-sglang-quick-v2-20260730-143625 bash run_quick_map.sh all' Enter
+tmux new-session -d -s dsv4pro-phase1-full \
+  "RUN_ID=dsv4pro-phase1-full-20260730-220916 bash run_quick_map.sh all \
+   2>&1 | tee /data/hzy/dsv4pro_phase1_full_20260730-220916.log"
 
-tmux attach -t dsv4pro-pro6000d-2node-sglang-quick-map
+tmux attach -t dsv4pro-phase1-full

下一阶段: diff --git a/docs/dsv4pro_pro6000d_2node_sglang/phase2_dsv4pro_pro6000d_2node_sglang_prefill_hardware_attribution.html b/docs/dsv4pro_pro6000d_2node_sglang/phase2_dsv4pro_pro6000d_2node_sglang_prefill_hardware_attribution.html index b75a520..03bd8e3 100644 --- a/docs/dsv4pro_pro6000d_2node_sglang/phase2_dsv4pro_pro6000d_2node_sglang_prefill_hardware_attribution.html +++ b/docs/dsv4pro_pro6000d_2node_sglang/phase2_dsv4pro_pro6000d_2node_sglang_prefill_hardware_attribution.html @@ -135,7 +135,7 @@

节点:174.1.51.5 + 174.1.51.7 拓扑:SGLang TP16 / EP2 - 更新:2026-07-30 17:54 CST + 更新:2026-07-30 22:55:37 CST
@@ -144,55 +144,35 @@ 返回推理优化主计划

- 当前状态:网络前置条件未满足,Phase 2 暂停,代码尚未开始。 - 本页从第一行 Phase 2 代码开始同步维护。每次代码改动、静态验证、真机运行和 - 结果判断都会在对应小节留下文件路径、命令和证据,不在阶段结束后凭记忆补写。 + 当前状态:Phase 1 前置条件已通过,等待阶段汇报确认后开始实现。 + Phase 2 代码尚未创建。本页已经根据最终 Phase 1 结果选择诊断 Case; + 后续代码改动、静态验证、真机运行和结果判断会同步写入本页。

-

1. 为什么现在不能直接进入 Phase 2

-

- Phase 1 在没有 Profiler、没有 Prefix Cache 命中的条件下得到以下结果, - 但这些数值后来确认受错误 Socket 网络路径污染: -

+

1. Phase 1 交接结果

- + - - - + + +
ISL / OSL / C输入 TPSTTFT结果
代表负载关键结果Phase 2 用途
1K / 1 / 164.44 tok/s15.88 s错误网络证据,不作为基线
32K / 1 / 164.96 tok/s504.44 s错误网络证据,不作为基线
128K / 1 / 165.20 tok/s2010.38 s错误网络证据,不作为基线
128K → 1,C=1Input TPS 2,710.16;TTFT P95 48.344 s纯长 Prefill 的计算、显存与通信归因
32K → 1,C=16Input TPS 3,112.77;TTFT P95 162.087 s并发 Prefill 的排队、Chunk 调度与节点均衡
1K → 1K,C=32 + 128K 注入Output TPS -24.08%;TPOT P95 +66.55%Prefill 干扰 Decode 时的硬件资源竞争

- quick-map 容器没有 /dev/infiniband,NCCL 回退 - NET/Socket;脚本又误选低速非计算网。原网络配置冷请求控制组中, - 1K/32K TTFT 分别只有 1.458s/38.062s,比 quick-map 快约 10.9×/13.25×。 - 因此约 65 token/s 不是待 profile 的模型现象,而是已定位的部署配置错误。 -

- -

1.1 Phase 2 前置审计

-

- 旧脚本较短的 TTFT 包含两个因素。其一,旧脚本固定执行 16 条同 Prompt - Warm-up,从不清 Prefix Cache,并按固定 Seed 递增长度;17:40 的失败 Run - 还在 18:01 正式 Run 前预热了同一批 1K 请求。其二,新旧模型参数虽相同, - NCCL Socket 接口不同,而二者容器都没有形成真实 RDMA 数据面。 -

-

- 网络控制组明确打印 NET/IB : No device found 和 - Using network Socket。Phase 1 入口现已加入 RDMA 设备透传与 - NET/IB fail-closed 校验,但真机验证尚未运行。Phase 2 只有在 - 双 Rail RDMA 得到运行时证据并重跑 Phase 1 后才会开始。Warm Prefix/Prefix Cache - 收益仍另立 A/B,不与冷 Prefill 混算。 + 最终基线已由 Head 与 Worker 日志证明使用 + mlx5_0/mlx5_3 双 Rail NET/IB + GDRDMA, + 正式测量请求为冷 Prefix,12/12 结果成功。Phase 2 保持相同服务配置和请求口径。

2. 本阶段的边界

@@ -216,15 +196,16 @@
  • 保存两节点静态快照:GPU/NIC/NUMA 拓扑、驱动、CUDA、镜像与服务命令。
  • 复用 Phase 1 已验证的 run_quick_map.sh start 启动同配置双机服务。
  • 在 Head 和 Worker 同时启动 GPU、CPU、网卡与 RDMA 采样,先记录 15 秒空闲基线。
  • -
  • 清空 Prefix Cache,发送一条 32K → 1, C=1 请求,Seed 与 Phase 1 一致。
  • +
  • 依次重放 128K → 1, C=132K → 1, C=16,请求参数和 Seed 与 Phase 1 一致。
  • +
  • 重放 1K → 1K, C=32 Control 与 128K Prefill 注入 Treatment,保留相同注入时序。
  • 请求结束后继续采样 15 秒,再停止采集器和服务。
  • -
  • 按时间戳将请求、8K Chunk、GPU、CPU 和 Rail 指标对齐,生成摘要与判定。
  • +
  • 按时间戳将请求、GPU、CPU 和双 Rail 指标对齐,生成摘要与判定。
  • -
    idle 15s │──────── 32K Prefill:4 × 8K Chunk ────────│ cooldown 15s
    -          ↑ request_start                              ↑ request_end
    -          Head 与 Worker 的所有采集器覆盖完整时间窗
    +
    idle 15s │ 128K C1 │ 32K C16 │ Decode Control │ Decode + Prefill │ cooldown 15s
    +          Head 与 Worker 的所有采集器覆盖完整诊断窗口

    - 预计服务加载约 6 分钟、请求约 8.5 分钟,连同快照和清理应在 20 分钟左右完成。 + Phase 1 中服务加载约 5 分 30 秒,三个诊断负载合计为分钟级; + 连同静态快照、采样和清理,目标仍控制在 30 分钟内。

    5. 采集指标

    @@ -251,7 +232,7 @@ dsv4pro_pro6000d_2node_sglang_prefill_hardware_attribution/ run_prefill_hardware_attribution.sh唯一 Shell 入口;服务启停、双节点采集器、单 Case、Trap 清理待实现 - config.envPhase 1 入口路径、32K Case、采样间隔、结果路径待实现 + config.envPhase 1 入口路径、三个诊断 Case、采样间隔、结果路径待实现 hardware_attribution.py结构化解析、时间对齐、统计摘要与报告生成待实现 tests/test_hardware_attribution.py计数器差分、单位换算、统计与缺失工具回退测试待实现 README.md入口命令、环境变量和结果目录说明待实现 @@ -259,7 +240,7 @@ dsv4pro_pro6000d_2node_sglang_prefill_hardware_attribution/

    Phase 2 不复制双机 Docker 启停实现。唯一入口通过环境变量调用 Phase 1 的 - run_quick_map.sh start/stop,只新增硬件采集和 32K 请求编排。 + run_quick_map.sh start/stop,只新增硬件采集和三个代表负载的编排。 顶层仍只保留一个 Shell 文件,不创建额外 tmux、launch、start 或 stop 脚本。

    @@ -296,7 +277,7 @@ dsv4pro_pro6000d_2node_sglang_prefill_hardware_attribution/

    8. 验收条件