Qwen3 Dense 模型部署
本章节包含 Qwen3 Dense 系列模型的部署脚本及说明。支持 BF16 和 FP8 两种权重,部署时注意替换权重文件。
-
参考 环境准备 进行环境检查、启动容器。
-
容器镜像地址参考 版本发布信息-镜像地址。
Qwen3-8B
投机采样使用了 Draft Model,模型链接(Qwen3-8B_eagle3)
启动脚本 start_server.sh
#!/usr/bin/env bash
set -euo pipefail
SGLANG_VENV="${SGLANG_VENV:-/root/.virtualenvs/sglang-default}"
SGLANG_PYTHON="${SGLANG_PYTHON:-${SGLANG_VENV}/bin/python3}"
if [[ -f "${SGLANG_VENV}/bin/activate" ]]; then
# shellcheck disable=SC1091
source "${SGLANG_VENV}/bin/activate"
fi
export PATH="${SGLANG_VENV}/bin:${PATH}"
export LD_LIBRARY_PATH="/usr/local/musa/lib:/usr/local/openmpi/lib:/usr/local/musa/mudnn/lib:/usr/local/mtshmem/lib:${LD_LIBRARY_PATH:-}"
export MUSA_VISIBLE_DEVICES="${MUSA_VISIBLE_DEVICES:-0}"
export MTHREADS_VISIBLE_DEVICES="${MTHREADS_VISIBLE_DEVICES:-0}"
export MUSA_LAUNCH_BLOCKING=0
export MUSA_ENABLE_LLC_OPT=1
export VLLM_PATCH_MUSA_CUSTOM_OPS=1
export SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1
export SGLANG_SET_CPU_AFFINITY=1
export SGLANG_USE_DEEPGEMM_BMM=0
export SGLANG_MOE_PADDING=1
export SGLANG_USE_MUSA_FUSED_KERNEL=1
WORK_HOME="${WORK_HOME:-$PWD}"
MODEL_PATH="${MODEL_PATH:-/data/models/Qwen3-8B-FP8}"
MODEL_NAME="${MODEL_NAME:-Qwen3-8B-FP8}"
PORT="${PORT:-${SGLANG_PORT:-42251}}"
DIST_PORT="${DIST_PORT:-1264}"
SGLANG_HOST="${SGLANG_HOST:-0.0.0.0}"
LOG_DIR="${LOG_DIR:-${WORK_HOME}/logs/service}"
SPEC_MODEL_PATH="${SPEC_MODEL_PATH:-/data/models/Qwen3-8B_eagle3}"
ENABLE_SPECULATIVE="${ENABLE_SPECULATIVE:-1}"
TOKENIZER_BACKEND="${TOKENIZER_BACKEND:-fastokens}"
SGLANG_ENABLE_SPECULATIVE="${SGLANG_ENABLE_SPECULATIVE:-${ENABLE_SPECULATIVE}}"
export SGLANG_ENABLE_SPEC_V2="${SGLANG_ENABLE_SPEC_V2:-0}"
mkdir -p "${LOG_DIR}" "${WORK_HOME}/traces"
TP_SIZE="${TP_SIZE:-1}"
MASTER_IP="$(hostname -I | awk '{print $1}')"
LOG_FILE="${LOG_DIR}/qwen3_8b_2500_1500_short_$(date +%Y%m%d_%H%M%S).log"
SPEC_ARGS=()
if [[ "${SGLANG_ENABLE_SPECULATIVE}" == "1" || "${SGLANG_ENABLE_SPECULATIVE}" == "true" ]]; then
export SGLANG_ENABLE_SPEC_V2=1
SPEC_ARGS=(
--speculative-draft-model-path "${SPEC_MODEL_PATH}"
--speculative-algorithm EAGLE3
--speculative-num-steps 3
--speculative-eagle-topk 1
--speculative-num-draft-tokens 4
)
fi
TOKENIZER_ARGS=()
if [[ -n "${TOKENIZER_BACKEND}" ]]; then
TOKENIZER_ARGS=(--tokenizer-backend "${TOKENIZER_BACKEND}")
fi
nohup "${SGLANG_PYTHON}" -m sglang.launch_server \
--model-path "${MODEL_PATH}" \
--served-model-name "${MODEL_NAME}" \
--trust-remote-code \
--tp-size "${TP_SIZE}" \
--pp-size 1 \
--host "${SGLANG_HOST}" \
--port "${PORT}" \
--dist-init-addr "${MASTER_IP}:${DIST_PORT}" \
--attention-backend fa3 \
--mm-attention-backend fa3 \
--tokenizer-backend fastokens \
--linear-attn-backend flashinfer \
--sampling-backend flashinfer \
"${TOKENIZER_ARGS[@]}" \
--mem-fraction-static 0.7 \
--cuda-graph-max-bs 256 \
--disable-piecewise-cuda-graph \
--chunked-prefill-size -1 \
--max-running-requests 256 \
--decode-log-interval 1 \
"${SPEC_ARGS[@]}" \
--reasoning-parser qwen3 \
--tool-call-parser qwen25 \
> "${LOG_FILE}" 2>&1 &
echo "SGLang Qwen3-8B started, pid=$!, log=${LOG_FILE}"
Qwen3-14B
启动脚本 start_server.sh
#!/bin/bash
SGLANG_VENV="${SGLANG_VENV:-$HOME/.virtualenvs/sglang-default}"
SGLANG_PYTHON="${SGLANG_PYTHON:-${SGLANG_VENV}/bin/python3}"
SGLANG_HOST="${SGLANG_HOST:-0.0.0.0}"
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/musa/lib:$LD_LIBRARY_PATH
export SGLANG_ENABLE_SPEC_V2=1
MODEL_PATH="${MODEL_PATH:-/data/models/Qwen3-14B-FP8}"
SGLANG_PORT="${SGLANG_PORT:-31000}"
TP_SIZE="${TP_SIZE:-1}"
CURRENT_TIME=$(date "+%Y%m%d_%H%M%S")
WORK_HOME="$PWD"
LOG_DIR="$WORK_HOME/output/$CURRENT_TIME/"
LOG_FILE="${LOG_DIR}/sglang_$(date '+%Y%m%d_%H%M%S').log"
LATEST_LOG_LINK="$WORK_HOME/output/latest"
mkdir -p "$LOG_DIR"
rm -f "$LATEST_LOG_LINK"
ln -s "$CURRENT_TIME/$(basename "$LOG_FILE")" "$LATEST_LOG_LINK"
nohup "$SGLANG_PYTHON" -m sglang.launch_server \
--model-path "$MODEL_PATH" \
--served-model-name base-model \
--mem-fraction-static 0.75 \
--cuda-graph-bs $(seq 1 64) \
--disable-piecewise-cuda-graph \
--disable-overlap-schedule \
--linear-attn-backend flashinfer \
--tokenizer-backend fastokens \
--host "${SGLANG_HOST}" \
--port ${SGLANG_PORT} \
--attention-backend fa3 \
--tp-size "$TP_SIZE" \
--max-running-requests 256 \
--sampling-backend flashinfer \
--chunked-prefill-size 8192 \
--reasoning-parser qwen3 \
--tool-call-parser qwen25 \
> "$LOG_FILE" 2>&1 &
Qwen3-32B
Qwen3-32B 可以使用单机4卡混合部署,也可以在1台机器内做PD分离部署。