一、本课目标:把官方文档的 9 个模型族「翻译」成可上线参数
上一课 m8-l9 我们把 SGLang-MUSA 的环境(Docker 镜像 v0.5.6.post3-ph1-4.3.5-torch2.9.0-20260605、MTT S5000、torch_musa v2.9.0)完整拉起。本课基于这套环境,对照官方模型部署指南给出的 9 个子页面,逐个梳理"哪一类模型用什么 TP/EP/PP/量化/注意力后端",并把三个最常被问到的部署模式(密集 LLM、超大 MoE、PD 分离)做成可直接复用的命令模板。
二、从官方文档到1台机到N台机的决策路径
面对「该选哪个部署模式」,官方文档隐含一套选型心智,这里明确化:
- 先看模型类型是「密集 LLM / MoE / VL / Diffusion」中的哪一种,决定走本课下面的 ABC 三个模板中的哪一个。
- 再算「权重总显存 ÷ 每卡 80GB」,如果 ≤ 8,单机 8 卡足够;如果 > 8,必须上多机(PP 或 PD 分离)。
- 如果要追求低 TTFT、高吞吐,且已经上了多机,则优先考虑 PD 分离,而不是简单的 PP。
- 最后以本课末尾的「检查清单」逐项对表,避免启动后才发现错逻辑。
这个决策顺序对应了下面三张模板的顺序:模板 A 是「单机密集」「模板 B 是「单机 8 卡 MoE」「模板 C 是「多机 PD 分离」。
三、模型部署矩阵(速查表)
把官方 9 个子页面里"开箱即用"的推荐配置压缩成一张表,方便选型时一眼定位:
| 模型族 | 典型模型 | 量化 | TP | EP | PP | Attention | MoE Backend | 部署模式 |
|---|---|---|---|---|---|---|---|---|
| GLM | GLM-4.6 / 4.7 / 5 / 5.1 | BF16 / FP8 | 4~8 | — | 1 | FA3 | — | 单机 |
| Kimi | Kimi-K2.5 / K2.6 | FP8 | 8 | — | 1~2 | FA3 | — | 单机 / PD 分离 |
| Qwen3 Dense | Qwen3-8B / 14B / 32B | BF16 / FP8 | 1~8 | — | 1 | FA3 | — | 单机 |
| Qwen3 MoE | Qwen3-30B-A3B → 480B-A35B | FP8 | 8 | 8 | 1 | FA3 | DeepEP + DeepGEMM | 单机 / 多机 |
| Qwen3.5 | 0.8B → 397B-A17B | BF16 / FP8 | 1~8 | 0 / 8 | 1 | FA3 | DeepGEMM / DeepEP | 单机 / PD 分离 1P1D |
| Qwen2.5-VL | 7B / 32B / 72B | BF16 | 1~8 | — | 1 | FA3 | — | 单机 |
| Qwen3-VL | 2B → 235B-A22B | BF16 / FP8 | 2~8 | 0 / 8 | 1 | FA3 | DeepEP | 单机 / 多机 |
| DeepSeek V3.2 / R1 | 671B (FP8) | FP8 | 8 | 8 | 2 | NSA(tilelang) | DeepEP + DeepGEMM | PD 分离 2P4D |
| Diffusion | Qwen-Image / Wan2.2-T2V/I2V-A14B | BF16 | 1~4 | — | 1 | FA3 | — | 单机 |
A?B 后缀的模型都是 MoE,必须开 --moe-a2a-backend deepep;② DeepSeek V3.2 / R1 的 NSA 注意力不能退回 FA3,必须指定 --attention-backend nsa --nsa-prefill-backend tilelang;③ 任何用 FP8 的 MoE 都强烈建议加 --moe-runner-backend deep_gemm,否则会浪费 30%+ 算力。
四、模板 A:密集 LLM 单机部署(GLM / Qwen3 Dense / Qwen3.5 小模型)
适用于 GLM-4.6/4.7、Qwen3-8B/14B/32B、Qwen3.5-0.8B/2B/4B/9B/27B 等密集模型。以 Qwen3.5-0.8B 为例(来自官方 Qwen3.5 部署页):
source ~/.virtualenvs/sglang-0.5.6/bin/activate
python3 -m sglang.launch_server \
--model-path /models/Qwen3.5-0.8B \
--served-model-name qwen3.5-0.8b \
--trust-remote-code \
--cuda-graph-bs $(seq 1 32) \
--disable-cuda-graph-padding \
--disable-overlap-schedule \
--tp-size 1 --pp-size 1 \
--mem-fraction-static 0.8 \
--attention-backend fa3 \
--mm-attention-backend fa3 \
--enable-cache-report \
--moe-runner-backend deep_gemm \
--sampling-backend flashinfer \
--dist-init-addr ${MASTER_IP}:5303 \
--nnodes ${WORLD_SIZE} \
--port 30000
把 --model-path / --tp-size 改一下即可适配同档密集模型:32B 推荐 TP=4,最大上下文 32k 时 --mem-fraction-static 可以降到 0.75。
五、模板 B:超大 MoE 单机 8 卡部署(Qwen3-Coder-480B-A35B-FP8)
对应官方 Qwen3 MoE 部署页。这是单台 8× MTT S5000 能跑的最大密度场景之一,全部参数都要明确指定:
/root/.virtualenvs/sglang-0.5.6/bin/python3 -m sglang.launch_server \
--model /models/Qwen3-Coder-480B-A35B-Instruct-FP8 \
--served-model-name qwen3-coder-480b-a35b-instruct-fp8 \
--trust-remote-code \
--disable-cuda-graph \
--disable-overlap-schedule \
--tp-size 8 \
--ep-size 8 \
--dp-size 8 \
--pp-size 1 \
--enable-dp-lm-head \
--enable-dp-attention \
--moe-dense-tp-size 1 \
--moe-a2a-backend deepep \
--moe-runner-backend deep_gemm \
--deepep-mode normal \
--mem-fraction-static 0.90 \
--attention-backend fa3 \
--mm-attention-backend fa3 \
--sampling-backend flashinfer \
--port 30000
关键点:
- TP=EP=DP=8:3D 切分,把"序列维 + 专家维 + 张量维"全部铺到 8 卡上,PH100 的 1.6 TB/s HBM 带宽和 784 GB/s 互联是这个配置能起来的硬件基础
- --moe-runner-backend deep_gemm:调用 MATE 里 DeepGEMM 兼容路径,比默认 GEMM 在 FP8 下吞吐高约 30%
- --mem-fraction-static 0.90:MoE 权重大,必须吃满显存,留 10% 给 KV cache 和激活
- --disable-cuda-graph:480B 这一档当前还有少量算子未进 graph,先关掉,等后续 PR 合入再打开
六、模板 C:PD 分离多机部署(DeepSeek V3.2 / R1 2P4D)
对应官方 DeepSeek 部署页。671B FP8、含 NSA 稀疏注意力 + DeepEP MoE,官方推荐 2 台 Prefill + 4 台 Decode(共 6 台 8 卡 S5000,48 张卡),通过 Mooncake 完成跨节点 KV Transfer。Prefill 节点启动命令(每个节点都跑相同命令,NODE_RANK 不同):
nohup python3 -m sglang.launch_server \
--model-path /models/DeepSeek-V3.2 \
--served-model-name deepseek-v3.2 \
--trust-remote-code \
--disable-cuda-graph \
--disable-overlap-schedule \
--host 0.0.0.0 --port 20133 \
--attention-backend nsa \
--nsa-prefill-backend tilelang \
--nsa-decode-backend tilelang \
--sampling-backend flashinfer \
--disaggregation-mode prefill \
--dist-init-addr ${PREFILL_MASTER_IP}:5303 \
--chunked-prefill-size -1 \
--max-prefill-tokens 4096 \
--nnodes 2 --node-rank ${NODE_RANK} \
--tensor-parallel-size 8 \
--ep-size 8 \
--dp-size 8 \
--context-length 6000 \
--pp-size 2 \
--moe-a2a-backend deepep \
--deepep-mode normal \
--moe-dense-tp-size 1 \
--enable-dp-attention \
--enable-dp-lm-head \
--load-balance-method round_robin \
--deepep-config ${DEEP_EP_CONFIG} \
--max-running-requests 64 \
--mem-fraction-static 0.8 \
> /var/log/sglang-prefill.log 2>&1 &
Decode 节点只需把 --disaggregation-mode prefill 改成 decode,并指向 4 节点集群。最小可用版本是 2 机混布 TP8 PP2,跑通后再扩到 2P4D。
七、三个模板背后的参数选型逻辑
读完上面 ABC 三个模板,你会发现几个参数反复出现但取值不一样,这里集中解释下决策逻辑,避免后续拼参数时吓到。
- --tp-size 的选型准则:密集模型看显存需求 ÷ 单卡 80GB,向上取 2 的幂次;MoE 默认 TP=8,因为专家路由要求同节点 8 卡均衡划分。
- --ep-size 与 --tp-size 的关系:SGLang-MUSA 官方推荐 EP=TP(同节点内专家并行),跨节点 EP 目前在等 mt-mooncake 后续版本,不推荐手工启。
- --pp-size:仅在多机、且权重超过单机总显存时才开;DeepSeek 671B FP8 在 2 台 8 卡上包不下,所以官方推荐 PP=2。
- --mem-fraction-static:密集 LLM 0.8;MoE 0.90;Diffusion 0.7(留给 UNet 中间激活)。
- --attention-backend:默认
fa3;DeepSeek V3.2 / R1 必须nsa+--nsa-prefill-backend tilelang;带视觉 token 的 VL 要额外加--mm-attention-backend fa3。 - --moe-runner-backend:MoE 一律上
deep_gemm;密集不需要但加了不报错。 - --sampling-backend:统一用
flashinfer,vllm-musa 和 SGLang-MUSA 都默认走这条路径。 - --disable-cuda-graph / --disable-overlap-schedule:当前所有 MoE 部署页都明确写了这两个开关,是为了避免个别算子还未进 graph 导致的精度问题,后续 PR 合入后会在《版本发布信息》明确公告。
八、视觉与扩散模型(VL / Diffusion)
Qwen2.5-VL / Qwen3-VL(参考官方 VL 部署页):相比纯文 LLM,VL 多了 --mm-attention-backend fa3 这个开关,让视觉 token 也走 FA3 路径;中等参数(7B/32B)TP=2~4 即可;235B-A22B FP8 走和 Qwen3 MoE 一样的 TP=EP=DP=8 + DeepEP。
Diffusion(参考官方 Diffusion 部署页):Qwen-Image / Wan2.2-T2V-A14B / Wan2.2-I2V-A14B 当前仅 BF16,单卡或 TP=4,注意必须显式 --task generate-image(或 generate-video),并把 --mem-fraction-static 降到 0.7 给 UNet/Transformer 中间激活留显存。
九、上线前检查清单(多机版)
| 项 | 命令 / 期望 | 不通过的后果 |
|---|---|---|
| 每节点 HBM 空闲 | mthreads-smi 每卡 ≥ 75GB | 权重加载失败 |
| 节点间 RDMA 带宽 | ib_write_bw -d mlx5_0 ≥ 80 Gbps | PD KV Transfer 慢、TTFT 抖动 |
| MCCL/peermem | lsmod | grep peermem | 跨卡 TP/EP 通信报错 |
| NTP 时间同步 | 节点间偏差 < 50ms | 调度日志混乱、PD 路由失败 |
| 模型路径一致 | 所有节点 /models/<name> 同一份 | 启动 hang 在 weight load |
| DeepEP 配置文件 | ${DEEP_EP_CONFIG} 存在且节点一致 | 专家路由不收敛 |
| 端口连通性 | 20133 / 5303 节点间 telnet OK | dist-init 超时 |
| FAQ 已读 | 对照官方 FAQ 排查常见报错 | 同一坑重复踩 |
十、雷达已启动:sglang-musa 文档站被本站点每周追踪
从本周起,本站点的摩尔线程雷达正式加入 SGLang-MUSA 官方文档站的 16 个页面作为独立源:主要覆盖三类变动 — 一是《版本发布信息》页面上的镜像 tag 变化(包含 SGLang 版本、MUSA SDK 子版本、torch_musa 版本、构建日期);二是《支持模型及平台》页面上的新增模型、新增量化格式、或者 GPU 平台扩展(比如 PH200 / S6000 上架);三是 9 个模型部署子页上的部署参数调整,包括 TP/EP/DP/PP 路线改动、--moe-runner-backend 后端切换、NSA 后端从 tilelang 迁到别的实现等。这些变动会被雷达每周一 UTC 01:00(HKT 09:00)自动扫描,加入到周报 P0/P1 评级起雾,足够重要的会直接反馈到本课和 m8-l9 的“版本栈”章节。
十一、参考链接
- SGLang-MUSA · 模型部署指南总入口
- 支持模型及平台
- 快速开始(含 Qwen3.5-397B-A17B-FP8 1P1D 完整示例)
- 本站点相关课程:m5-l4(SGLang 入门)、m8-l9(环境准备)、m6-l4(TileLang / NSA)