Qwen3 VL 模型部署
本章节包含 Qwen3 VL 系列模型的部署脚本,脚本涉及的参数说明、PD 分离一键部署说明见 快速开始。
信息
启动 SGLang 服务前切换python虚拟环境到sglang-0.5.6,执行命令:workon sglang-0.5.6 或 source ~/.virtualenvs/sglang-0.5.6/bin/activate
Qwen3VL-2/4/8B
本示例使用 1卡(TP1)部署 Qwen3-VL-2B-Instruct。 对于 Qwen3-VL-4B-Instruct 和 Qwen3-VL-8B-Instruct,修改 MODEL_PATH 环境变量和 served-model-name 参数即可。
启动脚本 Launch_server.sh
#!/bin/bash
source ~/.virtualenvs/sglang-0.5.6/bin/activate
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/musa/lib:$LD_LIBRARY_PATH
export MUSA_LAUNCH_BLOCKING=0
export MUSA_ENABLE_LLC_OPT=1
export MCCL_IB_GID_INDEX=3
export MCCL_NET_SHARED_BUFFERS=0
export MCCL_PROTOS=2
export GLOO_SOCKET_IFNAME=bond0
export TP_SOCKET_IFNAME=bond0
export SGLANG_TORCH_PROFILER_DIR=/tmp/traces
export VLLM_PATCH_MUSA_CUSTOM_OPS=1
export MATE_FORCE_JIT=1
SGLANG_DECODE_PORT=20133
MASTER_IP=127.0.0.1
NODE_RANK=0
WORLD_SIZE=1
MODEL_PATH=/data/models/Qwen3-VL-2B-Instruct-FP8/
log_path=logs-sglang-server/$(hostname)-$(basename $MODEL_PATH)
mkdir -p $log_path
log_file=$(date "+%Y%m%d_%H%M").log
touch $log_path/$log_file
rm -f $log_path/latest
ln -s $log_file $log_path/latest
export MUSA_VISIBLE_DEVICES=$run_GPU
python3 -m sglang.launch_server \
--model ${MODEL_PATH} \
--served-model-name qwen3-vl-2b-instruct-fp8 \
--trust-remote-code \
--cuda-graph-max-bs 256 \
--disable-overlap-schedule \
--tp-size 1 \
--pp-size 1 \
--mem-fraction-static 0.8 \
--attention-backend fa3 \
--mm-attention-backend fa3 \
--moe-runner-backend deep_gemm \
--sampling-backend flashinfer \
--dist-init-addr ${MASTER_IP}:5303 \
--nnodes 1 \
--node-rank 0 \
--max-prefill-tokens 4096 \
--chunked-prefill-size -1 \
--disable-radix-cache \
--port ${SGLANG_DECODE_PORT} \
--host 127.0.0.1 \
--decode-log-interval 1 2>&1 | tee $log_path/$log_file
Qwen3VL-32B
本示例使用 4卡(TP4)部署。
启动脚本 qwen3_vl_32b_server.sh
#!/bin/bash
source ~/.virtualenvs/sglang-0.5.6/bin/activate
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/musa/lib:$LD_LIBRARY_PATH
export MUSA_LAUNCH_BLOCKING=0
export MUSA_ENABLE_LLC_OPT=1
export MCCL_IB_GID_INDEX=3
export MCCL_NET_SHARED_BUFFERS=0
export MCCL_PROTOS=2
export GLOO_SOCKET_IFNAME=bond0
export TP_SOCKET_IFNAME=bond0
export SGLANG_TORCH_PROFILER_DIR=/tmp/traces
export VLLM_PATCH_MUSA_CUSTOM_OPS=1
export MATE_FORCE_JIT=1
export LD_LIBRARY_PATH=/usr/local/musa/lib:${LD_LIBRARY_PATH}
SGLANG_DECODE_PORT=20133
MASTER_IP=127.0.0.1
NODE_RANK=0
WORLD_SIZE=1
MODEL_PATH=/data/models/Qwen3-VL-32B-Instruct-FP8/
log_path=logs-sglang-server/$(hostname)
mkdir -p $log_path
log_file=$(date "+%Y%m%d_%H%M").log
touch $log_path/$log_file
rm -f $log_path/latest
ln -s $log_file $log_path/latest
python3 -m sglang.launch_server \
--model ${MODEL_PATH} \
--served-model-name qwen3-vl-32b-instruct-fp8 \
--trust-remote-code \
--cuda-graph-max-bs 256 \
--disable-overlap-schedule \
--tp-size 4 \
--dp-size 1 \
--mem-fraction-static 0.8 \
--attention-backend fa3 \
--mm-attention-backend fa3 \
--sampling-backend flashinfer \
--dist-init-addr ${MASTER_IP}:5303 \
--nnodes 1 \
--node-rank 0 \
--chunked-prefill-size -1 \
--disable-radix-cache \
--port ${SGLANG_DECODE_PORT} \
--host 0.0.0.0 \
--decode-log-interval 1 2>&1 | tee $log_path/$log_file
Qwen3-VL-30B-A3B-Instruct
本示例使用 2卡(TP2)部署。
Qwen3-VL-30B-A3B-Instruct 启动脚本 qwen3_vl_30b_a3b_server.sh
#!/bin/bash
source ~/.virtualenvs/sglang-0.5.6/bin/activate
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/musa/lib:$LD_LIBRARY_PATH
export MUSA_LAUNCH_BLOCKING=0
export MUSA_ENABLE_LLC_OPT=1
export MCCL_IB_GID_INDEX=3
export MCCL_NET_SHARED_BUFFERS=0
export MCCL_PROTOS=2
export GLOO_SOCKET_IFNAME=bond0
export TP_SOCKET_IFNAME=bond0
export VLLM_PATCH_MUSA_CUSTOM_OPS=1
export MATE_FORCE_JIT=1
get_master_ip() {
local hostname_ip=$(hostname -I 2>/dev/null | awk '{print $1}')
if [ -n "$hostname_ip" ] && [ "$hostname_ip" != "127.0.0.1" ]; then
echo "$hostname_ip"
return
fi
}
CURRENT_TIME=$(date "+%Y%m%d_%H%M%S")
SGLANG_DECODE_PORT=20133
MASTER_IP=$(get_master_ip)
NODE_RANK=0
WORLD_SIZE=1
WORK_HOME="$PWD"
LOG_DIR=$WORK_HOME/output/$CURRENT_TIME/
mkdir -p "$LOG_DIR"
export MUSA_VISIBLE_DEVICES=0,1
export SGLANG_TORCH_PROFILER_DIR=$WORK_HOME/traces
MODEL_PATH=/data/models/Qwen3-VL-30B-A3B-Instruct-FP8/
nohup python3 -m sglang.launch_server \
--model-path ${MODEL_PATH} \
--served-model-name qwen3-vl-30b-a3b-instruct-fp8 \
--trust-remote-code \
--disable-overlap-schedule \
--cuda-graph-max-bs 512 \
--tp-size 2 \
--ep-size 2 \
--pp-size 1 \
--mem-fraction-static 0.8 \
--attention-backend fa3 \
--enable-cache-report \
--mm-attention-backend fa3 \
--moe-runner-backend deep_gemm \
--enable-dp-attention \
--enable-dp-lm-head \
--moe-dense-tp-size 1 \
--sampling-backend flashinfer \
--dist-init-addr ${MASTER_IP}:5303 \
--nnodes ${WORLD_SIZE} \
--node-rank ${NODE_RANK} \
--chunked-prefill-size -1 \
--max-prefill-tokens 4096 \
--context-length 16384 \
--disable-radix-cache \
--port ${SGLANG_DECODE_PORT} \
--host 0.0.0.0 \
--decode-log-interval 1 > "${LOG_DIR}/${MASTER_IP}_$(date '+%Y%m%d_%H%M%S').log" 2>&1 &
echo -e "Main log file: \033[34m$LOG_DIR\033[0m"