From 15b548953590f2408e82e15bee6559fbc1f51990 Mon Sep 17 00:00:00 2001 From: yy-fighting Date: Thu, 9 Jul 2026 10:01:51 +0000 Subject: [PATCH] dsv4_h200_vllm_tp_dp_matrix: use minimal official vLLM args, no EP, Y-only, exclude 1M --- .../tp2_dp4/results.json | 29 +++ .../tp2_dp4/scenarios.tsv | 166 ++++++++++++++++++ .../dsv4_h200_vllm_tp_dp_matrix/run_bench.sh | 50 ++---- .../start_vllm_dp.sh | 29 ++- 4 files changed, 222 insertions(+), 52 deletions(-) create mode 100644 experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/results.json create mode 100644 experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/scenarios.tsv diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/results.json b/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/results.json new file mode 100644 index 0000000..d101ad8 --- /dev/null +++ b/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/results.json @@ -0,0 +1,29 @@ +{ + "metadata": { + "experiment": "dsv4_h200_vllm_tp_dp_matrix_tp2_dp4", + "run_id": "20260709-095536_smoke", + "timestamp": "2026-07-09T09:55:43+00:00", + "model": "/data/models/DeepSeek-V4-Flash", + "backend": "vllm", + "engine": "vllm", + "hardware": "8x NVIDIA H200 143GB", + "accelerator": "NVIDIA H200", + "chip": "nvidia_h200", + "script": "experiments/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh", + "env": "/data/user1/yy/envs/vllm", + "git_commit": "ec85ef1", + "git_dirty": "dirty", + "description": "H200 vLLM TP×DP matrix for DeepSeek-V4-Flash" + }, + "config": { + "tp": 2, + "dp": 4, + "cuda_visible_devices": "0,1,2,3,4,5,6,7", + "backend": "vllm", + "server_start_script": "experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh", + "server_args_per_isl": { + "1024": "vllm serve /data/models/DeepSeek-V4-Flash --trust-remote-code --tensor-parallel-size 2 --kv-cache-dtype fp8 --max-model-len 5184 --max-num-seqs 136 --block-size 256 --gpu-memory-utilization 0.90 --tokenizer-mode deepseek_v4 --reasoning-parser deepseek_v4 --no-disable-hybrid-kv-cache-manager --disable-uvicorn-access-log --port 30030 --data-parallel-size 4 --data-parallel-size-local 4 --data-parallel-multi-port-external-lb " + } + }, + "scenarios": [] +} diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/scenarios.tsv b/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/scenarios.tsv new file mode 100644 index 0000000..a064e0a --- /dev/null +++ b/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-095536_smoke/tp2_dp4/scenarios.tsv @@ -0,0 +1,166 @@ +mark input_len output_len concurrency num_prompts +Y 1024 128 1 5 +Y 1024 128 22 110 +Y 1024 128 43 215 +Y 1024 128 65 325 +Y 1024 128 86 430 +Y 1024 128 107 535 +Y 1024 128 128 640 +Y 1024 256 1 5 +Y 1024 256 22 110 +Y 1024 256 43 215 +Y 1024 256 65 325 +Y 1024 256 86 430 +Y 1024 256 107 535 +Y 1024 256 128 640 +Y 1024 512 1 5 +Y 1024 512 22 110 +Y 1024 512 43 215 +Y 1024 512 65 325 +Y 1024 512 86 430 +Y 1024 512 107 535 +Y 1024 512 128 640 +Y 1024 1024 1 5 +Y 1024 1024 22 110 +Y 1024 1024 43 215 +Y 1024 1024 65 325 +Y 1024 1024 86 430 +Y 1024 1024 107 535 +Y 1024 1024 128 640 +Y 1024 2048 1 5 +Y 1024 2048 22 110 +Y 1024 2048 43 215 +Y 1024 2048 65 325 +Y 1024 2048 86 430 +Y 1024 2048 107 535 +Y 1024 2048 128 640 +Y 1024 4096 1 5 +Y 1024 4096 22 110 +Y 1024 4096 43 215 +Y 1024 4096 65 325 +Y 1024 4096 86 430 +Y 1024 4096 107 535 +Y 1024 4096 128 640 +Y 4096 128 1 5 +Y 4096 128 11 55 +Y 4096 128 22 110 +Y 4096 128 33 165 +Y 4096 128 43 215 +Y 4096 128 53 265 +Y 4096 128 64 320 +Y 4096 256 1 5 +Y 4096 256 11 55 +Y 4096 256 22 110 +Y 4096 256 33 165 +Y 4096 256 43 215 +Y 4096 256 53 265 +Y 4096 256 64 320 +Y 4096 512 1 5 +Y 4096 512 11 55 +Y 4096 512 22 110 +Y 4096 512 33 165 +Y 4096 512 43 215 +Y 4096 512 53 265 +Y 4096 512 64 320 +Y 4096 1024 1 5 +Y 4096 1024 11 55 +Y 4096 1024 22 110 +Y 4096 1024 33 165 +Y 4096 1024 43 215 +Y 4096 1024 53 265 +Y 4096 1024 64 320 +Y 4096 2048 1 5 +Y 4096 2048 11 55 +Y 4096 2048 22 110 +Y 4096 2048 33 165 +Y 4096 2048 43 215 +Y 4096 2048 53 265 +Y 4096 2048 64 320 +Y 4096 4096 1 5 +Y 4096 4096 11 55 +Y 4096 4096 22 110 +Y 4096 4096 33 165 +Y 4096 4096 43 215 +Y 4096 4096 53 265 +Y 4096 4096 64 320 +Y 16384 128 1 5 +Y 16384 128 6 30 +Y 16384 128 11 55 +Y 16384 128 17 85 +Y 16384 128 22 110 +Y 16384 128 27 135 +Y 16384 128 32 160 +Y 16384 256 1 5 +Y 16384 256 6 30 +Y 16384 256 11 55 +Y 16384 256 17 85 +Y 16384 256 22 110 +Y 16384 256 27 135 +Y 16384 256 32 160 +Y 16384 512 1 5 +Y 16384 512 6 30 +Y 16384 512 11 55 +Y 16384 512 17 85 +Y 16384 512 22 110 +Y 16384 512 27 135 +Y 16384 512 32 160 +Y 16384 1024 1 5 +Y 16384 1024 6 30 +Y 16384 1024 11 55 +Y 16384 1024 17 85 +Y 16384 1024 22 110 +Y 16384 1024 27 135 +Y 16384 1024 32 160 +Y 16384 2048 1 5 +Y 16384 2048 6 30 +Y 16384 2048 11 55 +Y 16384 2048 17 85 +Y 16384 2048 22 110 +Y 16384 2048 27 135 +Y 16384 2048 32 160 +Y 65536 128 1 5 +Y 65536 128 2 10 +Y 65536 128 3 15 +Y 65536 128 5 25 +Y 65536 128 6 30 +Y 65536 128 7 35 +Y 65536 128 8 40 +Y 65536 256 1 5 +Y 65536 256 2 10 +Y 65536 256 3 15 +Y 65536 256 5 25 +Y 65536 256 6 30 +Y 65536 256 7 35 +Y 65536 256 8 40 +Y 65536 512 1 5 +Y 65536 512 2 10 +Y 65536 512 3 15 +Y 65536 512 5 25 +Y 65536 512 6 30 +Y 65536 512 7 35 +Y 65536 512 8 40 +Y 65536 1024 1 5 +Y 65536 1024 2 10 +Y 65536 1024 3 15 +Y 65536 1024 5 25 +Y 65536 1024 6 30 +Y 65536 1024 7 35 +Y 65536 1024 8 40 +Y 131072 128 1 5 +Y 131072 128 2 10 +Y 131072 128 3 15 +Y 131072 128 4 20 +Y 131072 256 1 5 +Y 131072 256 2 10 +Y 131072 256 3 15 +Y 131072 256 4 20 +Y 131072 512 1 5 +Y 131072 512 2 10 +Y 131072 512 3 15 +Y 131072 512 4 20 +Y 262144 128 1 5 +Y 262144 128 2 10 +Y 262144 256 1 5 +Y 262144 256 2 10 +Y 524288 128 1 5 +Y 524288 128 2 10 diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh b/experiments/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh index 0df25b4..6e3ed6e 100755 --- a/experiments/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh +++ b/experiments/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh @@ -15,7 +15,7 @@ source "${SCRIPT_DIR}/config.env" RUN_ID="${RUN_ID:-$(date '+%Y%m%d-%H%M%S')}" RESULT_BASE="${SCRIPT_DIR}/results" MATRIX_FILE="${MATRIX_FILE:-${SCRIPT_DIR}/matrix.json}" -MATRIX_MODE="${MATRIX_MODE:-Y+P}" +MATRIX_MODE="${MATRIX_MODE:-Y}" SCENARIO_TIMEOUT_S="${SCENARIO_TIMEOUT_S:-1800}" GPU_MEM_SAMPLE_INTERVAL_S="${GPU_MEM_SAMPLE_INTERVAL_S:-1}" @@ -72,22 +72,14 @@ stop_server() { build_server_args() { local tp="$1" local dp="$2" - local max_model_len="$3" - local max_num_seqs="$4" local args=( "vllm serve" "$MODEL_PATH" --trust-remote-code - --tensor-parallel-size "$tp" --kv-cache-dtype fp8 - --max-model-len "$max_model_len" - --max-num-seqs "$max_num_seqs" --block-size 256 - --gpu-memory-utilization 0.90 - --tokenizer-mode deepseek_v4 - --reasoning-parser deepseek_v4 - --no-disable-hybrid-kv-cache-manager - --disable-uvicorn-access-log + --tensor-parallel-size "$tp" + --no-enable-flashinfer-autotune --port "$VLLM_PORT" ) if [[ "$dp" -gt 1 ]]; then @@ -103,11 +95,9 @@ build_server_args() { start_server() { local tp="$1" local dp="$2" - local max_model_len="$3" - local max_num_seqs="$4" - log "starting vllm server tp=${tp} dp=${dp} max_model_len=${max_model_len} max_num_seqs=${max_num_seqs}" - bash "${SCRIPT_DIR}/start_vllm_dp.sh" "$tp" "$dp" "$max_model_len" "$max_num_seqs" \ + log "starting vllm server tp=${tp} dp=${dp}" + bash "${SCRIPT_DIR}/start_vllm_dp.sh" "$tp" "$dp" \ >> "${log_dir_global}/vllm_tp${tp}_dp${dp}.server.outer.log" 2>&1 local hport @@ -244,22 +234,23 @@ run_parallel_config() { "$VENV_VLLM" \ "H200 vLLM TP×DP matrix for DeepSeek-V4-Flash" - # Embed static config now; server_args will be updated per ISL group. - jq --arg tp "$tp" --arg dp "$dp" --arg cuda "$CUDA_VISIBLE_DEVICES" \ + # Embed static config and the exact server command line used. + local server_args_str + server_args_str="$(build_server_args "$tp" "$dp")" + jq --arg tp "$tp" --arg dp "$dp" --arg cuda "$CUDA_VISIBLE_DEVICES" --arg args "$server_args_str" \ '.config = { "tp": ($tp | tonumber), "dp": ($dp | tonumber), "cuda_visible_devices": $cuda, "backend": "vllm", - "server_start_script": "experiments/'${EXPERIMENT_NAME}'/start_vllm_dp.sh" + "server_start_script": "experiments/'${EXPERIMENT_NAME}'/start_vllm_dp.sh", + "server_args": $args }' "${result_root}/results.json" > "${result_root}/results.json.tmp" && \ mv "${result_root}/results.json.tmp" "${result_root}/results.json" - # Group scenarios by input_len. We start one server per input_len with a - # max_model_len large enough for the biggest output_len in that group. + # Group scenarios by input_len. We restart the server for each ISL to keep + # memory state isolated and to warm up per context length. local current_isl="" - local max_dsl_for_isl=0 - local max_conc_for_isl=0 local group_started=false tail -n +2 "$scenario_tsv" | while IFS=$'\t' read -r mark isl dsl conc num; do @@ -269,28 +260,15 @@ run_parallel_config() { stop_server "$tp" "$dp" fi current_isl="$isl" - max_dsl_for_isl="$(awk -F'\t' -v isl="$isl" '$2==isl {if($3>max) max=$3} END{print max+0}' "$scenario_tsv")" - max_conc_for_isl="$(awk -F'\t' -v isl="$isl" '$2==isl {if($4>max) max=$4} END{print max+0}' "$scenario_tsv")" - - local max_model_len=$((isl + max_dsl_for_isl + 64)) - local max_num_seqs=$((max_conc_for_isl + 8)) stop_server "$tp" "$dp" - if ! start_server "$tp" "$dp" "$max_model_len" "$max_num_seqs"; then + if ! start_server "$tp" "$dp"; then log "ERROR: ${config_label} failed to start for ISL=${isl}; skipping this group" group_started=false continue fi group_started=true - # Update metadata with the actual server args for this ISL group. - local server_args_str - server_args_str="$(build_server_args "$tp" "$dp" "$max_model_len" "$max_num_seqs")" - jq --arg isl "$isl" --arg args "$server_args_str" \ - '.config.server_args_per_isl += {($isl): $args}' \ - "${result_root}/results.json" > "${result_root}/results.json.tmp" && \ - mv "${result_root}/results.json.tmp" "${result_root}/results.json" - # Warmup with the shortest output for this ISL. run_warmup "$tp" "$dp" "$isl" 128 fi diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh b/experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh index 2ae2fee..a4e52e0 100755 --- a/experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh +++ b/experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh @@ -1,12 +1,18 @@ #!/usr/bin/env bash # Start vLLM server for a given TP×DP configuration. -# Usage: start_vllm_dp.sh +# Usage: start_vllm_dp.sh +# +# Uses the minimal argument set from the official DeepSeek-V4-Flash recipe: +# --trust-remote-code +# --kv-cache-dtype fp8 +# --block-size 256 +# --tensor-parallel-size +# --no-enable-flashinfer-autotune +# plus DP-related flags when DP > 1. set -e TP="${1}" DP="${2}" -MAX_MODEL_LEN="${3}" -MAX_NUM_SEQS="${4}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=/dev/null @@ -26,20 +32,13 @@ PID_FILE="/data/user1/yy/${EXPERIMENT}_vllm_tp${TP}_dp${DP}.pid" rm -f "$PID_FILE" -# Build the base command as an array. SERVER_ARGS=( vllm serve "$MODEL_PATH" --trust-remote-code - --tensor-parallel-size "$TP" --kv-cache-dtype fp8 - --max-model-len "$MAX_MODEL_LEN" - --max-num-seqs "$MAX_NUM_SEQS" --block-size 256 - --gpu-memory-utilization 0.90 - --tokenizer-mode deepseek_v4 - --reasoning-parser deepseek_v4 - --no-disable-hybrid-kv-cache-manager - --disable-uvicorn-access-log + --tensor-parallel-size "$TP" + --no-enable-flashinfer-autotune --port "$VLLM_PORT" ) @@ -49,9 +48,7 @@ if [[ "$DP" -gt 1 ]]; then --data-parallel-size-local "$DP" --data-parallel-multi-port-external-lb ) - # vLLM 0.24.0 hard-codes the DP supervisor port to 9256 in - # entrypoints/openai/cli_args.py. The bench client and health checks must - # target that port when DP > 1. + # vLLM 0.24.0 hard-codes the DP supervisor port to 9256. HEALTH_PORT="$VLLM_DP_SUPERVISOR_PORT" else HEALTH_PORT="$VLLM_PORT" @@ -59,7 +56,7 @@ fi SERVER_ARGS_STR="${SERVER_ARGS[*]}" -echo "=== Starting vLLM server (TP=${TP}, DP=${DP}, max_model_len=${MAX_MODEL_LEN}, max_num_seqs=${MAX_NUM_SEQS}) ===" +echo "=== Starting vLLM server (TP=${TP}, DP=${DP}) ===" echo "Model: $MODEL_PATH" echo "Health port: $HEALTH_PORT" echo "Command: $SERVER_ARGS_STR"