fix(sglang): cap SM120 CUDA graph prefill
This commit is contained in:
parent
fad6336d2c
commit
8562c26524
@ -4,6 +4,7 @@
|
|||||||
> - 仅用于验证 Gitee 受保护分支的自动 Pull Request 创建与评审流程;不修改实验代码、配置或结果口径。
|
> - 仅用于验证 Gitee 受保护分支的自动 Pull Request 创建与评审流程;不修改实验代码、配置或结果口径。
|
||||||
|
|
||||||
> **更新(2026-07-20,`903084c`)**
|
> **更新(2026-07-20,`903084c`)**
|
||||||
|
> - RTX 6000D 的 SGLang DSV4-Flash 默认传入 `--cuda-graph-max-bs-decode 16`,避免 SM120 sparse MLA 在大 batch CUDA Graph 预捕获时 OOM。该参数仅限制预捕获图的 decode batch 上限,不限制服务的 `max-running-requests` 或 benchmark 并发;其他平台默认不受影响。
|
||||||
> - H20 / RTX 6000D 的 TPxDP matrix baseline 不再显式限制模型上下文或服务内并发:vLLM 使用默认 `max-model-len` / `max-num-seqs`,SGLang 使用默认 `context-length` / `max-running-requests`。
|
> - H20 / RTX 6000D 的 TPxDP matrix baseline 不再显式限制模型上下文或服务内并发:vLLM 使用默认 `max-model-len` / `max-num-seqs`,SGLang 使用默认 `context-length` / `max-running-requests`。
|
||||||
> - SGLang 固定使用 `--moe-runner-backend marlin`;vLLM 保持框架默认 MoE backend。
|
> - SGLang 固定使用 `--moe-runner-backend marlin`;vLLM 保持框架默认 MoE backend。
|
||||||
> - `run_adaptive_concurrency_add16.sh` 在首点 OOM 时会重启服务并按 `C=16 -> 8 -> 1` 回退;仅 H20 / RTX 6000D matrix 默认开启,H200 / P800 保持原行为。
|
> - `run_adaptive_concurrency_add16.sh` 在首点 OOM 时会重启服务并按 `C=16 -> 8 -> 1` 回退;仅 H20 / RTX 6000D matrix 默认开启,H200 / P800 保持原行为。
|
||||||
|
|||||||
@ -38,6 +38,10 @@ declare -a PARALLEL_CONFIGS=(
|
|||||||
MEM_FRACTION_STATIC="${MEM_FRACTION_STATIC:-0.80}"
|
MEM_FRACTION_STATIC="${MEM_FRACTION_STATIC:-0.80}"
|
||||||
MOE_RUNNER_BACKEND="${MOE_RUNNER_BACKEND:-marlin}"
|
MOE_RUNNER_BACKEND="${MOE_RUNNER_BACKEND:-marlin}"
|
||||||
|
|
||||||
|
# RTX 6000D cannot capture DSV4 decode graphs at the default large batches.
|
||||||
|
# This limits graph pre-capture only; it does not cap request concurrency.
|
||||||
|
CUDA_GRAPH_MAX_BS_DECODE="${CUDA_GRAPH_MAX_BS_DECODE:-16}"
|
||||||
|
|
||||||
# Deployment switch. 0 = native sglang venv, 1 = Docker.
|
# Deployment switch. 0 = native sglang venv, 1 = Docker.
|
||||||
USE_DOCKER="${USE_DOCKER:-1}"
|
USE_DOCKER="${USE_DOCKER:-1}"
|
||||||
DOCKER_IMAGE="${DOCKER_IMAGE:-sglang-sm120-dsv4:0.5.15.post1-fi0.6.14-sm120fix1}"
|
DOCKER_IMAGE="${DOCKER_IMAGE:-sglang-sm120-dsv4:0.5.15.post1-fi0.6.14-sm120fix1}"
|
||||||
@ -69,3 +73,8 @@ DRY_RUN="${DRY_RUN:-0}"
|
|||||||
|
|
||||||
# Per-config scenario limit for quick smoke tests. 0 = run all generated scenarios.
|
# Per-config scenario limit for quick smoke tests. 0 = run all generated scenarios.
|
||||||
GRID_LIMIT="${GRID_LIMIT:-0}"
|
GRID_LIMIT="${GRID_LIMIT:-0}"
|
||||||
|
|
||||||
|
# PyTorch CUDA allocator setting for the SGLang server. expandable_segments
|
||||||
|
# reduces fragmentation from the GiB-scale indexer temporaries that OOM the
|
||||||
|
# SM120 torch fallback (fp8_paged_mqa_logits_torch_sm120) at ISL >= 4096.
|
||||||
|
PYTORCH_CUDA_ALLOC_CONF="${PYTORCH_CUDA_ALLOC_CONF:-expandable_segments:True}"
|
||||||
|
|||||||
@ -79,6 +79,9 @@ engine_build_server_args() {
|
|||||||
if (( dp > 1 )); then
|
if (( dp > 1 )); then
|
||||||
args+=(--dp-size "$dp")
|
args+=(--dp-size "$dp")
|
||||||
fi
|
fi
|
||||||
|
if [[ -n "${CUDA_GRAPH_MAX_BS_DECODE:-}" ]]; then
|
||||||
|
args+=(--cuda-graph-max-bs-decode "$CUDA_GRAPH_MAX_BS_DECODE")
|
||||||
|
fi
|
||||||
printf '%q ' "${args[@]}"
|
printf '%q ' "${args[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +152,6 @@ engine_run_bench() {
|
|||||||
--output-file "$output_file"
|
--output-file "$output_file"
|
||||||
--output-details
|
--output-details
|
||||||
--disable-tqdm
|
--disable-tqdm
|
||||||
--disable-stream
|
|
||||||
)
|
)
|
||||||
if [[ "$BENCH_DATASET_NAME" == "random" ]]; then
|
if [[ "$BENCH_DATASET_NAME" == "random" ]]; then
|
||||||
bench_args+=(--dataset-path "$DATASET_PATH")
|
bench_args+=(--dataset-path "$DATASET_PATH")
|
||||||
|
|||||||
@ -79,6 +79,9 @@ engine_build_server_args() {
|
|||||||
if (( dp > 1 )); then
|
if (( dp > 1 )); then
|
||||||
args+=(--dp-size "$dp")
|
args+=(--dp-size "$dp")
|
||||||
fi
|
fi
|
||||||
|
if [[ -n "${CUDA_GRAPH_MAX_BS_DECODE:-}" ]]; then
|
||||||
|
args+=(--cuda-graph-max-bs-decode "$CUDA_GRAPH_MAX_BS_DECODE")
|
||||||
|
fi
|
||||||
printf '%q ' "${args[@]}"
|
printf '%q ' "${args[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,7 +152,6 @@ engine_run_bench() {
|
|||||||
--output-file "$output_file"
|
--output-file "$output_file"
|
||||||
--output-details
|
--output-details
|
||||||
--disable-tqdm
|
--disable-tqdm
|
||||||
--disable-stream
|
|
||||||
)
|
)
|
||||||
if [[ "$BENCH_DATASET_NAME" == "random" ]]; then
|
if [[ "$BENCH_DATASET_NAME" == "random" ]]; then
|
||||||
bench_args+=(--dataset-path "$DATASET_PATH")
|
bench_args+=(--dataset-path "$DATASET_PATH")
|
||||||
|
|||||||
@ -44,6 +44,10 @@ if [[ "$DP" -gt 1 ]]; then
|
|||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${CUDA_GRAPH_MAX_BS_DECODE:-}" ]]; then
|
||||||
|
SERVER_ARGS+=(--cuda-graph-max-bs-decode "$CUDA_GRAPH_MAX_BS_DECODE")
|
||||||
|
fi
|
||||||
|
|
||||||
SERVER_ARGS_STR="${SERVER_ARGS[*]}"
|
SERVER_ARGS_STR="${SERVER_ARGS[*]}"
|
||||||
|
|
||||||
echo "=== Starting SGLang server in Docker (TP=${TP}, DP=${DP}) ==="
|
echo "=== Starting SGLang server in Docker (TP=${TP}, DP=${DP}) ==="
|
||||||
@ -73,6 +77,7 @@ nohup docker run --rm \
|
|||||||
-e PYTHONUNBUFFERED=1 \
|
-e PYTHONUNBUFFERED=1 \
|
||||||
-e HF_HUB_OFFLINE=1 \
|
-e HF_HUB_OFFLINE=1 \
|
||||||
-e TRANSFORMERS_OFFLINE=1 \
|
-e TRANSFORMERS_OFFLINE=1 \
|
||||||
|
-e PYTORCH_CUDA_ALLOC_CONF="${PYTORCH_CUDA_ALLOC_CONF:-expandable_segments:True}" \
|
||||||
"$IMAGE" \
|
"$IMAGE" \
|
||||||
"${SERVER_ARGS[@]}" \
|
"${SERVER_ARGS[@]}" \
|
||||||
> "$LOG" 2>&1 &
|
> "$LOG" 2>&1 &
|
||||||
|
|||||||
@ -24,6 +24,7 @@ mkdir -p "${RUNTIME_BASE}/logs" "${RUNTIME_BASE}/tmp"
|
|||||||
VENV="${VENV_CLIENT}"
|
VENV="${VENV_CLIENT}"
|
||||||
export PATH="$VENV/bin:$PATH"
|
export PATH="$VENV/bin:$PATH"
|
||||||
export PYTHONUNBUFFERED=1
|
export PYTHONUNBUFFERED=1
|
||||||
|
export PYTORCH_CUDA_ALLOC_CONF="${PYTORCH_CUDA_ALLOC_CONF:-expandable_segments:True}"
|
||||||
export TMPDIR="${RUNTIME_BASE}/tmp"
|
export TMPDIR="${RUNTIME_BASE}/tmp"
|
||||||
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES}"
|
export CUDA_VISIBLE_DEVICES="${CUDA_VISIBLE_DEVICES}"
|
||||||
|
|
||||||
@ -38,8 +39,6 @@ SERVER_ARGS=(
|
|||||||
--trust-remote-code
|
--trust-remote-code
|
||||||
--tp-size "$TP"
|
--tp-size "$TP"
|
||||||
--moe-runner-backend "$MOE_RUNNER_BACKEND"
|
--moe-runner-backend "$MOE_RUNNER_BACKEND"
|
||||||
--context-length "$CONTEXT_LENGTH"
|
|
||||||
--max-running-requests "$MAX_RUNNING_REQUESTS"
|
|
||||||
--mem-fraction-static "$MEM_FRACTION_STATIC"
|
--mem-fraction-static "$MEM_FRACTION_STATIC"
|
||||||
--host 0.0.0.0
|
--host 0.0.0.0
|
||||||
--port "$SGLANG_PORT"
|
--port "$SGLANG_PORT"
|
||||||
@ -51,6 +50,10 @@ if [[ "$DP" -gt 1 ]]; then
|
|||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -n "${CUDA_GRAPH_MAX_BS_DECODE:-}" ]]; then
|
||||||
|
SERVER_ARGS+=(--cuda-graph-max-bs-decode "$CUDA_GRAPH_MAX_BS_DECODE")
|
||||||
|
fi
|
||||||
|
|
||||||
SERVER_ARGS_STR="${SERVER_ARGS[*]}"
|
SERVER_ARGS_STR="${SERVER_ARGS[*]}"
|
||||||
|
|
||||||
echo "=== Starting SGLang server (TP=${TP}, DP=${DP}) ==="
|
echo "=== Starting SGLang server (TP=${TP}, DP=${DP}) ==="
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user