# 自适应并发 Benchmark 使用说明 这套脚本对每个固定的 `(TP, DP, ISL, OSL)` 依次测试 `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/OSL 和并发搜索计划,不加载模型: ```bash DRY_RUN=1 bash run_adaptive_concurrency.sh ``` ## 3. 单组合 smoke 只测 `TP=8, DP=1, ISL=1K, OSL=128`,并发搜索到 8: ```bash 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 示例: ```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"`、`OSL_LIST="128 256"` 用来筛选长度。 - `GRID_LIMIT=1` 表示每组 TP/DP 只跑一个 ISL/OSL 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/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 采样 ``` 快速查看: ```bash column -s, -t adaptive_summary.csv | less -S tail -f logs/orchestrator.log ```