yy-fighting 5eb605b7a2 feat: support resuming interrupted SGLang vs vLLM runs
- 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
2026-07-08 08:42:21 +00:00

93 lines
3.1 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.

# 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
bash experiments/dsv4_h200_sglang_vs_vllm/run_bench.sh
```
### 断点续跑
如果实验中途因为脚本/机器原因中断,可以复用同一个 `RUN_ID` 继续跑,已经完成的 scenario 会自动跳过:
```bash
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`