test_gpu_scripts/H100验收_vs_test_all_差距分析.md

101 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# H100 生产验收标准 vs 当前 `gpu_tester.py --test all` 覆盖差距
对比文件:`/Users/d-robotics/Downloads/H100_production_acceptance.pdf`
对比对象:当前仓库执行 `python gpu_tester.py --test all --report --format md/json`
## 结论
当前仓库的 `test all` 能覆盖验收文档里的大类框架,但还不是完整的 H100 生产验收。
它会跑 8 个模块:
1. GPU Information
2. Health Check
3. Memory Benchmark
4. Compute Benchmark
5. NCCL Test
6. GPU Stress Test
7. RDMA/IB Test
8. Training Simulation
但是按照 PDF 的生产验收标准,仍缺少这些关键项:
- NVLink 每卡 18 条链路的 active/速率/错误计数逐项验收
- DCGM `dcgmi diag -r 3`
- 30-60 分钟 burn-in 和 1 秒级温度/功耗/throttle/XID 采样
- NCCL 官方 `nccl-tests` 的性能验收,包括 1MB/256MB/2GB 三个消息大小、重复 3 次取最差值、标准差
- RDMA 生产口径4MB 带宽、8B 延迟、PFC/ECN 错误、ibping 双向
- 8 卡逐卡 compute 一致性,要求同 dtype 极差/均值 <= 3%
- FP64、INT8 计算项
- 训练项应为 8 卡 1.5B synthetic Transformer并按 45k tokens/s、step 抖动、显存、loss 健康度验收
## 覆盖矩阵
| PDF 验收项 | `test all` 是否覆盖 | 当前覆盖程度 | 主要缺口 |
| --- | --- | --- | --- |
| 1. 健康检查 | 部分覆盖 | 温度、功耗、ECC、PCIe、时钟、throttle、persistence、IB 设备 | idle 功耗 <=100W 未单独判定stress 功耗 >=630W 未判定retired pages 未查24h SBE 增长率未查AER/Replay errors 未查fabricmanager 服务和 ERROR 日志未查 |
| 2. NVLink 拓扑与链路 | 部分覆盖 | GPU info 会保存 `nvidia-smi topo -m` | 未跑 `nvidia-smi nvlink -s/-c/-e`;未验证每卡 18 条 NVLink未验证每条 25GB/s未验证 CRC/Replay/Recovery error = 0 |
| 3. Memory Bandwidth | 部分覆盖 | 会用 nvbandwidth 测 H2D、D2H、D2D write/read/bidir | 未输出完整 8x8 P2P 矩阵;未验非对角均值 >=360GB/s、最小值 >=320GB/s、相对均值偏差 <=±5%D2D 口径和 PDF 的单卡/P2P 验收口径还没完全对齐 |
| 4. Compute Throughput | 大部分覆盖 | 默认配置已是 matrix_size=8192、warmup=50、iterations=500、use_compile=trueH100 绝对 TFLOPS 阈值在 `gpu_specs.py` 里有 | 目前测试结果是整体/单进程口径,未真正逐 GPU 分别测出 8 卡极差/均值;未测 FP64、INT8 |
| 5. NCCL Multi-GPU | 部分覆盖,依赖工具 | 代码支持 nccl-tests若缺 binary 会 fallback torchrun 功能连通性 | 当前远端没装好 nccl-tests实际会退化成功能测试且失败/无性能数据;默认只启 allreduce/alltoall/broadcast未启 allgather/reducescatter/sendrecv消息大小不是 1MB/256MB/2GB 三点;未重复 3 次取 worst未统计标准差 |
| 6. Stress/Burn-in | 部分覆盖 | 会跑 stress默认 60 秒;无 gpu-burn 时用 PyTorch fallback | PDF 要 >=30min推荐 60min要 FP16/BF16 大 GEMM matrix >=8192要每分钟 TFLOPS 抖动、温度 <=80、卡间温差 <=5、功耗 >=630W、throttle=0、XID=0当前 PyTorch fallback 只分配约 64MB/卡,压力不够 |
| 7. DCGM 诊断 | 未覆盖 | 无 | 没有执行 `dcgmi diag -r 3`,也没有解析 Software/Deployment/Hardware/Integration/Stress/Power 子项 |
| 8. RDMA/IB | 部分覆盖 | 会发现 IB 设备,跑 ib_write_bw/read_bw/write_lat/read_lat | 当前脚本用 `localhost`不是跨节点msg_size 是 64KB不是 4MBlatency 没指定 8B阈值是 50GB/s 和 10us不是 PDF 的 write/read >=47GB/s、write_lat <=2us、read_lat <=3.5us;未查 PFC/ECN、ibping 双向 |
| 9. Training Simulation | 部分覆盖 | 会跑 GPT-2 或 synthetic transformer输出 tokens/s、step time、显存、loss | 当前 synthetic 是约 1.47B 参数但实际单进程 `.cuda()`,不是 8 卡分布式训练;未按 45k tokens/s、step 抖动 <=±3%、peak <=70GB/卡、NaN/Inf 做硬判定 |
| 10. 总体 Verdict | 部分覆盖 | report 有 summary | 当前 `all` 的 pass/fail 逻辑偏“模块是否报错”,不是 PDF 的任一子项 FAIL 即整机禁上生产 |
## 如果现在直接执行 `test all`,能得到什么
会得到一份“单节点综合体检/基准测试报告”,包含:
- 8 张 H100 的基础信息、驱动/CUDA、PCIe、显存、温度、功耗
- 健康检查结果
- nvbandwidth 的 H2D/D2H/D2D 汇总带宽
- FP32/TF32/FP16/BF16/FP8 计算吞吐
- NCCL 测试结果,如果 nccl-tests 缺失会退化到 torchrun fallback
- 60 秒 stress 结果
- 本机 localhost RDMA/IB 结果
- 训练模拟结果
这份报告能作为“快速冒烟 + 单机初筛”,不能直接作为 PDF 标准下的“生产验收合格报告”。
## 当前两台机器执行前置状态
已经确认:
- `nvbandwidth` 已装好并能被项目脚本调用
- PyTorch CUDA 环境已装好
- RDMA perftest 工具已存在
- `nccl-tests``gpu-burn` 目前没有按 PDF 生产验收口径准备好
另外,我刚才误触发的 `test all`
- `aikubeworker0016` 已经在跑单节点 `test all`,当前到 Training Simulation
- `aikubeworker0012` 没有成功启动
## 要补齐到 PDF 验收口径,需要加的最小清单
1. 安装/修复 `nccl-tests`,确保真正输出 bus BW而不是 torchrun fallback。
2. 安装/修复 `gpu-burn`,或把 PyTorch stress 改成真正高占用 FP16/BF16 GEMM并支持 30/60 分钟。
3. 增加 NVLink 专项:`nvidia-smi nvlink -s/-c/-e`,按 18 条/卡、25GB/s、error=0 判定。
4. 增加 DCGM 专项:`dcgmi diag -r 3`,解析子项 PASS/FAIL。
5. 增加 telemetry 采样stress 期间每 1 秒采温度、功耗、throttle、XID计算稳态功耗、温差、抖动。
6. 修改 RDMA支持指定 server/client、4MB 带宽、8B 延迟、双向 ibping、PFC/ECN 计数。
7. 修改 NCCL 配置:全 op 开启,按 1MB/256MB/2GB 三个 size重复 3 次取最差值和标准差。
8. 修改 Compute逐 GPU 分别跑,计算同 dtype 极差/均值;增加 FP64、INT8。
9. 修改 Training Simulation明确 8 卡 1.5B synthetic 分布式训练,加入 tokens/s、step 抖动、显存、loss NaN/Inf 的 PASS/FAIL。
10. 修改最终 verdict按 PDF 规则,任一子项 FAIL 就整机不通过。
## 建议执行策略
现在直接跑:
```bash
/root/gpu-test-venv/bin/python gpu_tester.py --test all --report --format md --output reports_all/test_all.md
```
得到的是“当前仓库 all 覆盖范围报告”。
要拿来做生产验收,需要先补齐上面的缺口,尤其是 `nccl-tests``gpu-burn`、NVLink、DCGM、长时间 burn-in、跨节点 RDMA。