10 KiB
MiniMax-H3 在 NVIDIA B300 上的 SGLang 部署测试报告(方案一:原生拓扑矩阵)
模板说明:结构完全对齐《MiniMax-H3 在 RTX 6000D 上的 SGLang 多实例部署测试报告》(飞书 wiki ZPtMwtunEiOb39kfV6ocGhp3nLf)。 所有【待填】处由实验结果填入;数据来源:
/data/wxy/results/minimax_h3_b300_matrix/<run_id>/summary.tsv(每 phase 一行)与各summary.json。 6000D 对照基线(同口径 20 步/5s/16:9/480-1080×8/seed=1101+prompt_index)已在各节标注。
1. 结论摘要
本轮在单台 8×NVIDIA B300 SXM6 服务器上,对 MiniMax-H3 的原生 SGLang 部署进行了等总量、等任务、等分辨率的 serving 测试,覆盖拓扑 × 批并发 × 精度三个轴:
- 拓扑:Ulysses-8×1、Ulysses-4×2、tp1×8、单卡双实例×8(16 实例);
- 实例内批并发:
--batching-max-size= 1 / 2 / 4; - 精度:BF16 / FP8。
每种部署均执行 64 条正式请求(FL2VA 与 Ref2VA 各 32 条;480P/720P/768P/1080P 各 8 条;20 steps、5 秒、16:9)。
【待填】结论要点:
- 吞吐优先的最优拓扑:______(预期候选:u8x1_b2/b4 或 tp1x8_b2;判定依据:machine_qps 与打包率)
- 单请求时延最优:______(预期:u8x1 batch1)
- FP8 相对 BF16 的吞吐/显存收益:______
- 相对 6000D 基线(TP2×4:FL2VA 0.010769 QPS / Ref2VA 0.006234 QPS)的整机提升:______
2. 实验环境与设计
| 项目 | 固定配置 |
|---|---|
| 服务器 | Host B300,8×NVIDIA B300 SXM6,单卡 288 GB HBM3e |
| 模型 | /data/hf_models/MiniMax-H3 |
| 框架与环境 | SGLang;【待填】环境路径(6000D 对照为 /root/.miniconda3/envs/sglang,sglang 0.5.17) |
| 任务 | FL2VA、Ref2VA;两个 variant 分阶段启动并顺序测试 |
| Prompt | /root/.cache/sglang/vbench_subject_consistency.txt,取 8 条 VBench subject-consistency prompt |
| 参考图 | /data/wxy/sskj-MiniMax-H3/assets/reference_images/landscape_mountain_lake.jpg |
| 正式生成参数 | 20 inference steps;5 秒;16:9;flow_shift=12.0;audio_flow_shift=3.0;seed=1101+prompt_index |
| 分辨率 | short edge 480、720、768、1080;每个任务每档 8 条 |
| 预热 | 每实例 1 条、5 steps;预热不计入正式结果 |
| 服务并发 | --batching-max-size 1/2/4(客户端 in-flight 与服务端同值);不同实例并行 |
2.1 部署方案矩阵(与 6000D 报告的对应关系)
6000D 报告以"每实例 GPU 数"定义方案(TP8×1 / TP4×2 / TP2×4);B300 单卡 288GB 可整模型驻留, 以同语义的并行档位对应:8 卡并 = Ulysses-8,4 卡并 = Ulysses-4,单卡 = tp1(Ulysses-1)。
| 方案 | 实例数 | 每实例 GPU | 并行形态 | 批并发 | 服务端口 |
|---|---|---|---|---|---|
| u8x1 | 1 | 8 | Ulysses-8(对应 6000D TP8×1) | 1 | 30010 |
| u8x1_b2 / u8x1_b4 | 1 | 8 | Ulysses-8 + --encoder-parallel dp |
2 / 4 | 30010 |
| u4x2 / u4x2_b2 | 2 | 4 | Ulysses-4(对应 6000D TP4×2) | 1 / 2 | 30010、30020 |
| tp1x8 / tp1x8_b2 | 8 | 1 | tp1(对应 6000D TP2×4 的"多实例"结构) | 1 / 2 | 30010–30080 |
| share2x8 | 16 | 1(单卡双实例) | tp1 × 共享卡(实验项) | 1 | 30010–30160 |
每方案 × BF16 / FP8 两档;FP8 档追加 --quantization fp8。
2.2 样本总量与均衡分配
同 6000D 口径:每种部署正式总量恒定为 64 条,每任务 32 条(4 分辨率 × 8 prompt);分片按 prompt_index % num_replicas,
保证每个实例拿到相同数量的 480/720/768/1080 样本。
2.3 指标口径
machine_wall_s:同任务最早正式请求开始到最晚正式请求结束的整机墙钟时间;machine_qps:成功请求数 ÷ machine_wall_s;latency_mean_s / latency_p95_s:单请求端到端时延(提交→服务端生成→轮询完成),不含 server 启动与预热;- 分辨率级 QPS(对照 4.3/4.4 口径):并发副本数 ÷ 该分辨率平均时延;
- 综合 QPS(FL2VA/Ref2VA 各半):
2 × 并发副本数 / (FL2VA 平均延迟 + Ref2VA 平均延迟)。
3. 启动与测试脚本
编排脚本:/data/wxy/sskj-h3/throughput/sglang-base-b300/scripts/run_sglang_h3_b300_matrix.sh
客户端与汇总:/data/wxy/sskj-h3/throughput/sglang-base-b300/scripts/minimax_h3_b300_bench.py
ssh B300
cd /data/wxy/sskj-h3/throughput/sglang-base-b300
DRY_RUN=1 bash scripts/run_sglang_h3_b300_matrix.sh # 打印 32 phase 计划
RUN_ID="b300-20steps-5s-$(date +%Y%m%d-%H%M%S)" \
setsid bash scripts/run_sglang_h3_b300_matrix.sh \
>/data/wxy/sglang_b300_matrix.log 2>&1 &
tail -f /data/wxy/sglang_b300_matrix.log
编排脚本对每个 topo 自动计算 replicas、分配连续 GPU(GPU_MODE=partition;share2x8 需 GPU_MODE=share),
独立端口,等待 /health 后启动同数量 client;FL2VA 完成后释放服务再切 Ref2VA。
不可行组合(如 BF16 单卡双实例)在 SKIP_ON_FAIL=1 下记录后跳过。核心服务启动参数(u8x1 示例):
CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7" \
sglang serve \
--model-path /data/hf_models/MiniMax-H3 \
--model-variant "$variant" \
--backend sglang \
--performance-mode speed \
--num-gpus 8 --tp-size 1 --ulysses-degree 8 \
--use-fsdp-inference false \
--enable-torch-compile false \
--batching-max-size 1 --batching-delay-ms 0 \
--warmup-resolutions 1344x768 \
--host 0.0.0.0 --port "$port"
客户端通过 SGLang 异步 POST /v1/videos 提交、GET /v1/videos/{id} 轮询;每条请求写入 JSONL,
阶段结束后聚合为 summary.json 与 summary.tsv(列:topo prec replicas tp ulysses batching inflight task expected recorded completed failed machine_qps latency_mean_s latency_p95_s machine_wall_s)。
4. 测试结果
4.1 整机吞吐与端到端时延(对照 6000D 报告 4.1)
| 方案 | 任务 | 成功/总数 | machine QPS | 平均时延(s) | P95(s) | 墙钟(s) |
|---|---|---|---|---|---|---|
| u8x1 BF16 | FL2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| u8x1 BF16 | Ref2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| u8x1_b2 BF16 | FL2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| u8x1_b4 FP8 | FL2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| u4x2 BF16 | FL2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| tp1x8 BF16 | FL2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| tp1x8_b2 FP8 | FL2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| share2x8 FP8 | FL2VA | 【待填】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| ...(其余 phase 同构) |
6000D 对照(同口径):TP8×1 FL2VA 0.007646(130.79s)/ Ref2VA 0.004580;TP4×2 0.009723;TP2×4 0.010769 / 0.006234。
4.2 分辨率平均时延
| 任务 | 方案 | 480 | 720 | 768 | 1080 |
|---|---|---|---|---|---|
| FL2VA | u8x1 BF16 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| FL2VA | u8x1_b4 FP8 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| FL2VA | tp1x8 BF16 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
| FL2VA | ... | ||||
| Ref2VA | ... |
(数据取 summary.json 的 by_short_edge.latency_mean_s。)
4.3 / 4.4 分辨率整机 QPS(FL2VA / Ref2VA)
| SGLang 配置 | 480p | 720p | 768p | 1080p |
|---|---|---|---|---|
| 【方案】 | 【待填】 | 【待填】 | 【待填】 | 【待填】 |
4.5 FL2VA 和 Ref2VA 各占 50% 时的综合 QPS
公式同 6000D 报告(2 × 并发副本数 / 时延和)。表:【待填】。 预期观察点:1080 档是否再次成为长尾主因、批并发(batching>1)是否改变 1080 的相对惩罚。
5. 拓扑比较与建议(分析框架,结论待测)
| 维度 | 6000D 结论(TP8/TP4/TP2 序列) | B300 预期/待测 |
|---|---|---|
| 吞吐最优 | TP2×4(多实例) | 【待测】候选 u8x1_b2/b4、tp1x8_b2 |
| 时延最优 | TP8×1 | 【待测】候选 u8x1 batch1 |
| FP8 | 未测 | 【待测】显存 -38% → 批容量翻倍 |
| 1080p 惩罚 | 拆分越细惩罚越明显 | 【待测】批并发是否能摊薄 |
建议框架(沿用 6000D 报告):
- 若以"每台机器每天完成条数"为核心 → 选吞吐最优档;若兼顾等待时间 → 折中档(u4x2 或 u8x1_b2);
- 1080 与低分辨率拆池,避免 head-of-line blocking;
- 按真实流量比例做并发队列测试后再定最终档位。
6. 与 6000D / vLLM-Omni 的同口径对照
6.1 与 6000D(RTX 6000D 8 卡)横向对照
同任务/prompt/分辨率/steps/时长/种子、按整机口径:
| 部署 | 任务 | 6000D QPS | B300 QPS | B300 相对 |
|---|---|---|---|---|
| 8×1 卡实例(6000D TP8×1 ↔ B300 u8x1) | FL2VA | 0.007646 | 【待填】 | |
| 8×1 卡实例 | Ref2VA | 0.004580 | 【待填】 | |
| 4×2 卡实例(TP4×2 ↔ u4x2) | FL2VA | 0.009723 | 【待填】 | |
| 2×1 卡实例 ×4(TP2×4 ↔ tp1x8) | FL2VA | 0.010769 | 【待填】 |
6.2 与 vLLM-Omni 对照
【待填】B300 上 vLLM-Omni 同口径结果(6000D 上 vLLM-Omni 内部为 DiT TP2×USP4/2/1,多数格子快于 SGLang +25.68%/+47.59%/+24.91%/+22.09%)。 注意两套 API/编码链路不同(SGLang 异步 job 轮询 vs vLLM-Omni 同步 MP4),仅用于整机容量判断;视频质量需另行盲评/VBench。
7. 优化策略对齐(方案二占位)
6000D 报告 Cache-DiT 对照(同请求同 seed,TP2×4 上叠加):
- 配置:RDT=0.1 / MC=4 / Fn=2 / Bn=0 / W=2 / SCM=dynamic + h3_cache_patch;
- 效果:整机 QPS +95.3%(FL2VA)/ +121.1%(Ref2VA);相对 TP8×1 基线达 2.75× / 3.01×;各分辨率一致受益(1.97×–2.39×),1080p 无长尾恶化。
B300 待跑:在 B300 最优拓扑上叠加同类 Cache-DiT / Turbo LoRA / SubBlock 等优化,对齐 6000D 表格结构出"表格 1~6"。 (优化策略参考与最终档位待定,本报告先以原生拓扑矩阵收口。)
8. 结果与审计文件
- 本轮结果根目录:
/data/wxy/results/minimax_h3_b300_matrix/<run_id>/ - 汇总文件:各 run 根目录
summary.tsv;每个 phase 目录summary.json;每个 client 目录逐请求results.jsonl与日志;每个 server 目录server.log、cuda_visible_devices.txt、outputs/ - 完整脚本:
/data/wxy/sskj-h3/throughput/sglang-base-b300/scripts/run_sglang_h3_b300_matrix.sh、.../minimax_h3_b300_bench.py