dsv4_h200_vllm_tp_dp_matrix: use vLLM internal DP LB, drop proxy/supervisor
This commit is contained in:
parent
59dbadb110
commit
329d4c3975
@ -10,11 +10,6 @@ MODEL_PATH="/data/models/DeepSeek-V4-Flash"
|
|||||||
SERVED_MODEL_NAME="deepseek-v4-flash"
|
SERVED_MODEL_NAME="deepseek-v4-flash"
|
||||||
|
|
||||||
VLLM_PORT="${VLLM_PORT:-30030}"
|
VLLM_PORT="${VLLM_PORT:-30030}"
|
||||||
# vLLM 0.24.0 multi-port DP supervisor listens on this hard-coded port.
|
|
||||||
VLLM_DP_SUPERVISOR_PORT="${VLLM_DP_SUPERVISOR_PORT:-9256}"
|
|
||||||
# The bench client does NOT talk to the supervisor directly; we put a
|
|
||||||
# round-robin proxy in front of the DP child servers.
|
|
||||||
VLLM_DP_PROXY_PORT="${VLLM_DP_PROXY_PORT:-30040}"
|
|
||||||
|
|
||||||
VENV_VLLM="${VENV_VLLM:-/data/user1/yy/envs/vllm}"
|
VENV_VLLM="${VENV_VLLM:-/data/user1/yy/envs/vllm}"
|
||||||
VENV_SGLANG="${VENV_SGLANG:-/data/user1/yy/envs/sglang}"
|
VENV_SGLANG="${VENV_SGLANG:-/data/user1/yy/envs/sglang}"
|
||||||
|
|||||||
@ -32,44 +32,14 @@ log "matrix_mode=${MATRIX_MODE} matrix_file=${MATRIX_FILE}"
|
|||||||
# Helpers
|
# Helpers
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
# Port used by run_bench to check the vLLM server (supervisor for DP>1).
|
|
||||||
server_health_port() {
|
|
||||||
local dp="$1"
|
|
||||||
if [[ "$dp" -gt 1 ]]; then
|
|
||||||
echo "$VLLM_DP_SUPERVISOR_PORT"
|
|
||||||
else
|
|
||||||
echo "$VLLM_PORT"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Port used by the benchmark client (proxy for DP>1).
|
|
||||||
bench_port() {
|
|
||||||
local dp="$1"
|
|
||||||
if [[ "$dp" -gt 1 ]]; then
|
|
||||||
echo "$VLLM_DP_PROXY_PORT"
|
|
||||||
else
|
|
||||||
echo "$VLLM_PORT"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
is_server_healthy() {
|
is_server_healthy() {
|
||||||
local port="$1"
|
curl --fail --silent --show-error --max-time 5 "http://127.0.0.1:${VLLM_PORT}/health" >/dev/null 2>&1
|
||||||
curl --fail --silent --show-error --max-time 5 "http://127.0.0.1:${port}/health" >/dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
is_proxy_healthy() {
|
|
||||||
local port="$1"
|
|
||||||
# The bench client uses /v1/models as the ready signal, so the proxy must
|
|
||||||
# forward it successfully.
|
|
||||||
curl --fail --silent --show-error --max-time 5 "http://127.0.0.1:${port}/v1/models" >/dev/null 2>&1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_server() {
|
stop_server() {
|
||||||
local tp="$1"
|
local tp="$1"
|
||||||
local dp="$2"
|
local dp="$2"
|
||||||
|
|
||||||
stop_proxy "$tp" "$dp"
|
|
||||||
|
|
||||||
local pid_file="/data/user1/yy/${EXPERIMENT}_vllm_tp${tp}_dp${dp}.pid"
|
local pid_file="/data/user1/yy/${EXPERIMENT}_vllm_tp${tp}_dp${dp}.pid"
|
||||||
if [[ -f "$pid_file" ]]; then
|
if [[ -f "$pid_file" ]]; then
|
||||||
local pid
|
local pid
|
||||||
@ -89,74 +59,6 @@ stop_server() {
|
|||||||
sleep 2
|
sleep 2
|
||||||
}
|
}
|
||||||
|
|
||||||
start_proxy() {
|
|
||||||
local tp="$1"
|
|
||||||
local dp="$2"
|
|
||||||
if [[ "$dp" -le 1 ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
local proxy_port="$VLLM_DP_PROXY_PORT"
|
|
||||||
local base_port="$VLLM_PORT"
|
|
||||||
local backends=""
|
|
||||||
for ((r = 0; r < dp; r++)); do
|
|
||||||
backends="${backends:+,}$((base_port + r))"
|
|
||||||
done
|
|
||||||
|
|
||||||
local pid_file="/data/user1/yy/${EXPERIMENT}_proxy_tp${tp}_dp${dp}.pid"
|
|
||||||
rm -f "$pid_file"
|
|
||||||
|
|
||||||
log "starting DP proxy on port ${proxy_port} -> backends ${backends}"
|
|
||||||
nohup "${VENV_VLLM}/bin/python" "${SCRIPT_DIR}/../../scripts/common/dp_proxy.py" \
|
|
||||||
--port "$proxy_port" \
|
|
||||||
--backends "$backends" \
|
|
||||||
--timeout 300 \
|
|
||||||
> "${log_dir_global}/vllm_tp${tp}_dp${dp}.proxy.log" 2>&1 &
|
|
||||||
|
|
||||||
local pid=$!
|
|
||||||
echo $pid > "$pid_file"
|
|
||||||
|
|
||||||
for i in $(seq 1 60); do
|
|
||||||
if is_proxy_healthy "$proxy_port"; then
|
|
||||||
log "DP proxy is ready on port ${proxy_port}"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
if ! kill -0 "$pid" 2>/dev/null; then
|
|
||||||
log "ERROR: DP proxy exited early"
|
|
||||||
tail -100 "${log_dir_global}/vllm_tp${tp}_dp${dp}.proxy.log"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
log "ERROR: DP proxy not healthy after 60s"
|
|
||||||
tail -100 "${log_dir_global}/vllm_tp${tp}_dp${dp}.proxy.log"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
stop_proxy() {
|
|
||||||
local tp="$1"
|
|
||||||
local dp="$2"
|
|
||||||
if [[ "$dp" -le 1 ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
local pid_file="/data/user1/yy/${EXPERIMENT}_proxy_tp${tp}_dp${dp}.pid"
|
|
||||||
if [[ -f "$pid_file" ]]; then
|
|
||||||
local pid
|
|
||||||
pid="$(cat "$pid_file")"
|
|
||||||
if kill -0 "$pid" 2>/dev/null; then
|
|
||||||
log "stopping DP proxy pid=${pid}"
|
|
||||||
kill "$pid" 2>/dev/null || true
|
|
||||||
sleep 2
|
|
||||||
kill -9 "$pid" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
rm -f "$pid_file"
|
|
||||||
fi
|
|
||||||
pkill -9 -f "dp_proxy.py.*--port ${VLLM_DP_PROXY_PORT}" 2>/dev/null || true
|
|
||||||
sleep 1
|
|
||||||
}
|
|
||||||
|
|
||||||
build_server_args() {
|
build_server_args() {
|
||||||
local tp="$1"
|
local tp="$1"
|
||||||
local dp="$2"
|
local dp="$2"
|
||||||
@ -173,8 +75,6 @@ build_server_args() {
|
|||||||
if [[ "$dp" -gt 1 ]]; then
|
if [[ "$dp" -gt 1 ]]; then
|
||||||
args+=(
|
args+=(
|
||||||
--data-parallel-size "$dp"
|
--data-parallel-size "$dp"
|
||||||
--data-parallel-size-local "$dp"
|
|
||||||
--data-parallel-multi-port-external-lb
|
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
printf '%s ' "${args[@]}"
|
printf '%s ' "${args[@]}"
|
||||||
@ -188,20 +88,11 @@ start_server() {
|
|||||||
bash "${SCRIPT_DIR}/start_vllm_dp.sh" "$tp" "$dp" \
|
bash "${SCRIPT_DIR}/start_vllm_dp.sh" "$tp" "$dp" \
|
||||||
>> "${log_dir_global}/vllm_tp${tp}_dp${dp}.server.outer.log" 2>&1
|
>> "${log_dir_global}/vllm_tp${tp}_dp${dp}.server.outer.log" 2>&1
|
||||||
|
|
||||||
local hport
|
if ! is_server_healthy; then
|
||||||
hport="$(server_health_port "$dp")"
|
log "error: vllm server tp=${tp} dp=${dp} failed health check on port ${VLLM_PORT}"
|
||||||
if ! is_server_healthy "$hport"; then
|
|
||||||
log "error: vllm server tp=${tp} dp=${dp} failed health check on port ${hport}"
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
log "vllm server tp=${tp} dp=${dp} is healthy on port ${hport}"
|
log "vllm server tp=${tp} dp=${dp} is healthy on port ${VLLM_PORT}"
|
||||||
|
|
||||||
if [[ "$dp" -gt 1 ]]; then
|
|
||||||
if ! start_proxy "$tp" "$dp"; then
|
|
||||||
log "error: failed to start DP proxy for tp=${tp} dp=${dp}"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
run_warmup() {
|
run_warmup() {
|
||||||
@ -209,14 +100,12 @@ run_warmup() {
|
|||||||
local dp="$2"
|
local dp="$2"
|
||||||
local input_len="$3"
|
local input_len="$3"
|
||||||
local output_len="$4"
|
local output_len="$4"
|
||||||
local bport
|
|
||||||
bport="$(bench_port "$dp")"
|
|
||||||
|
|
||||||
log "warming up tp=${tp} dp=${dp} (input=${input_len}, output=${output_len}, num=1)"
|
log "warming up tp=${tp} dp=${dp} (input=${input_len}, output=${output_len}, num=1)"
|
||||||
"$PYTHON" "${SCRIPT_DIR}/../../scripts/common/warmup.py" \
|
"$PYTHON" "${SCRIPT_DIR}/../../scripts/common/warmup.py" \
|
||||||
--backend vllm \
|
--backend vllm \
|
||||||
--host 127.0.0.1 \
|
--host 127.0.0.1 \
|
||||||
--port "$bport" \
|
--port "$VLLM_PORT" \
|
||||||
--input-len "$input_len" \
|
--input-len "$input_len" \
|
||||||
--output-len "$output_len" \
|
--output-len "$output_len" \
|
||||||
--num 1 \
|
--num 1 \
|
||||||
@ -393,7 +282,7 @@ run_parallel_config() {
|
|||||||
"$PYTHON" -m sglang.bench_serving \
|
"$PYTHON" -m sglang.bench_serving \
|
||||||
--backend vllm \
|
--backend vllm \
|
||||||
--host 127.0.0.1 \
|
--host 127.0.0.1 \
|
||||||
--port "$(bench_port "$dp")" \
|
--port "$VLLM_PORT" \
|
||||||
--dataset-name random \
|
--dataset-name random \
|
||||||
--random-input-len "$isl" \
|
--random-input-len "$isl" \
|
||||||
--random-output-len "$dsl" \
|
--random-output-len "$dsl" \
|
||||||
|
|||||||
@ -8,7 +8,8 @@
|
|||||||
# --block-size 256
|
# --block-size 256
|
||||||
# --tensor-parallel-size <TP>
|
# --tensor-parallel-size <TP>
|
||||||
# --no-enable-flashinfer-autotune
|
# --no-enable-flashinfer-autotune
|
||||||
# plus DP-related flags when DP > 1.
|
# When DP > 1, only --data-parallel-size is added so vLLM uses its internal
|
||||||
|
# DP load balancer (single API server, single port).
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
TP="${1}"
|
TP="${1}"
|
||||||
@ -45,20 +46,14 @@ SERVER_ARGS=(
|
|||||||
if [[ "$DP" -gt 1 ]]; then
|
if [[ "$DP" -gt 1 ]]; then
|
||||||
SERVER_ARGS+=(
|
SERVER_ARGS+=(
|
||||||
--data-parallel-size "$DP"
|
--data-parallel-size "$DP"
|
||||||
--data-parallel-size-local "$DP"
|
|
||||||
--data-parallel-multi-port-external-lb
|
|
||||||
)
|
)
|
||||||
# vLLM 0.24.0 hard-codes the DP supervisor port to 9256.
|
|
||||||
HEALTH_PORT="$VLLM_DP_SUPERVISOR_PORT"
|
|
||||||
else
|
|
||||||
HEALTH_PORT="$VLLM_PORT"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SERVER_ARGS_STR="${SERVER_ARGS[*]}"
|
SERVER_ARGS_STR="${SERVER_ARGS[*]}"
|
||||||
|
|
||||||
echo "=== Starting vLLM server (TP=${TP}, DP=${DP}) ==="
|
echo "=== Starting vLLM server (TP=${TP}, DP=${DP}) ==="
|
||||||
echo "Model: $MODEL_PATH"
|
echo "Model: $MODEL_PATH"
|
||||||
echo "Health port: $HEALTH_PORT"
|
echo "Port: $VLLM_PORT"
|
||||||
echo "Command: $SERVER_ARGS_STR"
|
echo "Command: $SERVER_ARGS_STR"
|
||||||
echo "Log: $LOG"
|
echo "Log: $LOG"
|
||||||
|
|
||||||
@ -67,11 +62,11 @@ nohup "${SERVER_ARGS[@]}" > "$LOG" 2>&1 &
|
|||||||
PID=$!
|
PID=$!
|
||||||
echo $PID > "$PID_FILE"
|
echo $PID > "$PID_FILE"
|
||||||
echo "PID: $PID"
|
echo "PID: $PID"
|
||||||
echo "Waiting for health on port ${HEALTH_PORT}..."
|
echo "Waiting for health on port ${VLLM_PORT}..."
|
||||||
|
|
||||||
for i in $(seq 1 240); do
|
for i in $(seq 1 240); do
|
||||||
if curl --fail --silent --show-error --max-time 5 "http://127.0.0.1:${HEALTH_PORT}/health" >/dev/null 2>&1; then
|
if curl --fail --silent --show-error --max-time 5 "http://127.0.0.1:${VLLM_PORT}/health" >/dev/null 2>&1; then
|
||||||
echo "vLLM server is ready at http://127.0.0.1:${HEALTH_PORT}"
|
echo "vLLM server is ready at http://127.0.0.1:${VLLM_PORT}"
|
||||||
echo "Log: $LOG"
|
echo "Log: $LOG"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user