USP-A Unified Sequence Parallelism Approach for Long Context Generative AI

Abstract

我们结合 DeepSpeed-Ulysses 和 Ring-Attention 提出了一种统一的 SP 方法,该方法对 Transformer 结构和网络硬件拓扑具有更强的鲁棒性。我们使用 SP 对序列长度为 208K 的LLAMA3-8B 模型进行训练,在两个8x A800 节点上实现了 47% 的MFU.

Introduction

Model # token
Claude 100,000
GPT-4 128,000
Gemini 1.5 Pro 10,000,000
OpenAI Sora ≥ 1,000,000

Sequence Parallelsim (SP) 是一种切分序列维度的方法。当序列长度和计算设备成比例增加时,DeepSpeed-Ulysses 保持恒定的通信量,而 Ring-Attention 通过计算和通信的重叠掩盖 SP 的 P2P 通信成本。DeepSpeed-Ulysses 的 SP 并行度被限制在注意力头数以内,Ring-Attention 由于矩阵乘法的分解降低计算效率。

根据以上内容我们

  • 提出了一种融合了 DeepSpeed-Ulysses 和 Ring-Attention 的统一序列并行方法。
  • 分析 SP 与 TP, ZeRO & PP 作为四维并行的应用。

Sequence Parallelism Approaches

SP 的难点在于 在 softmax 之后的矩阵乘法中,序列维度作为一个公共维度。这使得在对序列维度进行切片后,难以对张量进行划分,也难以将计算分布在多个节点上。

Megatron-SP

Megatron-SP 将原先 Megatron-LM 复制张量上的 AllReduce 操作 (左图) 替换为对切分数据数据上的等效 allgather 和 reduce-scatter 操作 (右图). 然而,如果没有 TP,Megatron-SP 不能独立使用,并且通信量与并行度无关。

The Principle of Megatron-LM Sequence Parallelism

Ring-Attention

Ring-Attention 可以看作 FlashAttention 的一个分布式版本。如下图所示,SP-Ring 采用嵌套的两级以环形方式组织 P2P 通信,其中每个设备同时发送和接收 KV,允许通信重叠计算。

Ring-Attention

DeepSpeed-Ulysses

如下图所示, DeepSpeed-Ulysses 对沿序列为度切分后的 QKVO 进行 All2All 通信,于是这四个张量的切分由序列维 L 变为注意力头维 hc. 因此,每个注意力头的 softmax(QK.T)V 的计算是完整的,并且可以使用 FlashAttention 来计算。

DeepSpeed-Ulysses

Unified Ulysses-Ring Sequence Parallelism

前文已经说过 DS-Ulysses 的最大并行度不能超过注意力头的数目,并且不适合 GQA (Group Query Attention) 和 MQA (Multi-Query Attention). 另外由于 TP 也需要切分注意力头维度,使得 DS-Ulysses 不能与 TP 一起使用。

而 Ring-Attention 由于矩阵乘法的分解降低计算效率。并且如果是因果注意力计算,其面临着负载不均衡的问题。解决方案是沿着序列维度重新排序输入序列,如下图所示。将序列为度划分成 2*ring_degree 份,并且按着 0 -> 1 -> …-> ring_degree-1 -> ring_degree-1 -> ring_degree-2 -> … -> 0 的顺序进行分配。

Load Balance Sequence Segment

Loading Balancing for SP-Ring

我们将 SP-Ring 和 SP-Ulysses 以一种称为 USP-Attention 的混合并行方式组织在一起,以划分序列维度。SP 进程组可以看作是一个 2D mesh,SP-Ring 在网格的每一列上运行,SP-Ulysses 在每一行上运行。

如下图所示前向传播时,scatter_idx=1,gather_idx=2. AllToAll4D 合并 QKV 的维度 L 并划分维度 hc,输出张量的形状为 (hc/N, bs, L, d). 对于逐一计算后的输出 O 沿着 L 维划分并合并 hc维。在反向传播过程中,scatter_idx=2,gather_idx=1.

Unified Sequence Parallelism Attention Implementation

USP-Attention 的通信模式特别适合于异构通信网络。如下图所示,可以允许 All2All 操作在高带宽互连中运行,而异步 P2P 通信在低带宽部分运行。

The Unified-SP is more robust to network hardware topology

TIP 1: 建议使用 Unified-SP 来代替 SP-Ring 和 SP-Ulysses,因为它包含了两者的功能,同时提供了额外的优势。

SP in 4D Parallelism

本节将分析 SP 与 DP, TP 和 PP 之间的关系,并讨论涉及 SQ 的 4D 并行设计的最佳方案。下表分析了不同并行度下标准 Transformer block 的通信和内存成本。Communications 的 Params columns 列的表示对 Transformer block 的参数和梯度进行集合通信操作。它包括 self-attention 中 4 个线性层的权重和偏置的参数/梯度,以及 FFN 层的 2 个线性层,在GPT-2 模型中总计 12×O(d²) 个元素。

该表是使用 fp16 (bf16) 的混合精度训练。模型参数和梯度的内存需求分别为 P 字节和 G 字节。在使用 Adam 优化器进行训练时,优化器状态 (Optimizer States, OS) 占用的显存大约是模型参数 (fp16) 显存的 6 倍。这是因为 Adam 优化器在计算梯度时,需要额外存储一些中间变量,如参数本身的 fp32 副本、动量和方差。峰值激活的内存需求是 A 字节,并行度为 N.

Communication (FWD+BWD) Split Dim Memory
Param Cost Act Cost P/G OS Act
SP-Ulysses allreduce 12O(d²) 8*all2all (8/N)O(bs*L*d) hc/L P+G 6P A/N
SP-Ring allreduce 12O(d²) P2P 4O(bs*L*d) L/L P+G 6P A/N
DP allreduce 12O(d²) 0 0 bs / bs P+G 6P A/N
ZeRO1 allgather + reducescatter 12O(d²) 0 0 hc/L P+G 6P/N A/N
SP-Unified + ZeRO1 allgather + reducescatter 12O(d²) P2P + 8*all2all ≤ 4O(bs*L*d) hc/L P+G 6P/N A/N
SP-Unified + ZeRO2 allgather + reducescatter 12O(d²) P2P + 8*all2all ≤ 4O(bs*L*d) hc/L P+(G/N) 6P/N A/N
SP-Unified + ZeRO3 2*allgather + reducescatter 18O(d²) P2P + 8*all2all ≤ 4O(bs*L*d) hc/L (P+G)/N 6P/N A/N
TP 0 0 4*allreduce 8O(bs*L*d) hc/d (P+G)/N 6P/N αA
TP-sp 0 0 6*allgather + 4*reducescatter 10O(bs*L*d) hc/d (P+G)/N 6P/N A/N

Data Pallelsim (DP): SP 和 DP 在反向传播过程中都需要对梯度进行 allreduce 操作。但 SP 为激活引入了额外的通信开销。当 ulysses_degree 大于 1 时,all2all 操作使得 SP 的通信开销将大于 DP. 当使用Ring-Attention 时,尽管额外的 P2P 通信能被计算掩盖的,但它引入了额外的性能问题。最理想的情况是在计算 attention 时不需要额外的通信,性能与 DP 相同。内存方面,SP 和 DP 都可以将激活占用空间减少为原来的 1/N.

TIP 2: 建议优先使用 DP 而不是 SP. 只有当 batch size 不足以进行划分时,才应该考虑是否使用 SP.

ZeRO: ZeRO 是一种分布式参数管理方法,通过对多个设备上的优化器状态 (ZeRO-1),梯度 (ZeRO-2) 和参数 (ZeRO-3) 进行切分,减少了每个计算设备的存储空间需求到原先的 1/N. 它也可以在 SP 进程组中操作,因为沿着批处理维度 (bs) 或序列维度 (L) 进行划分与 ZeRO 的方法相同。

TIP 3: 建议在使用 SP 时与 ZeRO-1/2 结合使用。也可以考虑使用 ZeRO-3 和 Offload技术来权衡通信成本以节省内存。

Tensor Pallelsim (TP): Megatron-LM 提出的 TP 方法将模型的参数在计算设备之间进行切分。并非所有的激活张量都被划分并分布在多个计算设备上。因此,激活的内存成本在表中用 αA 表示。Megatron-SP 用一个 allgather 和一个 reducescatter 取代了原先 TP 中的一个allreduce,将激活内存成本降低到 A/N. 通信量并不会随着并行度改变。另外使用 GQA/MQA 可以降低 SP 的通信成本,而 Megatron-SP 的通信成本保持不变。

TIP 4: SP 在大规模通信成本方面比 Megatron-SP 有优势。GQA 可以进一步降低 SP 的通信成本。

在内存占用方面, 即使 SP 采与 ZeRO-1/2 结合使用,Megatron-SP 占用量也更小。但当 SP 采用 ZeRO3 时,其内存占用与 Megatron-SP 相似。SP-Ulysses+ZeRO3 正是 DS-Ulysses 作者所采用的扩展序列长度的策略。

但 SP 仍能以较高的并行度扩展序列长度。当序列很长时,参数通信量占总通信量的比例相对较小。因此,ZeRO 引入的 allgather 操作的额外通信开销影响有限。

TIP 5: 单纯在训练中将 Megatron-SP 切换为 SP 并不能增加序列长度。但 SP+ZeRO3 可以达到与 Megatron-SP 近似的训练长度。

TIP 6: 建议使用更高的 SP 并行度,当注意力头数量有限时,可能需要设置较大的 ring_degree,以便在更多的计算设备上训练长序列,这是 Megatron-SP 方法无法实现。

Pipeline Parallelism (PP): PP 将模型所有的 Trasformer blocks 划分成多个部分,SP 在每个 Trasformer block 内部划分张量。因此,SP 和 PP 是完全兼容的。

TIP 7: 在四维混合并行中,进程组维度从小到大依次为 TP, SP-Ulysses, SP-Ring, ZeRO-DP, PP.

Experiments

Performance of Unified SP

在 L20 PCIe GPU 集群上进行 llama3-8B 的推理以评估 SP-Unified 性能,指标为 iter/sec. 满足 ulysses_degree * ring_degree = 8. Load Balacing Ring (lb-ring) 的性能优势随着序列长度增加而增加。

group_num bs seqlen head_num head_size ulysses_degree basic-ring lb-ring
4 1 8K 32 128 8 57.346 57.098
4 1 8K 32 128 4 153.134 152.189
4 1 8K 32 128 2 415.5 454.93
4 1 8K 32 128 1 358.595 361.969
4 1 32K 32 128 8 15.229 14.262
4 1 32K 32 128 4 28.584 32.818
4 1 32K 32 128 2 44.348 62.754
4 1 32K 32 128 1 40.478 58.377
4 1 128K 32 128 8 2.563 2.586
4 1 128K 32 128 4 3.217 4.235
4 1 128K 32 128 2 3.399 5.476
4 1 128K 32 128 1 3.131 5.186

当在 8x A100-SXM4 NVLink 节点上进行上面设置的实验时,当 ulysses-degree=8 时,32K 和 128K 序列长度的吞吐量都达到最高。这也验证了尽管 SP-Ring 通信开销可以通过与计算的重叠来隐藏,但它会导致计算效率的降低。

group_num bs seqlen head_num head_size ulysses_degree basic-ring lb-ring
4 1 32K 32 128 8 135.569 136.375
4 1 32K 32 128 4 103.525 132.979
4 1 32K 32 128 2 91.365 132.979
4 1 32K 32 128 1 81.985 113.79
4 1 128K 32 128 8 2.782 2.785
4 1 128K 32 128 4 2.024 2.771
4 1 128K 32 128 2 1.73 2.89
4 1 128K 32 128 1 1.628 2.91

End-to-End SP Performance in Megatron-LM

我们在 Megatron 我们对 DP 和 SP 都使用 ZeRO-1,并对张 Megatron-SP 应用 Sp 优化。不使用梯度累积或激活重计算。实验设置为两个 GPU 节点,每个节点配备 8x A800 GPU,通过 400GB/s NVLink 连接,通过 1.6 Tbps RDMA 进行节点间通信。我们考虑因果注意力中下三角的 MFU.

SP vs. DP

我们已经将 SP-Unified 方法整合到 Megatron-LM 中。目前 Megatron-LM 只有 SP-Ring 的初步版本,缺乏 SP-Ulysses 的实现。

我们比较了在相同 LLAMA2-7B 工作负载下,在单个 A800 GPU 节点上 SP 和 DP 的性能。batch size 为 8. SP-Unified 在单个节点中通常在 ulysses-degree=8 时有最佳性能。如下图所示,DP 在各种输入序列长度上优于 SP-Unified,这证实了我们在提示2中的结论。

Hybrid SP and TP

下表给出了 llama2-7B 在 8xA800 GPU 80GB 单节点上的性能。当 seqlen=64K 时,SP-only 会出现 OOM 问题,这验证了 SP 的内存效率低于 Megatron-SP.

当 global-bs=16, sequence=30K 时,SP-ulysses 的性能最优,明显优于其他 SP 和 TP 混合策略。在吞吐量方面,它也比 TP-sp-only 好 26%. 这表明,尽管 SP-Ulysses 和 Megatron-SP 的通信成本相似 (???明明不一样),但在 NVLINk 连接的情况下,SP-Ulysses 的实际通信效率高于 Megatron-SP.

seqlen global-bs tp-degree ulysses-degree ring-degree FLOPS/GPU MFU
64K 1 4 2 1 154.49 0.50
64K 1 4 1 2 151.40 0.49
64K 1 8 1 1 141.85 0.45
30K 16 2 4 1 155.98 0.50
30K 16 2 1 4 147.77 0.47
30K 16 4 2 1 150.05 0.48
30K 16 1 8 1 163.42 0.52
30K 16 1 1 8 142.16 0.46
30K 16 8 1 1 129.12 0.41

我们采用 TP 和 SP-Unified 的混合并行策略对 LLAMA3-8B 跨两个节点的训练吞吐量进行测试,因为 LLAMA3-8B 只有 8 个头,所以 ulysses-degree 和 TP-degree 的最大乘积为 8.

序列长度为 64K 和 80K,TP-degree=8 时,可以增加 TP+SP 的 global-bs. 然而,SP-only 在使用 global-bs=2 时总是存在 OOM 问题。将 global-bs 增加到 2,在序列长度为 64K 时,TP+SP 的吞吐量提高 2.7%. 但在序列长度为 80K 时,global-bs=2 的 TP+SP 的吞吐量仍然比 global-bs=1 的 SP-only 差。当序列长度达到 120K 时 两个TP+SP 混合设置的 MFU 为 0.47 和 0.48,非常接近最佳值。

seqlen global-bs tp-degree ulysses-degree ring-degree FLOPS/GPU MFU
64K 1 1 8 2 136.31 0.44
64K 1 1 4 2 137.48 0.44
64K 1 2 4 2 129.44 0.41
64K 1 1 2 8 121.83 0.39
64K 1 8 1 2 129.75 0.42
64K 1 4 2 2 122.45 0.39
64K 1 2 4 2 87.67 0.28
64K 1 4 1 4 89.35 0.29
64K 1 2 2 4 122.57 0.39
64K 1 2 1 8 101.35 0.32
64K 2 8 1 1 141.20 0.45
80K 1 1 8 2 147.46 0.47
80K 1 1 4 4 148.90 0.48
80K 1 1 2 8 140.13 0.45
80K 1 1 1 16 132.86 0.43
80K 1 8 1 2 136.16 0.44
80K 1 4 2 2 137.49 0.44
80K 1 2 4 2 111.05 0.36
80K 1 4 1 4 110.81 0.36
80K 1 2 2 4 130.27 0.42
80K 1 2 1 8 121.14 0.39
80K 2 8 1 1 144.40 0.46
120K 1 4 2 2 152.51 0.49
120K 1 2 4 2 136.63 0.44
120K 1 8 1 2 145.92 0.47
120K 1 4 1 4 150.96 0.48

我们在 2 个 8xA800 NVLink 节点上探索了序列长度的上界,结果如下表所示。由于 Megatron-SP 具有更高的内存效率,因此对于训练最长的序列,并行度限制为 8 个注意力头数的情况下应全部分配给 Megatron-SP.

seqlen global-bs tp-degree ulysses-degree ring-degree FLOPS/GPU MFU
160K 1 4 2 2 158.64 0.51
160K 1 8 1 2 156.63 0.50
208K 1 8 1 2 147.26 0.47
160K 1 4 1 4 159.37 0.51
190K 1 4 1 4 157.08 0.50

Convergence

我们使用相同的数据集比较了 USP 和 DP 的收敛性差异,在 4 个 GPU 上测试了 10K 次迭代的损失函数曲线。我们发现 USP 和 DP 的曲线完全重合。


USP-A Unified Sequence Parallelism Approach for Long Context Generative AI
https://darkenstar.github.io/2024/11/14/USP-A Unified Sequence Parallelism Approach for Long Context Generative AI/
Author
ANNIHILATE_RAY
Posted on
November 14, 2024
Licensed under