- run_bench.sh: skip scenarios whose raw jsonl already exists and has expected completed count - parse_backend.py: replace scenarios list instead of appending, so resume+reparse stays clean - README.md: document RUN_ID-based resume
DSV4 H200 SGLang vs vLLM 对比实验
在 8x NVIDIA H200 上,用统一控制变量对比 SGLang 与 vLLM serving DeepSeek-V4-Flash。
设计原则
- 两个 backend 都使用 TP=8,绑定全部 8 张卡。
- 压测客户端统一使用
sglang.bench_serving。 - 场景矩阵、并发、输入/输出长度、请求数对两个 backend 完全一致。
- 每个 phase 启动 server 后先做 warmup,再跑正式压测。
- 短上下文和长上下文分阶段启动 server,避免
max-model-len/max-num-seqs显存冲突。 - 每次 server 启动的完整命令行参数会写入
results/<RUN_ID>/<backend>/results.json的config.phase1_server_args/config.phase2_server_args,方便在 P800 等其他平台复现时保持参数一致。
场景矩阵
Phase 1:短上下文吞吐(max_model_len=32k)
| Concurrency | Input | Output | Num prompts |
|---|---|---|---|
| 1 | 512 | 256 | 32 |
| 32 | 512 | 256 | 128 |
| 128 | 512 | 256 | 128 |
| 1 | 4000 | 512 | 32 |
| 32 | 4000 | 512 | 64 |
Phase 2:长上下文(max_model_len=210k)
| Concurrency | Input | Output | Num prompts |
|---|---|---|---|
| 1 | 32768 | 1024 | 8 |
| 1 | 65536 | 1024 | 4 |
| 1 | 131072 | 1024 | 2 |
| 1 | 200000 | 1024 | 1 |
ShareGPT 真实对话数据(max_model_len=32k)
| Concurrency | ShareGPT context len | Output | Num prompts |
|---|---|---|---|
| 1 | 32768 | 256 | 32 |
| 32 | 32768 | 256 | 128 |
使用 datasets/ShareGPT_filtered_chat.json,--sharegpt-context-len 32768 会自动过滤超长请求。
快速运行
bash experiments/dsv4_h200_sglang_vs_vllm/run_bench.sh
断点续跑
如果实验中途因为脚本/机器原因中断,可以复用同一个 RUN_ID 继续跑,已经完成的 scenario 会自动跳过:
RUN_ID=20260708-XXXXXX bash experiments/dsv4_h200_sglang_vs_vllm/run_bench.sh
判断标准是 raw_outputs/*.jsonl 已存在且 completed 数量达到预期。
结果保存在 experiments/dsv4_h200_sglang_vs_vllm/results/<RUN_ID>/:
results/<RUN_ID>/
├── sglang/
│ ├── results.json
│ ├── report.md
│ └── raw_outputs/ # gitignored
├── vllm/
│ ├── results.json
│ ├── report.md
│ └── raw_outputs/ # gitignored
├── comparison.md
└── logs/
文件说明
| 文件 | 作用 |
|---|---|
config.env |
公共配置:模型路径、端口、场景矩阵、虚拟环境 |
start_sglang.sh |
按 phase 启动 SGLang server |
start_vllm.sh |
按 phase 启动 vLLM server |
run_bench.sh |
总 orchestrator:跑 SGLang → 跑 vLLM → 生成对比报告 |
warmup.py |
用 sglang.bench_serving 发送少量预热请求 |
parse_backend.py |
解析单个 backend 的 raw jsonl 为 results.json + report.md |
compare.py |
读取两个 backend 的 results.json,生成 comparison.md |
环境
- SGLM server:
/data/user1/yy/envs/sglang - vLLM server:
/data/user1/yy/envs/vllm - Benchmark client:
/data/user1/yy/envs/sglang(统一用该环境的sglang.bench_serving)