---
tags: [CANN]
doc_type: knowledge-note
返回目录: "[[计算机系/昇腾与CANN/大模型与算子专题学习导航|大模型与算子专题学习导航]]"
上一篇: "[[计算机系/昇腾与CANN/大模型结构解析与NPU迁移诊断|大模型结构解析与NPU迁移诊断]]"
下一篇: "[[计算机系/昇腾与CANN/推理框架与KV缓存调度|推理框架与KV缓存调度]]"
前置知识: "[[计算机系/昇腾与CANN/大模型结构解析与NPU迁移诊断|大模型结构解析与NPU迁移诊断]]"
后续学习: ["[[计算机系/昇腾与CANN/多模态视频生成推理优化|多模态视频生成推理优化]]"]
---

# NPU 推理并行策略设计

并行策略决定数据、权重和计算如何分布到多张卡，也决定卡间需要交换什么。设计的目标是同时满足容量、吞吐与时延约束，而不是单纯使用更多设备。单卡瓶颈判断见[模型结构与迁移诊断](大模型结构解析与NPU迁移诊断.md)。

## 1. 先理解通信原语

AllGather 把各卡持有的不同分片汇集到每张卡；ReduceScatter 先对对应数据做归约，再让每卡保留一部分；AllReduce 则让每卡得到完整归约结果。AllToAll 用于各卡向不同目标发送不同分片，例如 MoE 的专家分派。

![集合通信与数据分布](.assets/CANN推理专题/parallel-9.png)

一种典型 Ring AllReduce 由 ReduceScatter 和 AllGather 两阶段组成。设 $p$ 张卡、每卡初始张量大小为 $D$ 字节，每卡累计发送量约为：

$$
V_{send}=2\frac{p-1}{p}D.
$$

接收量也约为该值，发送与接收相加时需再乘 2。通信耗时还包含每轮启动延迟、链路带宽和拓扑竞争；小消息常受延迟影响，大消息更容易受带宽影响。因此“字节数少”并不必然等于“耗时短”。

## 2. DP、TP 与 PP 分别切什么

### DP：不同副本处理不同请求

数据并行让每组设备持有模型副本，并独立处理分配到的请求。推理没有训练时的梯度同步，因此通常不需要逐层做模型梯度 AllReduce。请求路由、缓存迁移或共享服务仍可能产生通信。

DP 适合模型已能放入单卡或单个模型并行组，且希望扩大总吞吐的场景。增加副本不能直接解决一个请求的模型容量问题。

### TP：切分同一层的张量计算

对 $Y=XW$，沿 $W$ 的输出维切分后，各卡产生不同输出列，必要时拼接；沿输入维切分时，各卡计算部分和，完整输出需要求和。两种切法通常配合使用，使中间激活尽可能保持分片状态。

![张量并行的计算与通信](.assets/CANN推理专题/parallel-14.png)

常见 Transformer TP 实现会在注意力和 FFN 的输出阶段进行归约，但“每层固定两次 AllReduce”取决于具体结构、融合及序列并行方案。TP 可以跨机器，是否合适取决于通信拓扑与成本，并不存在统一的“只能单机”限制。

### SP：让部分激活沿序列维分片

序列并行常用于 TP 中的归一化、Dropout 等阶段，减少激活冗余。每卡拥有部分 Token 的完整隐藏向量时，可以在本地完成这些 Token 的 LayerNorm。LayerNorm 需要沿隐藏维求统计量，不能把隐藏维已经切开的局部片段当作完整向量直接归一化。

![序列并行与张量并行衔接](.assets/CANN推理专题/parallel-16.png)

### PP：把不同层放在不同阶段

流水线并行按层切分模型，阶段之间通过点对点传输激活衔接。微批可以提高阶段重叠程度，但流水线填充、排空以及各阶段负载不均会产生气泡。

PP 擅长分摊权重容量。对一个自回归请求，后续 Token 依赖前一个 Token 的结果，因此不能只凭多阶段同时工作就推导出单请求时延下降。

## 3. EP：将专家分布到不同设备

MoE 的执行链路是路由、Token Dispatch、专家计算、结果 Combine。专家并行让不同设备保存不同专家，通常需要分派和回收两个方向的 AllToAll。

![专家并行与路由通信](.assets/CANN推理专题/parallel-20.png)

Top-K 路由可能把同一 Token 发给多个专家，因此通信量与实际分派数相关。热点专家会造成一部分卡忙、一部分卡等待；小专家批量还可能降低矩阵计算效率。专家负载平衡需要综合观察 Token 分布、通信和 GEMM 效率。

EP 并不是 MoE 唯一的部署方式，也可结合 TP、专家复制或分层存储。DP、TP、EP 的分组关系必须明确，否则容易重复计算设备数，或将应属于一个通信组的数据发往另一个组。

## 4. CP：分摊长上下文注意力

### Ring Attention

每卡保留局部查询 Q，K/V 分块沿环流转，使每个查询最终接触完整的历史范围。每次得到的局部注意力结果需要通过稳定的 Softmax 统计量合并。

![Ring Attention](.assets/CANN推理专题/parallel-24.png)

设第 $i$ 个 KV 分块的归一化结果为 $O_i$，对应分数的 log-sum-exp 为 $\ell_i$，则：

$$
m=\max_i\ell_i,\qquad
O=\frac{\sum_i e^{\ell_i-m}O_i}{\sum_i e^{\ell_i-m}}.
$$

直接对各块已经归一化的输出相加是错误的，因为每块 Softmax 的分母不同。

若完整 K/V 大小为 $2BSH_{KV}d_hb$，均匀分片的环式交换中，每卡接收量约为完整 K/V 的 $(p-1)/p$。卡数增大时，轮数增加，而这个每卡字节量趋近完整 K/V 大小；不能把轮数增长直接解释为每卡总字节量无限线性增长。

### Ulysses：交换序列与头的分片方向

Ulysses 通过 AllToAll，把“部分序列、全部头”转换为“完整序列、部分头”，完成局部头的注意力计算后再反向交换。

![Ulysses 注意力并行](.assets/CANN推理专题/parallel-25.png)

常规实现需要注意头数、并行度和 KV 头布局的兼容性。Ulysses 与 Ring 可以组合成二维并行：一个维度切头，另一个维度继续分摊上下文，从而缓解单一切分方式的限制。

![混合上下文并行](.assets/CANN推理专题/parallel-26.png)

### Decode 的 KV 并行

Decode 每轮查询长度很短，但历史 KV 可能很长。可以复制当前查询，让每卡读取自己持有的一段 KV，再用相同的 log-sum-exp 规则归约局部结果。此时优化重点是减少每卡 KV 读取，并控制结果归约成本。

上下文分片并非只能服务 Prefill；应区分长序列 Prefill 的大量查询与 Decode 的少量查询对应的不同执行方式。

## 5. 视频生成中的并行维度

![生成模型的并行维度](.assets/CANN推理专题/parallel-30.png)

Classifier-Free Guidance 常包含有条件和无条件两个预测分支：

$$
\epsilon=\epsilon_u+s(\epsilon_c-\epsilon_u).
$$

两分支可以并行，但合并前必须保证各自结果已就绪。VAE 可以按空间块切分，边界需要交换足够的邻域；邻域大小取决于整个网络的有效感受野，还要考虑跨块归一化、时间维算子等依赖。

当 CFG、Ulysses、Ring 使用正交设备维度时，设备数可写为各并行度的乘积。若它们复用设备或采用不同阶段分组，则不能机械相乘。

## 6. 用模型阶段与拓扑决定方案

![组合并行策略](.assets/CANN推理专题/parallel-33.png)

先估算权重、KV 和工作空间容量，再比较计算与网络成本。优先在高速互连域中放置通信密集的并行组，跨域扩展则考虑更粗粒度的请求或流水线分工。

不同模块可以采用不同策略：注意力适合的切法不一定适合 MoE；Prefill 与 Decode 也可以使用不同并行配置。切换配置时的布局转换和缓存传输必须计入总耗时。最终选择应同时检查吞吐、单请求时延、尾部时延和显存余量。
