跳转至

序列并行

概述

序列并行(SP)在 Transformer 层的通信边界处,将 token 维度跨张量并行 rank 进行分片。

在 vLLM Ascend 上,SP 目前覆盖 MoE 路径(SP MoE)。注意力 o_proj 以 TP all-reduce 结束,因此其输入在每个 TP rank 上都是复制的。将这些复制的 token 直接送入专家,会在专家并行下造成重复的计算和通信。SP MoE 则保持专家输入按序列分片,并在 MoE 输出边界处恢复预期布局。

原始的 flashcomm 功能在功能上与 SP 功能重叠,自 v0.27.1 起已弃用。

原理

SP MoE 在每个 Transformer 层中沿 token 维度对输入进行分片。因此,不同的 TP rank 处理不同的 token,避免对相同 token 进行重复的专家计算。

MoE 层的主要数据流如下:

Sequence-parallel input sharding
  -> TP all-gather: collect tokens from all ranks
  -> attention
  -> TP reduce scatter
  -> RMS Norm
  -> Router
  -> all-to-all
  -> Moe

不同的 DP rank 可能具有不同数量的有效 token。因此,all-gather 之后的缓冲区不能被视为连续的有效 token 序列;必须根据每个 rank 的本地 token 大小进行去填充和零填充。这使 token 在专家计算期间保持按序列分片,并减少重复计算和不必要的通信。

如何使用

当前启用 SP 需要遵循以下步骤:

  • tensor_parallel_size > 1 且 data_parallel_size > 1。
  • 已设置 enable_expert_parallel(仅限 MoE 模型)。
  • 通过 --additional-config '{"enable_flashcomm1": true}' 设置 flashcomm1

临时 FlashComm 开关(仅限 Ascend)

在 SP 支持完全验证之前,vLLM Ascend 通过原始 flashcomm 选项保留 SP MoE 选项。

若要启用上游 SP MoE,请设置以下其中一项(推荐 additional_config 形式):

# Preferred.
vllm serve <moe-model> \
  --data-parallel-size 2 \
  --tensor-parallel-size 2 \
  --enable-expert-parallel \
  --additional-config '{"enable_flashcomm1": true}'
# Kept for compatibility.
VLLM_ASCEND_ENABLE_FLASHCOMM1=1 vllm serve <moe-model> \
  --data-parallel-size 2 \
  --tensor-parallel-size 2 \
  --enable-expert-parallel

此开关是临时且已弃用的。引用任一形式都会从 init_ascend_config 记录 FlashComm is deprecated 警告,并且该覆盖项带有 TODO,以便在 SP 受支持后将其移除——此后,上述上游配置将直接生效。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 vl/vllm-ascend