sskj/experiments/ADAPTIVE_CONCURRENCY_USAGE.md
Quantong Qiu e0ae0715b1 feat(adaptive): add RESUME_RUN_ID resume support and rename DSL to OSL
- Add RESUME_RUN_ID env var for breakpoint resume in adaptive benchmarks.
  When set, the script reuses an existing result directory and skips
  already-tested (TP, DP, ISL, OSL) shapes based on adaptive_shapes.jsonl.
- Fix RUN_ID unbound variable in resume mode.
- Fix jq query to use -s (slurp) for jsonl files.
- Add resume skip logic to DRY_RUN mode as well.
- Rename DSL -> OSL across all adaptive benchmark files for consistency:
  - scripts/common/adaptive_bench_lib.sh
  - scripts/common/adaptive_concurrency.py
  - experiments/dsv4_h200_vllm_tp_dp_matrix/adaptive_config.env
  - experiments/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency.sh
  - experiments/dsv4_h200_sglang_tp_dp_matrix/adaptive_config.env
  - experiments/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency.sh
  - experiments/ADAPTIVE_CONCURRENCY_USAGE.md
2026-07-14 10:41:50 +00:00

3.4 KiB
Raw Blame History

自适应并发 Benchmark 使用说明

这套脚本对每个固定的 (TP, DP, ISL, OSL) 依次测试 C=1,2,4,8,...,直到 Total TPS 连续两次增长不足 2%,或达到并发上限、 发生 OOM。每个正式测点发送 C * 5 个请求,并先用相同并发 C warm-up。

1. 进入目录

vLLM

cd /data3/yy/sskj/experiments/dsv4_h200_vllm_tp_dp_matrix

SGLang

cd /data3/yy/sskj/experiments/dsv4_h200_sglang_tp_dp_matrix

两个目录的入口都是:

bash run_adaptive_concurrency.sh

2. 先 dry-run

只打印 TP/DP、ISL/OSL 和并发搜索计划,不加载模型:

DRY_RUN=1 bash run_adaptive_concurrency.sh

3. 单组合 smoke

只测 TP=8, DP=1, ISL=1K, OSL=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 \
RESULT_BASE=/data3/yy/sskj_adaptive_results/smoke \
bash run_adaptive_concurrency.sh

4. 正式运行

长任务放进 tmux。vLLM 示例:

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 示例:

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"

查看任务:

tmux ls
tmux attach -t vllm-adaptive
tmux attach -t sglang-adaptive

从 tmux 退出但保持任务运行:按 Ctrl-b,松开,再按 d

5. 常用覆盖参数

无需修改脚本,可以把变量写在命令前:

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_PORTSGLang 端口用 SGLANG_PORT
  • TP_LIST="8" 只跑 TP=8DP 使用 config.env 中对应的 TP/DP 组合。
  • ISL_LIST="1024 4096"OSL_LIST="128 256" 用来筛选长度。
  • GRID_LIMIT=1 表示每组 TP/DP 只跑一个 ISL/OSL shape。
  • BENCH_WARMUP_MAX_REQUESTS=0 表示每个测点用完整并发 C warm-up正数表示上限。
  • 正式基线保持 BENCH_DATASET_NAME=randomRANDOM_RANGE_RATIO=1.0
  • random-ids 只用于检查链路,不与正式 ShareGPT-backed 结果混用。

换机器或模型时,至少检查 MODEL_PATHDATASET_PATH、Docker 镜像、GPU 编号、 端口、模型最大上下文和显存参数。需要永久修改时再编辑对应目录的 config.env

6. 结果

每次运行在 ${RESULT_BASE}/${RUN_ID}/ 下生成:

adaptive_points.csv       每个并发测点的 TPS、TTFT、TPOT 等
adaptive_summary.csv      每个 ISL/OSL/TP/DP 的饱和并发和最佳 TPS 并发
adaptive_summary.md       可直接阅读的汇总表
run_manifest.json         本次模型、数据集和搜索参数
logs/                     编排与服务日志
tp*_dp*/raw_outputs/      sglang.bench_serving 原始 JSON
tp*_dp*/gpu_logs/         nvidia-smi 采样

快速查看:

column -s, -t adaptive_summary.csv | less -S
tail -f logs/orchestrator.log