Skip to content

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 左右。