SGLang 部署 Qwen3.8 27B
DevOps / LLM
最近 Qwen3.8 27B 超级火爆,用 SGLang 部署了一个 Qwen3.8-27B 模型当本地 Agent 用,效果还不错。下面是我的完整启动脚本,以及每个参数的作用说明。
启动脚本
# 这个路径改为你虚拟环境的路径
readonly SGLANG_VENV="/opt/llm-server/sglang/.venv"
readonly API_KEY="sk-xxxxxxxx"
# 将模型放置在 wsl 空间内,加载速度更快
readonly MODEL_PATH="/opt/llm-server/models/Qwen3.8-27B-Uncensored-NVFP4"
readonly SERVED_MODEL_NAME="qwen3.8-27b"
readonly HOST="0.0.0.0"
readonly PORT="7860"
# Runtime environment
export PYTORCH_ALLOC_CONF="expandable_segments:True"
export CUDA_DEVICE_ORDER="PCI_BUS_ID"
export CUDA_VISIBLE_DEVICES="0"
export TORCHINDUCTOR_CACHE_DIR
export TRITON_CACHE_DIR
export FLASH_ATTENTION_CUTE_DSL_CACHE_ENABLED="1"
SGLANG_ARGS=(
--api-key "${API_KEY}"
--model-path "${MODEL_PATH}"
--served-model-name "${SERVED_MODEL_NAME}"
--host "${HOST}"
--port "${PORT}"
--tensor-parallel-size 1
--trust-remote-code
--attention-backend flashinfer
--reasoning-parser qwen3
--tool-call-parser qwen3_coder
--kv-cache-dtype fp8_e4m3
--max-running-requests 6
# 分配给模型+上下文的空间占比 0.89 等于 89%,这里属于微调参数:
# 大了其他服务启动时会 OOM,小了模型+上下文空间不够,启动不起来。
--mem-fraction-static 0.95
--mamba-radix-cache-strategy extra_buffer_lazy
--mamba-backend flashinfer
--schedule-policy lpm
--schedule-conservativeness 1.0
--stream-interval 1
--chunked-prefill-size 2048
--speculative-algorithm EAGLE
--speculative-num-steps 3
--speculative-eagle-topk 1
--speculative-num-draft-tokens 4
--radix-eviction-policy lfu
--mamba-ssm-dtype bfloat16
# 这个参数吃非常大的显存,默认是 0.9,支持 100 路并发;
# 如果显存还吃紧,改成 0.1 也无所谓,0.1 都支持 6 路并发。
--mamba-full-memory-ratio 0.1
)
source "${SGLANG_VENV}/bin/activate"
cd "/opt/llm-server/sglang"
sglang serve "${SGLANG_ARGS[@]}"
参数说明
基础配置
--api-key/--served-model-name:给 OpenAI 兼容 API 设置访问密钥和模型名,客户端调用时用这个名字。--model-path:模型目录。本例用的是Vtuber-plan/Qwen3.8-27B-Uncensored-NVFP4,一个 Uncensored(去审查)的 NVFP4 量化模型,单卡就能跑 27B。--host/--port:监听地址和端口。--tensor-parallel-size 1:单卡部署,不做张量并行。--trust-remote-code:允许执行模型仓库自带的 Python 代码。
环境变量
PYTORCH_ALLOC_CONF=expandable_segments:True:让 PyTorch 分配可扩容的显存段,减少显存碎片和 OOM。CUDA_DEVICE_ORDER=PCI_BUS_ID:让CUDA_VISIBLE_DEVICES的编号按 PCIe 总线序排列,编号更稳定。CUDA_VISIBLE_DEVICES=0:只用 0 号卡。TORCHINDUCTOR_CACHE_DIR/TRITON_CACHE_DIR:为 torch.compile 和 Triton kernel 指定缓存目录,避免重复编译。FLASH_ATTENTION_CUTE_DSL_CACHE_ENABLED=1:开启 Flash Attention 的缓存。
调度与内存
--mem-fraction-static 0.95:静态显存中预留给模型权重 + KV cache 的比例。属于微调参数:给高了容易挤爆其他进程,给低了模型加上下文空间不够,服务起不来。--max-running-requests 6:同一时刻最多并行的请求数。--schedule-policy lpm:按「最长公共前缀」优先调度,命中 radix cache 前缀的请求先跑,提高缓存复用率。--schedule-conservativeness 1.0:调度保守度,1.0 是标准值,调低会更激进地塞请求。--chunked-prefill-size 2048:把长 prefill 切成 2048 token 的小块,和 decode 混跑,避免长 prompt 卡住流式输出。--stream-interval 1:每生成 1 个 token 就推送一次,流式输出延迟最低。--kv-cache-dtype fp8_e4m3:KV cache 用 FP8 存储,显存占用减半,能塞下更长的上下文。--radix-eviction-policy lfu:radix cache 驱逐时按「最少使用频率」淘汰,热点前缀留得更久。
Attention / Mamba 后端
Qwen3.8 27B 是 Mamba + Attention 的混合架构,所以除了 attention 还要配 mamba 后端:
--attention-backend flashinfer:attention 用 FlashInfer 计算。--mamba-backend flashinfer:Mamba SSM 层同样用 FlashInfer 加速。--mamba-radix-cache-strategy extra_buffer_lazy:混合架构下 Mamba 状态不能像 KV cache 那样任意前缀复用,这个策略用懒分配的额外 buffer 来支撑前缀缓存。--mamba-ssm-dtype bfloat16:Mamba 状态用 bf16 精度,比 fp8 更稳。--mamba-full-memory-ratio 0.1:Mamba 全量状态缓存的显存占比。这个参数非常吃显存,默认 0.9 支持 100 路并发;显存紧张时调到 0.1 也还能支持 6 路并发。
推理与投机解码
--reasoning-parser qwen3:解析 Qwen3 系的思考段,把推理内容和最终回答分开输出。--tool-call-parser qwen3_coder:按 Qwen3 Coder 的格式解析工具调用,方便接 Agent 框架。--speculative-algorithm EAGLE:启用 EAGLE 投机解码,用草稿快速多猜几个 token,主模型一次性验证,整体加速。--speculative-num-steps 3:草稿阶段连猜 3 步。--speculative-eagle-topk 1:每步只保留 top-1 候选,草稿更保守、命中率更稳。--speculative-num-draft-tokens 4:每轮最多提交 4 个草稿 token 给主模型验证。
实测性能(A800 单卡)
在 A800 上用这套配置,SGLang 启动时的资源分配情况:
max_total_num_tokens=1477469
chunked_prefill_size=2048
max_prefill_tokens=16384
max_running_requests=6
context_len=262144
available_gpu_mem=3.58 GB
吞吐方面,tps 在 80 到 150 之间波动,取决于 MTP 的草稿接受率,可以认为稳定在 120 token/s 左右。