sglang tp_dp_matrix: run SGLang server/client in Docker on H200
- config.env: switch to /data/models/DeepSeek-V4-Flash, USE_DOCKER=1, CONTEXT_LENGTH=1M, CONCURRENCY_SAMPLES=2, add DATASET_PATH. - start_sglang_docker.sh: add --ipc host --shm-size 16g for NCCL. - start_sglang_dp.sh: use --model-path for Docker CLI. - run_bench.sh: mount dataset into client container and pass --dataset-path to avoid HF download on offline nodes.
This commit is contained in:
parent
db419e17b8
commit
7852dd2040
@ -1,4 +1,4 @@
|
|||||||
# TP×DP matrix experiment for DeepSeek-V4-Flash on H200 (8 GPUs) using SGLang Docker.
|
# TP×DP matrix experiment for DeepSeek-V4-Flash on H200 (8 GPUs) using SGLang.
|
||||||
# Tests SGLang with three parallel configurations:
|
# Tests SGLang with three parallel configurations:
|
||||||
# TP=2, DP=4 -> 2 GPUs per replica, 4 replicas
|
# TP=2, DP=4 -> 2 GPUs per replica, 4 replicas
|
||||||
# TP=4, DP=2 -> 4 GPUs per replica, 2 replicas
|
# TP=4, DP=2 -> 4 GPUs per replica, 2 replicas
|
||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
EXPERIMENT="dsv4_h200_sglang_tp_dp_matrix"
|
EXPERIMENT="dsv4_h200_sglang_tp_dp_matrix"
|
||||||
MODEL_NAME="DeepSeek-V4-Flash"
|
MODEL_NAME="DeepSeek-V4-Flash"
|
||||||
MODEL_PATH="/data3/hf_models/DeepSeek-V4-Flash"
|
MODEL_PATH="/data/models/DeepSeek-V4-Flash"
|
||||||
SERVED_MODEL_NAME="deepseek-v4-flash"
|
SERVED_MODEL_NAME="deepseek-v4-flash"
|
||||||
|
|
||||||
SGLANG_PORT="${SGLANG_PORT:-30031}"
|
SGLANG_PORT="${SGLANG_PORT:-30031}"
|
||||||
@ -16,9 +16,7 @@ SGLANG_PORT="${SGLANG_PORT:-30031}"
|
|||||||
# does not exist on the host.
|
# does not exist on the host.
|
||||||
VENV_CLIENT="${VENV_CLIENT:-/data/user1/yy/envs/sglang}"
|
VENV_CLIENT="${VENV_CLIENT:-/data/user1/yy/envs/sglang}"
|
||||||
|
|
||||||
# When USE_DOCKER_CLIENT=1, the benchmark client (sglang.bench_serving) is run
|
# Run the benchmark client natively (0) or inside Docker (1).
|
||||||
# inside the same SGLang Docker image used for the server. This avoids requiring
|
|
||||||
# a native sglang installation on the host.
|
|
||||||
USE_DOCKER_CLIENT="${USE_DOCKER_CLIENT:-1}"
|
USE_DOCKER_CLIENT="${USE_DOCKER_CLIENT:-1}"
|
||||||
|
|
||||||
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3,4,5,6,7}"
|
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES:-0,1,2,3,4,5,6,7}"
|
||||||
@ -35,22 +33,28 @@ declare -a PARALLEL_CONFIGS=(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# SGLang server settings
|
# SGLang server settings
|
||||||
CONTEXT_LENGTH="${CONTEXT_LENGTH:-65536}"
|
CONTEXT_LENGTH="${CONTEXT_LENGTH:-1048576}"
|
||||||
MAX_RUNNING_REQUESTS="${MAX_RUNNING_REQUESTS:-64}"
|
MAX_RUNNING_REQUESTS="${MAX_RUNNING_REQUESTS:-128}"
|
||||||
MEM_FRACTION_STATIC="${MEM_FRACTION_STATIC:-0.88}"
|
MEM_FRACTION_STATIC="${MEM_FRACTION_STATIC:-0.88}"
|
||||||
MOE_RUNNER_BACKEND="${MOE_RUNNER_BACKEND:-marlin}"
|
MOE_RUNNER_BACKEND="${MOE_RUNNER_BACKEND:-marlin}"
|
||||||
|
|
||||||
# Docker deployment switch. SGLang is launched via Docker using the image below.
|
# Deployment switch. 0 = native sglang venv, 1 = Docker.
|
||||||
USE_DOCKER="${USE_DOCKER:-1}"
|
USE_DOCKER="${USE_DOCKER:-1}"
|
||||||
DOCKER_IMAGE="${DOCKER_IMAGE:-lmsysorg/sglang:latest}"
|
DOCKER_IMAGE="${DOCKER_IMAGE:-lmsysorg/sglang:latest}"
|
||||||
|
|
||||||
|
# Dataset used by sglang.bench_serving --dataset-name random.
|
||||||
|
# The random sampler needs a ShareGPT-style JSON file locally; it falls back to
|
||||||
|
# downloading from HuggingFace, which usually fails on offline H200 nodes.
|
||||||
|
DATASET_PATH="${DATASET_PATH:-/data/user1/yy/datasets/ShareGPT_V4.3_unfiltered_cleaned_split.json}"
|
||||||
|
|
||||||
# Matrix and concurrency rules are defined in matrix.json by default.
|
# Matrix and concurrency rules are defined in matrix.json by default.
|
||||||
MATRIX_FILE="${MATRIX_FILE:-${SCRIPT_DIR:-.}/matrix.json}"
|
MATRIX_FILE="${MATRIX_FILE:-${SCRIPT_DIR:-.}/matrix.json}"
|
||||||
MATRIX_MODE="${MATRIX_MODE:-Y}"
|
MATRIX_MODE="${MATRIX_MODE:-Y}"
|
||||||
|
|
||||||
# Sampling density for concurrency. 0 means use the default heuristic in
|
# Sampling density for concurrency.
|
||||||
# generate_scenarios.py (6-8 points, or all integers when range is small).
|
# 0 = use the default heuristic in generate_scenarios.py (6-8 points).
|
||||||
CONCURRENCY_SAMPLES="${CONCURRENCY_SAMPLES:-0}"
|
# 2 = only test the low and high endpoints.
|
||||||
|
export CONCURRENCY_SAMPLES="${CONCURRENCY_SAMPLES:-2}"
|
||||||
|
|
||||||
# Per-scenario timeout to avoid hangs (seconds).
|
# Per-scenario timeout to avoid hangs (seconds).
|
||||||
SCENARIO_TIMEOUT_S="${SCENARIO_TIMEOUT_S:-1800}"
|
SCENARIO_TIMEOUT_S="${SCENARIO_TIMEOUT_S:-1800}"
|
||||||
|
|||||||
@ -123,6 +123,7 @@ run_bench_serving() {
|
|||||||
docker run --rm \
|
docker run --rm \
|
||||||
--network host \
|
--network host \
|
||||||
-v "${MODEL_PATH}:${MODEL_PATH}:ro" \
|
-v "${MODEL_PATH}:${MODEL_PATH}:ro" \
|
||||||
|
-v "${DATASET_PATH}:${DATASET_PATH}:ro" \
|
||||||
-v "${RESULT_BASE}:${RESULT_BASE}" \
|
-v "${RESULT_BASE}:${RESULT_BASE}" \
|
||||||
-e PYTHONUNBUFFERED=1 \
|
-e PYTHONUNBUFFERED=1 \
|
||||||
"${DOCKER_IMAGE}" \
|
"${DOCKER_IMAGE}" \
|
||||||
@ -142,6 +143,7 @@ run_warmup() {
|
|||||||
--host 127.0.0.1 \
|
--host 127.0.0.1 \
|
||||||
--port "$SGLANG_PORT" \
|
--port "$SGLANG_PORT" \
|
||||||
--dataset-name random \
|
--dataset-name random \
|
||||||
|
--dataset-path "$DATASET_PATH" \
|
||||||
--random-input-len "$input_len" \
|
--random-input-len "$input_len" \
|
||||||
--random-output-len "$output_len" \
|
--random-output-len "$output_len" \
|
||||||
--num-prompts 1 \
|
--num-prompts 1 \
|
||||||
@ -419,6 +421,7 @@ run_parallel_config() {
|
|||||||
--host 127.0.0.1 \
|
--host 127.0.0.1 \
|
||||||
--port "$SGLANG_PORT" \
|
--port "$SGLANG_PORT" \
|
||||||
--dataset-name random \
|
--dataset-name random \
|
||||||
|
--dataset-path "$DATASET_PATH" \
|
||||||
--random-input-len "$isl" \
|
--random-input-len "$isl" \
|
||||||
--random-output-len "$dsl" \
|
--random-output-len "$dsl" \
|
||||||
--num-prompts "$num" \
|
--num-prompts "$num" \
|
||||||
|
|||||||
@ -28,7 +28,8 @@ rm -f "$PID_FILE"
|
|||||||
docker rm -f "$NAME" >/dev/null 2>&1 || true
|
docker rm -f "$NAME" >/dev/null 2>&1 || true
|
||||||
|
|
||||||
SERVER_ARGS=(
|
SERVER_ARGS=(
|
||||||
serve "$MODEL_PATH"
|
serve
|
||||||
|
--model-path "$MODEL_PATH"
|
||||||
--trust-remote-code
|
--trust-remote-code
|
||||||
--tp-size "$TP"
|
--tp-size "$TP"
|
||||||
--moe-runner-backend "$MOE_RUNNER_BACKEND"
|
--moe-runner-backend "$MOE_RUNNER_BACKEND"
|
||||||
@ -61,6 +62,8 @@ echo "Log: $LOG"
|
|||||||
nohup docker run --rm \
|
nohup docker run --rm \
|
||||||
--name "$NAME" \
|
--name "$NAME" \
|
||||||
--gpus all \
|
--gpus all \
|
||||||
|
--ipc host \
|
||||||
|
--shm-size 16g \
|
||||||
--entrypoint sglang \
|
--entrypoint sglang \
|
||||||
-p "${PORT}:${PORT}" \
|
-p "${PORT}:${PORT}" \
|
||||||
-v "${MODEL_PATH}:${MODEL_PATH}:ro" \
|
-v "${MODEL_PATH}:${MODEL_PATH}:ro" \
|
||||||
|
|||||||
@ -33,7 +33,8 @@ PID_FILE="${RUNTIME_BASE}/${EXPERIMENT}_sglang_tp${TP}_dp${DP}.pid"
|
|||||||
rm -f "$PID_FILE"
|
rm -f "$PID_FILE"
|
||||||
|
|
||||||
SERVER_ARGS=(
|
SERVER_ARGS=(
|
||||||
sglang serve "$MODEL_PATH"
|
sglang serve
|
||||||
|
--model-path "$MODEL_PATH"
|
||||||
--trust-remote-code
|
--trust-remote-code
|
||||||
--tp-size "$TP"
|
--tp-size "$TP"
|
||||||
--moe-runner-backend "$MOE_RUNNER_BACKEND"
|
--moe-runner-backend "$MOE_RUNNER_BACKEND"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user