# 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 # 完整流程(自动启动服务、压测、生成报告) 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/ ``` ## 场景设计 本实验覆盖了从 **单并发** 到 **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 # 启动服务 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 是最常见原因)。