145 lines
13 KiB
Markdown
145 lines
13 KiB
Markdown
# sskj — 多平台大模型推理性能基准测试项目
|
||
|
||
> **更新(2026-07-31 13:11:40 CST)**
|
||
>
|
||
> 新增 Phase 1 与 Phase 2 的独立代码详解 HTML 档案,行号固定到提交 `ca1f2f63375c`。文档从唯一入口展开到配置来源、文件调用关系、双机服务与 RDMA 门禁、benchmark 请求生成、混合 Prefill/Decode 时序、两节点采集器、Case 时间窗切片和结构化结果,并为 `MEM_FRACTION_STATIC` 等关键变量记录“默认值定义 → Shell 传递 → 服务参数 → Run 证据”的完整追踪路径。代码档案保持独立,不加入主计划 HTML 或阶段介绍 HTML 的导航。
|
||
>
|
||
> **更新(2026-07-31 11:57:13 CST)**
|
||
>
|
||
> 实现 DeepSeek-V4-Pro 双机 Pro6000D SGLang TP16 的 Phase 2 硬件与资源竞争归因。新增唯一入口 `run_hardware_contention_attribution.sh`,内部复用 Phase 1 的双机服务与 benchmark,不要求用户手工启动 Phase 1;默认重放长/并发 Prefill、普通/持续/长上下文 Decode 和混合 Prefill/Decode A/B。Head 与 Worker 在同一诊断窗口采集 GPU、DCGM、CPU、进程、NUMA、`eth0/eth3` 和 `mlx5_0/mlx5_3` RDMA 数据,并保存 Case marker、完整命令、Manifest 和结构化汇总。正式执行只需运行 Phase 2 的 `all` 入口。
|
||
>
|
||
> **更新(2026-07-31 10:45:24 CST)**
|
||
>
|
||
> 为 DeepSeek-V4-Pro 双机 Pro6000D SGLang TP16 的 Phase 2 硬件归因同步宿主机监控环境:`174.1.51.5` 与 `174.1.51.7` 均安装 `sysstat 12.5.2`,`pidstat`、`mpstat`、`sar -n DEV,EDEV` 的 1 秒实时采样验证通过。两节点的 sysstat service/timer 保持 `disabled/inactive`,正式实验由编排脚本显式启停采集,避免后台周期任务干扰 Case。Phase 2 必须同时保存 Head/Worker 的 sysstat、GPU、SGLang 与 RDMA 时间序列;`docker top` 用于 PID 映射,`perf` 用于 CPU 硬件事件,`numastat` 用于 NUMA 亲和,`mlx5_0/mlx5_3` HCA 计数器用于 RoCE 数据面,均不能由 sysstat 完整替代。
|
||
>
|
||
> **更新(2026-07-31 00:11:25 CST)**
|
||
>
|
||
> 完成 DeepSeek-V4-Pro 双机 Pro6000D SGLang TP16 的长 Decode 补测,Run `dsv4pro-phase1-long-decode-20260730-234236` 结果 2/2 成功。`1K → 4K, C=16` 生成 65,536 个目标输出 token,Output TPS 为 310.02,TPOT P95 为 50.33 ms;相比 `1K → 1K, C=16`,Output TPS 增加 4.99%,TPOT P95 仅增加 0.62%。`128K → 1K, C=1` 生成完整 1,024 token,TTFT P95 为 49.326 s,TPOT P95 为 32.24 ms;其 TTFT 与 `128K → 1` 纯 Prefill 仅差 2.03%,TPOT P95 相比 1K Context 仅增加 2.47%。Phase 1 至此共完成 11 个固定点和 3 个混合结果,14/14 成功;两节点容器和 16 张 GPU 已清理。
|
||
>
|
||
> **更新(2026-07-30 23:38:42 CST)**
|
||
>
|
||
> 为 DeepSeek-V4-Pro 双机 Pro6000D SGLang TP16 Phase 1 增加两个最小长 Decode 补充场景:`1K → 4K, C=16` 用于观察持续长输出、KV 增长与稳态 Decode,`128K → 1K, C=1` 用于观察长上下文上的 Decode Attention。继续复用唯一 `run_quick_map.sh` 入口和 `CASE_IDS` 过滤,不新增启动脚本;场景验证单测由 9 点更新为 11 点,Shell、3 个 Python 单测和两点 Dry-run 已通过。
|
||
>
|
||
> **更新(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 与有效结论,历史失败压缩到末尾经验教训。
|
||
>
|
||
> **更新(2026-07-30 17:54:30 CST)**
|
||
>
|
||
> 为 DeepSeek-V4-Pro 双机 TP16 quick-map 加入 RDMA fail-closed 启动保护。唯一 Shell 入口现在只允许计算网 `eth0/eth3` 与其 RDMA HCA `mlx5_0/mlx5_3`,在两端预检并透传 `rdma_cm/uverbs0/uverbs3`,服务健康后必须从两端 NCCL INFO 日志证明 `NET/IB` 和两条 HCA 均已启用,否则 benchmark 不会开始。运行清单新增 RDMA 开关、强制校验和设备路径;语法、结果解析器单测、完整 dry-run 及非法网卡/HCA 负例均已通过,真机 NET/IB 验证与 Phase 1 重跑尚未执行。
|
||
>
|
||
> **更新(2026-07-30 17:45:18 CST)**
|
||
>
|
||
> 修正 DeepSeek-V4-Pro 双机 TP16 quick-map 的 NCCL Socket 网卡错误。控制组确认服务容器未暴露 `/dev/infiniband`,NCCL 实际回退 `NET/Socket`;旧 quick-map 又误选低速非计算网,导致冷 1K/32K Prefill 比 `eth0` 计算网 Socket 控制组慢约 10.9 倍/13.25 倍。默认 `NCCL_SOCKET_IFNAME` 已改为 `eth0`;旧约 65 token/s 结果降级为事故证据,Phase 2 暂停并等待修正后的 Phase 1。新增双机通信/NCCL 术语 HTML、网络审计报告,并保留原 `/data/qqt/sskj` TP16 脚本不变。
|
||
>
|
||
> **更新(2026-07-30 16:38:41 CST)**
|
||
>
|
||
> 完成 DeepSeek-V4-Pro 双机 TP16 新旧脚本 TTFT 口径审计。确认旧产物受到 16 条 Warm-up、跨 Case 固定 Seed 递增长度、未清 Prefix Cache 及前一轮残留服务状态影响;同配置冷请求稳定复现约 16 秒/1K。新增 Phase 1 结果、脚本审计和 Phase 2 设计 HTML 档案,后续 Cold/Warm Prefix 指标分开报告。
|
||
>
|
||
> **更新(2026-07-30 14:33:52 CST)**
|
||
>
|
||
> 新增独立的 `dsv4pro_pro6000d_2node_sglang_tp16_quick_map` 快速性能地图与混合干扰 A/B。实验只保留一个 Shell 入口;旧 TP16 全量脚本保持不变。首轮真机验证已确认双机 TP16 服务可用,并据实测耗时将快速矩阵缩为一波请求,同时修正 Warm-up 污染 Prefix Cache 和混合负载注入时序。
|
||
>
|
||
> 历史更新见 `git log`。项目目的与工作流见下方。
|
||
> **项目目的**:当新显卡(GPU/NPU)到货时,用最短时间完成大模型在该平台上的推理性能评估与部署配置选型。
|
||
> 当前模型:DeepSeek-V4-Flash(FP8 / INT8);后续接入 GLM5.2,**完全复用**本项目的实验与报告流程。
|
||
> 新平台接入 SOP:[`docs/NEW_PLATFORM_GUIDE.md`](docs/NEW_PLATFORM_GUIDE.md)。
|
||
|
||
## 这个项目解决什么问题
|
||
|
||
1. **新卡快速评估**:新平台到货后,按 SOP 复制实验目录、改少量配置,即可跑起与既有平台口径一致的 benchmark,横向可比。
|
||
2. **部署配置选型**:通过 TP×DP 并行矩阵 + 自适应并发搜索,回答"该平台上哪种并行配置在什么并发下满足 SLO、吞吐最高"。
|
||
3. **数据资产化**:每轮实验产出结构化结果(jsonl/csv/manifest),汇总成飞书性能报告并回填多维表格,形成可检索的历史数据库。
|
||
|
||
## 标准工作流(全流程)
|
||
|
||
```
|
||
① 跑实验 experiments/<platform>/<experiment>/run_adaptive_concurrency*.sh
|
||
└─ 公共搜索逻辑: scripts/common/adaptive_bench_lib.sh
|
||
② 落盘 adaptive_results/<run_id>/
|
||
└─ adaptive_points.jsonl / adaptive_shapes.jsonl / adaptive_summary.* / run_manifest.json
|
||
③ 分析 用 Python 从 jsonl 实算(禁止目测),SLO 口径见 docs/SLO_STANDARDS.md
|
||
④ 飞书报告 按飞书 wiki「性能报告编写指南(README)」写到「显卡性能报告/<平台>」节点下
|
||
⑤ 回填多维表格 飞书「模型推理适配 Bench 迭代跟踪」:每成功探测点一行
|
||
```
|
||
|
||
- SLO 口径(S2 层,DSV4-Flash / GLM5.2 均适用):**TTFT P95 < 3s,TPOT P95 < 50ms**,严格小于。详见 [`docs/SLO_STANDARDS.md`](docs/SLO_STANDARDS.md)。
|
||
- 报告编写规范(章节骨架、分析口径、发布流程)以飞书 wiki「显卡性能报告 / 性能报告编写指南(README)」为准。
|
||
- 多维表格每行 = 一个成功探测点(config、Concurrency、Throughput、Input/Output TPS、TTFT/TPOT/E2E P95、SLO达标状态、开发文档链接)。
|
||
|
||
## 目录结构
|
||
|
||
仓库的目录布局、`scripts/common/` 组件职责、结果命名规范与 `results.json` schema,统一见 [`docs/EXPERIMENT_GUIDE.md`](docs/EXPERIMENT_GUIDE.md)(单一权威来源)与 [`docs/BENCHMARK_WORKFLOW.md`](docs/BENCHMARK_WORKFLOW.md)。
|
||
|
||
## 实验索引
|
||
|
||
### TP/DP matrix + 自适应并发(当前主流形态)
|
||
|
||
| 实验 | 说明 |
|
||
|---|---|
|
||
| `experiments/h20/dsv4_h20_vllm_tp_dp_matrix/` | H20 + vLLM,TP2/DP4、TP4/DP2、TP8/DP1 |
|
||
| `experiments/h20/dsv4_h20_sglang_tp_dp_matrix/` | H20 + SGLang,同上 |
|
||
| `experiments/h200/dsv4_h200_vllm_tp_dp_matrix/` | H200 + vLLM |
|
||
| `experiments/h200/dsv4_h200_sglang_tp_dp_matrix/` | H200 + SGLang |
|
||
| `experiments/p800/dsv4_p800_sglang_tp_dp_matrix/` | P800 + SGLang(INT8;TP2/DP4 启动 OOM 无数据,见 config.env 注释) |
|
||
| `experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/` | RTX 6000D + vLLM |
|
||
| `experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/` | RTX 6000D + SGLang |
|
||
| `experiments/pro6000/dsv4pro_pro6000d_2node_sglang_tp16_quick_map/` | 双机 RTX 6000D + DeepSeek-V4-Pro,SGLang TP16 快速性能地图与混合干扰 A/B |
|
||
| `experiments/pro6000/dsv4pro_pro6000d_2node_sglang_hardware_contention_attribution/` | 双机 RTX 6000D + DeepSeek-V4-Pro,SGLang TP16 硬件与资源竞争归因 |
|
||
|
||
TP/DP matrix 目录内:`run_bench.sh` 跑固定并发矩阵;`run_adaptive_concurrency.sh` 从 C=1 指数倍增搜饱和点;`run_adaptive_concurrency_add16.sh` 从 C=16 线性 +16 步进、带 TTFT SLO 停止与回退(当前主力用法,见 `experiments/ADAPTIVE_CONCURRENCY_USAGE.md`)。专项 quick-map 的入口以对应目录 README 为准。
|
||
|
||
### 其他实验(H200 老形态 & 专项)
|
||
|
||
| 实验 | 说明 |
|
||
|---|---|
|
||
| `experiments/h200/dsv4_h200_sglang/` `…/dsv4_h200_vllm/` | H200 单引擎 baseline |
|
||
| `experiments/h200/dsv4_h200_sglang_vs_vllm/` | H200 引擎控制变量对比 |
|
||
| `experiments/h200/dsv4_h200_dspark/` `…/dsv4_h200_vllm_dspark_vs_default/` | DSpark 投机解码相关 |
|
||
| `experiments/h200/dsv4_h200_vllm_mtp_vs_default/` | vLLM MTP 对比 |
|
||
| `experiments/h200/dsv4_h200_vllm_tp{2,4,8}_custom_bench/` | 自定义压测客户端(多服务负载均衡) |
|
||
| `experiments/h200/dsv4_h200_max_context_length/` `…/dsv4_h200_long_context_matrix/` `…/dsv4_h200_256k_4k_probe/` `…/dsv4_h200_64k_sglang_vs_vllm/` | 长上下文专项 |
|
||
| `experiments/p800/dsv4_p800_sglang/` `…/dsv4_p800_max_context_length/` `…/dsv4_p800_long_context_matrix/` `…/dsv4_p800_256k_4k_probe/` | P800 baseline 与长上下文专项 |
|
||
| `experiments/TEMPLATE/` | 老式固定场景实验模板 |
|
||
|
||
## 快速复现
|
||
|
||
以 H20 vLLM 自适应并发搜索为例(其他平台同理,换目录即可):
|
||
|
||
```bash
|
||
# 1. dry-run:只打印搜索计划,不加载模型
|
||
cd experiments/h20/dsv4_h20_vllm_tp_dp_matrix
|
||
DRY_RUN=1 bash run_adaptive_concurrency_add16.sh
|
||
|
||
# 2. 单组合冒烟:只测 TP=8、1K/128,并发上限 8
|
||
RUN_ID=smoke-$(date +%Y%m%d-%H%M%S) \
|
||
TP_LIST="8" ISL_LIST="1024" OSL_LIST="128" GRID_LIMIT=1 SEARCH_MAX_CONCURRENCY=8 \
|
||
bash run_adaptive_concurrency_add16.sh
|
||
|
||
# 3. 正式跑(放 tmux)
|
||
tmux new-session -d -s h20-vllm-adaptive \
|
||
"cd $(pwd) && bash run_adaptive_concurrency_add16.sh"
|
||
```
|
||
|
||
更多用法(断点续跑 RESUME_RUN_ID、常用覆盖参数)见 `experiments/ADAPTIVE_CONCURRENCY_USAGE.md`。
|
||
|
||
## 新平台 / 新模型接入
|
||
|
||
- **新显卡**:按 [`docs/NEW_PLATFORM_GUIDE.md`](docs/NEW_PLATFORM_GUIDE.md) 执行,核心动作是复制 `experiments/h20/dsv4_h20_<engine>_tp_dp_matrix`、改 `config.env` / `adaptive_config.env` / `matrix.json` 三件套,再加 `platforms/<chip>.env`。
|
||
- **新模型(GLM5.2)**:复用同一实验目录结构,新增 `experiments/<platform>/glm52_<platform>_<engine>_tp_dp_matrix/`,改模型路径、量化与引擎启动参数即可;SLO 口径、报告流程、多维表格结构不变。
|
||
|
||
## 环境要求
|
||
|
||
- 公共:bash、Python 3、`sglang.bench_serving` 压测客户端(Docker 或 venv);绘图分析用 `envs/charts/`(matplotlib)。
|
||
- 各平台的镜像 / venv / 模型路径见对应实验目录的 `config.env` 与 `platforms/<chip>.env`;**模型与数据集路径是机器相关的**,换机器时按实际路径调整。
|
||
- 环境搭建规范见 `envs/README.md` 与 `envs/UV_ENV_SETUP.md`。
|
||
|
||
## 注意事项
|
||
|
||
- 提交内容:实验代码 + 最终产物(results.json / report.md / adaptive 的 jsonl 与 summary);日志、raw_outputs、gpu_logs 不入库(`.gitignore` 已排除)。
|
||
- 仓库会clone到多台机器,实验脚本内引用公共组件一律用 `${SCRIPT_DIR}/../../../scripts/common`(TEMPLATE 为 `../../`),不要写绝对路径。
|