- Create configuration file for the custom benchmark experiment. - Implement result parsing script to handle JSONL outputs from the benchmark. - Develop run script to orchestrate the benchmark execution, including server management and health checks. - Add server start script to launch a single vLLM service on all available GPUs.
dsv4_h200_vllm_tp8_custom_bench
目的
当 vLLM 使用 TP=8(Tensor Parallel = 8)部署时,单张 H200 上运行 1 个服务,独占全部 8 张 GPU:
| 服务 | 端口 | GPU 组 |
|---|---|---|
| 1 | 30005 | 0, 1, 2, 3, 4, 5, 6, 7 |
TP=8 提供最大的单服务 tensor-parallel 宽度,适合极高并发、大 batch 场景。本实验使用 自定义压测客户端 bench_client.py,直接调用 OpenAI /v1/chat/completions API。
与多服务方案的区别
| 特性 | TP=2 (4 服务) | TP=4 (2 服务) | TP=8 (1 服务) |
|---|---|---|---|
| 服务数量 | 4 | 2 | 1 |
| 每服务 GPU | 2 | 4 | 8 |
| 单服务吞吐 | 较低 | 中等 | 最高 |
| 集群总吞吐 | 相近 | 相近 | 相近 |
| 适用场景 | 低并发、低延迟 | 中等并发 | 极高并发、大 batch |
文件说明
| 文件 | 说明 |
|---|---|
bench_client.py |
自定义异步压测客户端(复用 TP=2/TP=4 版本) |
config.env |
实验配置(单服务、端口 30005) |
run_bench.sh |
编排脚本:启动 1 个服务 → 运行压测 → 解析结果 |
start_server.sh |
启动 1 个 vLLM TP=8 服务(占用全部 8 GPU) |
parse_results.py |
解析 bench_client.py 输出的 JSONL,生成 results.json + report.md |
快速运行
# 完整流程(自动启动服务、压测、生成报告)
bash experiments/dsv4_h200_vllm_tp8_custom_bench/run_bench.sh
# 跳过服务管理(已有服务在运行)
SKIP_MANAGE_SERVER=1 bash experiments/dsv4_h200_vllm_tp8_custom_bench/run_bench.sh
# 单独运行压测客户端(单服务)
python3 experiments/dsv4_h200_vllm_tp8_custom_bench/bench_client.py \
--host 127.0.0.1 --port 30005 \
--model deepseek-v4-flash \
--concurrency 32 --input-len 512 --output-len 256 --num-prompts 640 \
--output-file /tmp/test.jsonl
# 解析已有结果
python3 experiments/dsv4_h200_vllm_tp8_custom_bench/parse_results.py \
experiments/dsv4_h200_vllm_tp8_custom_bench/results/<RUN_ID>
场景设计
本实验覆盖了从 单并发 到 128 并发 的梯度,以及不同输入/输出长度组合:
| 并发 | 输入长度 | 输出长度 | 请求数 | 说明 |
|---|---|---|---|---|
| 1 | 512 | 256 | 20 | 单并发基线,测纯延迟 |
| 2 | 512 | 256 | 40 | 低并发 |
| 4 | 512 | 256 | 80 | 中低并发 |
| 8 | 512 | 256 | 160 | 中等并发 |
| 16 | 512 | 256 | 320 | 中高并发 |
| 32 | 512 | 256 | 640 | 高并发 |
| 64 | 512 | 256 | 1280 | 很高并发 |
| 128 | 512 | 256 | 2560 | 极限并发,测吞吐上限 |
| 1 | 2048 | 512 | 20 | 长输入基线 |
| 8 | 2048 | 512 | 160 | 长输入中并发 |
| 32 | 2048 | 512 | 640 | 长输入高并发 |
| 128 | 2048 | 512 | 2560 | 长输入极限并发 |
| 1 | 4096 | 1024 | 20 | 超长输入基线 |
| 8 | 4096 | 1024 | 160 | 超长输入中并发 |
| 32 | 4096 | 1024 | 640 | 超长输入高并发 |
| 128 | 4096 | 1024 | 2560 | 超长输入极限并发 |
输出格式
同 TP=2/TP=4 版本,输出 JSONL 原始数据、results.json 结构化结果、report.md 人类可读报告。
单独启动/停止服务
# 启动服务
bash experiments/dsv4_h200_vllm_tp8_custom_bench/start_server.sh
# 停止(run_bench.sh 会自动停止,但也可以手动)
port=30005
pid_file="experiments/dsv4_h200_vllm_tp8_custom_bench/server_port${port}.pid"
[[ -f "$pid_file" ]] && kill "$(cat "$pid_file")" 2>/dev/null || true
rm -f "$pid_file"
pkill -9 -f "vllm serve.*DeepSeek-V4-Flash" 2>/dev/null || true
注意事项
- 服务独占全部 8 张 GPU,确保无其他进程占用 GPU。
- 模型文件路径:
/data/models/DeepSeek-V4-Flash - TP=8 相比 TP=2/TP=4 单服务延迟最低,但无法通过多服务并行提升低并发下的集群利用率。
- 健康检查依赖
/health端点(vLLM 默认启用)。 - 如果服务频繁崩溃,检查 GPU 显存是否充足(OOM 是最常见原因)。