Compare commits

...

2 Commits

Author SHA1 Message Date
Zhiyi Hong
405608ad23 [BugFix] make Phase 3 artifact collection fail closed 2026-07-31 18:53:19 +08:00
Zhiyi Hong
771b868757 [Docs] link Phase 2 results to server evidence 2026-07-31 18:43:30 +08:00
3 changed files with 61 additions and 3 deletions

View File

@ -1,5 +1,13 @@
# sskj — 多平台大模型推理性能基准测试项目
> **更新2026-07-31 18:53:00 CST**
>
> Phase 3 PyTorch Profiler 首轮 smoke 已证明双节点 16 个 rank 均可完成 trace 写盘Head/Worker 分别生成 8 份、约 1.5/1.4 GB 压缩 trace。修复当前 OpenSSH 不接受 `scp remote:/path/.` 导致 Worker 结果未回收的问题,改为 SSH tar 流式传输;正式入口不再忽略回收失败,并新增至少 16 份 PyTorch rank trace、至少 2 份 Nsight 节点报告的结果门禁。
>
> **更新2026-07-31 18:43:00 CST**
>
> 为 Phase 2 实验档案第 11 节的 GPU/DCGM、CPU/进程/NUMA、双 Rail RDMA、PCIe/NCCL 四组结果补充服务器证据路径。每组同时标明结构化汇总 CSV、Head/Worker 原始采样日志、通信原始输出及实际命令文件,便于从结论直接追溯最终 Run `dsv4pro-phase2-20260731-163620` 的证据。
>
> **更新2026-07-31 18:38:00 CST**
>
> 新增 DeepSeek-V4-Pro 双机 Pro6000D SGLang Phase 3 时间线分析唯一入口。代码提供双节点环境审计、PyTorch Profiler smoke、Nsight Systems smoke 与三段正式 capture range覆盖 Decode 对照、Decode 背景叠加 128K Prefill、独立 128K Prefill沿用 Phase 1 已验证的 TP16/EP2、CUDA Graph 与双 Rail NET/IB 配置,不重复 Phase 2 的硬件采样和通信微基准。阶段尚未产出正式结果,因此按档案门禁暂不创建 `phase3_exp.html``phase3_code.html`

View File

@ -705,6 +705,12 @@ tmux new-session -d -s dsv4pro-phase2 \
<h2>11. 第 5 节指标逐项结果</h2>
<h3>11.1 GPU 基础状态与 DCGM</h3>
<p><strong>服务器证据路径:</strong><br>
汇总:<code>/data/hzy/sskj/experiments/pro6000/dsv4pro_pro6000d_2node_sglang_hardware_contention_attribution/results/dsv4pro-phase2-20260731-163620/case_gpu_summary.csv</code>
<code>case_gpu_node_summary.csv</code><code>case_dcgm_summary.csv</code><br>
原始:同一 Run 目录下的 <code>head/gpu_samples.csv</code><code>worker/gpu_samples.csv</code>
<code>head/dcgm_dmon.log</code><code>worker/dcgm_dmon.log</code>
</p>
<ul>
<li>各 Case GPU Util Mean 大多为 94%99%P95 为 100%SM Clock 约 2.392.42 GHz未见降频。</li>
<li>每卡显存稳定在约 83,00083,364 MiB。Decode 功耗约 216258 WPrefill 功耗约 293307 W。</li>
@ -714,6 +720,12 @@ tmux new-session -d -s dsv4pro-phase2 \
</ul>
<h3>11.2 CPU、进程与 NUMA</h3>
<p><strong>服务器证据路径:</strong><br>
汇总:<code>/data/hzy/sskj/experiments/pro6000/dsv4pro_pro6000d_2node_sglang_hardware_contention_attribution/results/dsv4pro-phase2-20260731-163620/case_cpu_summary.csv</code>
<code>case_process_summary.csv</code><code>case_perf_summary.csv</code><code>case_numa_summary.csv</code><br>
原始:同一 Run 目录下 Head/Worker 各自的 <code>mpstat.log</code><code>pidstat.log</code>
<code>perf_stat.log</code><code>numa_samples.csv</code><code>docker_top.log</code>
</p>
<ul>
<li>整机 CPU Active Mean 约 9.6%10.4%P95 约 10%11.4%;没有全机 CPU 饱和。</li>
<li>服务进程峰值约 1,210%1,226%,相当于约 12 个 CPU Core热点 Core 数量最多 1213 个。</li>
@ -722,6 +734,13 @@ tmux new-session -d -s dsv4pro-phase2 \
</ul>
<h3>11.3 双 Rail RDMA</h3>
<p><strong>服务器证据路径:</strong><br>
汇总:<code>/data/hzy/sskj/experiments/pro6000/dsv4pro_pro6000d_2node_sglang_hardware_contention_attribution/results/dsv4pro-phase2-20260731-163620/case_rdma_summary.csv</code>
<code>rdma_summary.csv</code><code>case_netdev_summary.csv</code><br>
原始:同一 Run 目录下的 <code>head/rdma.csv</code><code>worker/rdma.csv</code>
<code>head/sar_net.log</code><code>worker/sar_net.log</code>;端口/HCA 静态状态在两端
<code>static_before.log</code><code>static_after.log</code>
</p>
<ul>
<li>RoCE 绕过普通 Linux Socket 数据路径,因此 <code>sar</code><code>eth0/eth3</code> 流量接近 0实际流量必须看 <code>mlx5_0/mlx5_3</code> HCA Counter。</li>
<li>普通 Decode 每 Rail 约 36.736.8 Gbit/s128K Prefill 每 Rail约 70.571.5 Gbit/s。</li>
@ -730,6 +749,13 @@ tmux new-session -d -s dsv4pro-phase2 \
</ul>
<h3>11.4 PCIe 与 NCCL 通信基线</h3>
<p><strong>服务器证据路径:</strong><br>
汇总:<code>/data/hzy/sskj/experiments/pro6000/dsv4pro_pro6000d_2node_sglang_hardware_contention_attribution/results/dsv4pro-phase2-20260731-163620/communication_aggregate.csv</code>
<code>communication_summary.csv</code><br>
原始:同一 Run 目录的 <code>communication/p2p_head.log</code><code>p2p_worker.log</code>
<code>allreduce_head_8gpu.log</code><code>allreduce_worker_8gpu.log</code>
<code>allreduce_16gpu_crossnic{0,1,2}_{head,worker}.log</code>;实际执行命令在 <code>commands/communication_*.cmd.txt</code>
</p>
<table>
<thead><tr><th>测试</th><th>结果</th><th>解释</th></tr></thead>
<tbody>

View File

@ -298,15 +298,36 @@ stop_service_node() {
fetch_worker_profiles() {
[[ "${DRY_RUN}" == "1" ]] && return 0
mkdir -p "${RESULT_DIR}/profiles/worker"
scp -q -r "${WORKER_NODE}:${WORKER_PROFILE_HOST}/." \
"${RESULT_DIR}/profiles/worker/"
ssh -o BatchMode=yes -o StrictHostKeyChecking=no "${WORKER_NODE}" \
"tar -C '${WORKER_PROFILE_HOST}' -cf - ." \
| tar -C "${RESULT_DIR}/profiles/worker" -xf -
run_on_node "${WORKER_NODE}" "rm -rf '${WORKER_RUN_DIR}'"
}
stop_service() {
stop_service_node "${HEAD_NODE}" "${HEAD_CONTAINER}" head
stop_service_node "${WORKER_NODE}" "${WORKER_CONTAINER}" worker
fetch_worker_profiles || true
fetch_worker_profiles
}
validate_torch_traces() {
local count
count="$(find "${RESULT_DIR}/profiles" -type f -name '*.trace.json.gz' | wc -l)"
if (( count < TP_SIZE )); then
log "ERROR: expected at least ${TP_SIZE} rank traces, found ${count}"
return 1
fi
log "PyTorch trace validation passed: ${count} rank traces"
}
validate_nsys_reports() {
local count
count="$(find "${RESULT_DIR}/profiles" -type f -name '*.nsys-rep' | wc -l)"
if (( count < NNODES )); then
log "ERROR: expected at least ${NNODES} Nsight reports, found ${count}"
return 1
fi
log "Nsight report validation passed: ${count} reports"
}
flush_cache() {
@ -539,6 +560,7 @@ run_torch_smoke() {
"${TORCH_SMOKE_STEPS}" "${CONTROL_ISL}" 128 8 8 5101
stop_service
CLEANUP_ON_EXIT=0
validate_torch_traces
write_manifest COMPLETED
}
@ -553,6 +575,7 @@ run_nsys_smoke() {
"${CONTROL_CONCURRENCY}" "${CONTROL_PROMPTS}" 5102
stop_service
CLEANUP_ON_EXIT=0
validate_nsys_reports
generate_nsys_stats
write_manifest COMPLETED
}
@ -571,6 +594,7 @@ run_all() {
"${NSYS_PREFILL_STEPS}" "${PREFILL_ISL}" "${PREFILL_OSL}" 1 1 5303
stop_service
CLEANUP_ON_EXIT=0
validate_nsys_reports
generate_nsys_stats
write_manifest COMPLETED
}