129 lines
3.4 KiB
Markdown
129 lines
3.4 KiB
Markdown
# 自适应并发 Benchmark 使用说明
|
||
|
||
这套脚本对每个固定的 `(TP, DP, ISL, DSL)` 依次测试
|
||
`C=1,2,4,8,...`,直到 Total TPS 连续两次增长不足 2%,或达到并发上限、
|
||
发生 OOM。每个正式测点发送 `C * 5` 个请求,并先用相同并发 C warm-up。
|
||
|
||
## 1. 进入目录
|
||
|
||
vLLM:
|
||
|
||
```bash
|
||
cd /data3/yy/sskj/experiments/dsv4_h200_vllm_tp_dp_matrix
|
||
```
|
||
|
||
SGLang:
|
||
|
||
```bash
|
||
cd /data3/yy/sskj/experiments/dsv4_h200_sglang_tp_dp_matrix
|
||
```
|
||
|
||
两个目录的入口都是:
|
||
|
||
```bash
|
||
bash run_adaptive_concurrency.sh
|
||
```
|
||
|
||
## 2. 先 dry-run
|
||
|
||
只打印 TP/DP、ISL/DSL 和并发搜索计划,不加载模型:
|
||
|
||
```bash
|
||
DRY_RUN=1 bash run_adaptive_concurrency.sh
|
||
```
|
||
|
||
## 3. 单组合 smoke
|
||
|
||
只测 `TP=8, DP=1, ISL=1K, DSL=128`,并发搜索到 8:
|
||
|
||
```bash
|
||
RUN_ID=smoke-$(date +%Y%m%d-%H%M%S) \
|
||
TP_LIST="8" \
|
||
ISL_LIST="1024" \
|
||
DSL_LIST="128" \
|
||
GRID_LIMIT=1 \
|
||
SEARCH_MAX_CONCURRENCY=8 \
|
||
RESULT_BASE=/data3/yy/sskj_adaptive_results/smoke \
|
||
bash run_adaptive_concurrency.sh
|
||
```
|
||
|
||
## 4. 正式运行
|
||
|
||
长任务放进 tmux。vLLM 示例:
|
||
|
||
```bash
|
||
tmux new-session -d -s vllm-adaptive \
|
||
"cd /data3/yy/sskj/experiments/dsv4_h200_vllm_tp_dp_matrix && \
|
||
RUN_ID=vllm-\$(date +%Y%m%d-%H%M%S) \
|
||
RESULT_BASE=/data3/yy/sskj_adaptive_results/vllm \
|
||
bash run_adaptive_concurrency.sh"
|
||
```
|
||
|
||
SGLang 示例:
|
||
|
||
```bash
|
||
tmux new-session -d -s sglang-adaptive \
|
||
"cd /data3/yy/sskj/experiments/dsv4_h200_sglang_tp_dp_matrix && \
|
||
RUN_ID=sglang-\$(date +%Y%m%d-%H%M%S) \
|
||
RESULT_BASE=/data3/yy/sskj_adaptive_results/sglang \
|
||
bash run_adaptive_concurrency.sh"
|
||
```
|
||
|
||
查看任务:
|
||
|
||
```bash
|
||
tmux ls
|
||
tmux attach -t vllm-adaptive
|
||
tmux attach -t sglang-adaptive
|
||
```
|
||
|
||
从 tmux 退出但保持任务运行:按 `Ctrl-b`,松开,再按 `d`。
|
||
|
||
## 5. 常用覆盖参数
|
||
|
||
无需修改脚本,可以把变量写在命令前:
|
||
|
||
```bash
|
||
MODEL_PATH=/path/to/model \
|
||
DATASET_PATH=/path/to/ShareGPT.json \
|
||
DOCKER_IMAGE=your/server:image \
|
||
DOCKER_CLIENT_IMAGE=lmsysorg/sglang:latest \
|
||
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
|
||
SEARCH_MAX_CONCURRENCY=512 \
|
||
TPS_MIN_GAIN_PCT=2.0 \
|
||
PLATEAU_PATIENCE=2 \
|
||
bash run_adaptive_concurrency.sh
|
||
```
|
||
|
||
- vLLM 端口用 `VLLM_PORT`,SGLang 端口用 `SGLANG_PORT`。
|
||
- `TP_LIST="8"` 只跑 TP=8;DP 使用 `config.env` 中对应的 TP/DP 组合。
|
||
- `ISL_LIST="1024 4096"`、`DSL_LIST="128 256"` 用来筛选长度。
|
||
- `GRID_LIMIT=1` 表示每组 TP/DP 只跑一个 ISL/DSL shape。
|
||
- `BENCH_WARMUP_MAX_REQUESTS=0` 表示每个测点用完整并发 C warm-up;正数表示上限。
|
||
- 正式基线保持 `BENCH_DATASET_NAME=random` 和 `RANDOM_RANGE_RATIO=1.0`。
|
||
- `random-ids` 只用于检查链路,不与正式 ShareGPT-backed 结果混用。
|
||
|
||
换机器或模型时,至少检查 `MODEL_PATH`、`DATASET_PATH`、Docker 镜像、GPU 编号、
|
||
端口、模型最大上下文和显存参数。需要永久修改时再编辑对应目录的 `config.env`。
|
||
|
||
## 6. 结果
|
||
|
||
每次运行在 `${RESULT_BASE}/${RUN_ID}/` 下生成:
|
||
|
||
```text
|
||
adaptive_points.csv 每个并发测点的 TPS、TTFT、TPOT 等
|
||
adaptive_summary.csv 每个 ISL/DSL/TP/DP 的饱和并发和最佳 TPS 并发
|
||
adaptive_summary.md 可直接阅读的汇总表
|
||
run_manifest.json 本次模型、数据集和搜索参数
|
||
logs/ 编排与服务日志
|
||
tp*_dp*/raw_outputs/ sglang.bench_serving 原始 JSON
|
||
tp*_dp*/gpu_logs/ nvidia-smi 采样
|
||
```
|
||
|
||
快速查看:
|
||
|
||
```bash
|
||
column -s, -t adaptive_summary.csv | less -S
|
||
tail -f logs/orchestrator.log
|
||
```
|