如何为Step-5-Preview选择最优部署配置?TP/TEP/DEP七种并行方案完整解析
Step-5-Preview 是阶跃星辰推出的 600B 参数稀疏 MoE 旗舰模型(激活参数仅 27B,支持最高 1M 上下文),本地部署时的核心难题就在于"选哪套并行配置"。本文完整解析 vLLM / SGLang / Transformers 下TP、TEP、DEP 七种并行方案,从 4 卡 B300 到 16 卡双节点 H200 逐一拆解,帮你用最少的显存、跑通最高的并发。
为什么 Step-5-Preview 的部署配置如此关键?
先看模型的"底子",配置选型的一切都源于它:
| 规格 | 数值 |
|---|---|
| 架构 | 稀疏 MoE(Mixture of Experts) |
| 总参数 / 激活参数 | 600B / 27B |
| 解码层数 | 92 层 |
| 路由专家数 | 352 个(每 token 只激活 8 个) |
| 上下文 / 最大输出 | 最高 1M tokens |
600B 的 BF16 权重远超单卡甚至单节点显存,必须靠并行切分才能加载;而 MoE 结构又让"专家放哪、怎么通信"成了新的变量。选错方案,轻则 OOM,重则并发上不去。
📌 专家与层数配置见 config.json:
moe_num_experts: 352、moe_top_k: 8、num_hidden_layers: 92。
快速认识 TP、TEP、DEP:三种并行到底在分什么?
🧩 一个类比:把"服务 600B 大模型"想象成一家大型餐厅——
| 缩写 | 全称 | 分的是什么 | 适合场景 |
|---|---|---|---|
| TP | Tensor Parallel 张量并行 | 把同一层的权重横着切到多卡,每卡算一部分再汇总 | 单请求低延迟,配置最简单 |
| TEP | Tensor + Expert Parallel | 稠密层按张量切 +MoE 专家分组分布到多卡 | 兼顾显存与专家分布均匀性 |
| DEP | Data + Expert Parallel | 每卡各存一套完整稠密权重,只切专家,天然支持多路并发 | 高并发、多用户同时访问 |
| EP | Expert Parallel 专家并行 | 仅把 352 个专家分摊到各卡(SGLang 与独立推理路径采用) | 配合 TP 使用 |
关键细节:352 个专家 ÷ 卡数 = 每卡专家数。8 卡放 44 个/卡,16 卡放 22 个/卡——卡数必须能整除专家分布,这也是 TP=EP 取同值的由来(详见 inference/README.zh.md)。
⚙️ 另一个易踩坑的点:Blackwell(B300)上 TEP/DEP 会启用 MegaMoE 后端(--moe-backend deep_gemm_mega_moe),而 Hopper(H200)使用默认 MoE 后端,命令需要相应删改;纯 TP 则一律走默认后端。
七种并行方案全景对照
官方在 README.md 的 Deployment Configurations 中给出的推荐组合如下:
| # | 框架 | 精度 | 硬件 | 并行方案 | 接口形态 |
|---|---|---|---|---|---|
| 1 | vLLM | FP8 | 单节点 4× B300 | TP4 / TEP4 / DEP4 | OpenAI 兼容 API |
| 2 | vLLM | FP8 | 单节点 8× H200 | TP8 / TEP8 / DEP8 | OpenAI 兼容 API |
| 3 | vLLM | BF16 | 单节点 8× B300 | TP8 / TEP8 / DEP8 | OpenAI 兼容 API |
| 4 | vLLM | BF16 | 双节点 16× H200 | TP16 / TEP16 / DEP16 | OpenAI 兼容 API |
| 5 | SGLang | FP8 | 单节点 4× B300 / 8× H200 | TP4/EP4、TP8/EP8 | OpenAI 兼容 API |
| 6 | Transformers(独立实现) | FP8 | 单节点 8× H200 | TP8 / EP8 | 离线生成 |
| 7 | Transformers(独立实现) | BF16 | 双节点 16× H200 | TP16 / EP16 | 离线生成 |
说明:DP、TP、EP 分别指数据、张量、专家并行;TEP = 张量 + 专家并行,DEP = 数据 + 专家并行。以上组合是官方起步配置,实际可用上下文长度与并发会随 KV cache 分配而变化。
方案逐一解析
1️⃣ TP4:4 卡 B300 的入门选择
最简单的起步方案:--tensor-parallel-size 4,DP=1,不开专家并行,走默认 MoE 后端。
vllm serve stepfun-ai/Step-5-Preview \ --tensor-parallel-size 4 \ --data-parallel-backend mp \ --disable-custom-all-reduce \ --max-model-len 1048576 \ --gpu-memory-utilization 0.85 \ --enable-prefix-caching \ --spec-method mtp --spec-tokens 3 \ --reasoning-parser step5 \ --enable-auto-tool-choice --tool-call-parser step5适合:只有 4 张 B300、追求快速跑通服务的场景。完整命令含端口、模型名等参数,参见 README.md。
2️⃣ TEP4:张量 + 专家并行,MegaMoE 加持
在 TP4 基础上增加--enable-expert-parallel,并在 B300 上切换为--moe-backend deep_gemm_mega_moe。稠密部分切张量、352 个专家 4 路分布,显存与通信更均衡。命令见 README.md。
3️⃣ DEP4:数据 + 专家并行,并发更优
--tensor-parallel-size 1 --data-parallel-size 4 --enable-expert-parallel:每卡持完整稠密主干,仅专家 4 路分片,4 个 DP rank 各服务一批请求。多用户同时访问时吞吐表现更好,但每卡要放下完整非专家权重,对单卡显存要求更高。命令见 README.md。
💡 TP/TEP 使用 DP=1;DEP 使用 TP=1。所有配置中
--max-num-seqs按每个 DP rank 独立计算。
4️⃣ TP8 / TEP8 / DEP8:8 卡 H200 与 B300
- FP8 + 8× H200:把上面的 4 卡命令改为
--tensor-parallel-size 8(TP8/TEP8)或--data-parallel-size 8(DEP8);⚠️ H200 属 Hopper 架构,保留--enable-expert-parallel但要去掉 MegaMoE 后端参数。 - BF16 + 8× B300:TEP8/DEP8 用 MegaMoE,TP8 用默认后端,参数组见 README.md。
注意:在 FP8 checkpoint 上设--dtype bfloat16不会把权重量化转回 BF16,BF16 部署必须挂载 BF16 checkpoint 并设置MODEL环境变量。
5️⃣ 16 卡双节点:TP16 / TEP16 / DEP16 跑 BF16
完整 BF16 模型 92 层仅参数就需约144.41 GiB/卡(TP=EP=8),超出 H200 单卡 140.40 GiB 上限,因此官方采用TP=EP=16,实测参数加载降至74.93 GiB/卡、每卡 22 个专家。
- TP16/TEP16:两节点各起一条命令,node 0 暴露 18000 端口,node 1 带
--headless,通过--master-addr互联,参数块见 README.md。 - DEP16:TP=1、16 路数据并行,每节点 8 个 rank(
--data-parallel-size-local 8),两节点共享同一>python3 convert.py --checkpoint "$STEP5_FP8_CHECKPOINT" \ --tp-size 8 --ep-size 8 --check-only torchrun --standalone --nproc-per-node=8 generate.py \ --tp-dir "$STEP5_FP8_OUT/tp8" --ep-size 8 \ --prompt "请介绍一下张量并行。" --max-new-tokens 128双节点 BF16 则用
--nnodes=2 --nproc-per-node=8,WORLD_SIZE=16,分片与--ep-size必须都是 16。详细步骤见 inference/README.zh.md。⚠️ 官方说明:BF16 完整
convert.py → generate.py文件分片流程尚未端到端验证;该路径支持贪心生成,不含连续批处理、分页 KV cache 与投机解码(MTP 层不加载)。新手选型:一张表看懂怎么选
你的情况 推荐方案 理由 只有 4× B300,想快速出 API vLLM FP8 +TP4 配置最简单 4× B300,要压榨 Blackwell 性能 vLLM FP8 +TEP4/DEP4(MegaMoE) 专家并行 + 专用后端 单节点 8× H200 在线服务 vLLM FP8 +TEP8 显存/通信均衡,Hopper 默认后端即可 多用户高并发 vLLM +DEP系列 每 rank 独立服务请求,并发线性受益 BF16 完整精度需求 双节点TP16/TEP16/DEP16 单节点 8 卡装不下(144.41 GiB/卡超限) 想要 EAGLE 投机解码 SGLang TP4/EP4 或 TP8/EP8 官方默认开启 EAGLE 3 步 研究/离线批处理,不想搭服务 TransformersTP8/EP8 独立实现, torchrun直接跑实用避坑清单
- B300 与 H200 的 MoE 后端不同:B300 的 TEP/DEP 加
--moe-backend deep_gemm_mega_moe,H200 去掉该参数——这是最常见的启动失败原因。 - 1M 上下文是输入 + 输出合计,KV cache 不够就先降
--max-model-len。 --max-num-seqs是按 DP rank计并发,DEP16 的实际并发远大于字面值。- BF16 部署必须用 BF16 checkpoint,不能靠改
--dtype转换。 - 双节点部署时,node 1 命令带
--headless,API 只在 node 0 的 18000 端口暴露(vLLM)。 - 独立推理路径要求
--ep-size等于进程总数,暂不支持 TP/EP 分离的进程网格。
快速开始
克隆仓库(本仓库为模型权重与独立推理代码):
git clone https://gitcode.com/StepFun/Step-5-Preview-BF16推荐路径:拉取官方 vLLM 镜像
docker pull vllm/vllm-openai:step-5-preview进入容器,按上文选型表选定方案执行vllm serve,随后用http://localhost:18000/v1/chat/completions(模型名step5)即可发起 OpenAI 兼容请求;SGLang 则为 30000 端口。请求示例见 README.md。相关资源
- 部署总览与全部启动命令:README.md
- 独立推理路径详解(含术语表、显存实测、验证结果):inference/README.zh.md
- 模型结构配置(352 专家 / top-8 / 92 层):config.json
- 权重分片转换器:inference/convert.py
- 离线生成入口:inference/generate.py
- 自定义 MoE 算子:inference/kernel.py
- B300 与 H200 的 MoE 后端不同:B300 的 TEP/DEP 加
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考