如果你曾经尝试过训练像 Llama 这样的大型语言模型 (LLM) 或像 ViT 这样的视觉巨型模型,你就知道其中的艰难: 单块 GPU 根本无法胜任。为了训练这些庞然大物,我们需要跨 GPU 集群进行分布式学习。
但问题在于: 仅仅拥有一个集群是不够的。你必须决定如何拆分模型。是拆分数据?拆分层?还是在层内部拆分张量?
历史上,这往往是在两种“两难”选择中做决定:
- 手动并行 (Manual Parallelism, MP) : 这要求你必须是硬件天才,需要手动调整每个张量在传输线路上的移动方式。
- 自动并行 (Automatic Parallelism, AP) : 试图由软件自动完成,但往往导致性能次优,因为它通常是将问题拆解成碎片来解决,而不是作为一个整体。
UniAP 登场。
在这篇文章中,我们将深入探讨一篇引人入胜的论文,该论文提出了一种利用混合整数二次规划 (MIQP) 来统一层间 (Inter-layer) 和层内 (Intra-layer) 并行的新方法。结果如何?该系统不仅能比现有的最先进方法更快地找到最佳并行策略,还能将训练吞吐量提高达 \(3.80\times\)。
问题所在: 并行策略的割裂
在介绍解决方案之前,我们需要了解分布式训练的现状。并行策略通常分为两类:
1. 层间并行 (Inter-Layer Parallelism)
这涉及在层与层“之间”有效地划分模型。
- 流水线并行 (Pipeline Parallelism, PP) : 想象一条流水线。设备 A 计算第 1 层,将结果传递给设备 B,由设备 B 计算第 2 层。当 B 在工作时,A 开始处理下一批数据。
2. 层内并行 (Intra-Layer Parallelism)
这涉及在层“内部”拆分工作。
- 数据并行 (Data Parallelism, DP) : 每个 GPU 都有一个模型副本,但处理不同的数据切片。它们在最后同步梯度。
- 张量并行 (Tensor Parallelism, TP) : 单个巨大的矩阵乘法被拆分到多个 GPU 上进行。
- 全分片数据并行 (Fully Sharded Data Parallelism, FSDP) : 一种内存高效的 DP 版本,其中参数、梯度和优化器状态被分片存储在各个工作节点上。
当前自动并行的局限性
现有的自动化工具 (如 Alpa 或 Galvatron) 通常采用分层 (hierarchical) 方法。它们可能先决定如何对模型进行流水线处理 (层间) ,然后再弄清楚每个阶段如何拆分张量 (层内) 。
这就像在确认能否付得起房租之前就决定住在哪个城市一样。通过按顺序解决这些问题,你很早就把自己锁定在一个次优解上。
UniAP (Unified Automatic Parallelism,统一自动并行) 采取了不同的方法。它同时考虑所有策略——PP、DP、TP 和 FSDP。

如图 1 所示,UniAP 着眼于全局以找到真正的最优策略,而分层方法通常满足于“局部最优”。
UniAP 架构
那么,UniAP 如何在不耗费数年计算时间的情况下实现这种联合优化呢?研究人员将策略搜索视为一个数学优化问题。
工作流程如图 2 所示,包含三个主要阶段:
- 性能分析 (Profiling) : 收集有关模型和硬件的硬数据。
- 统一优化过程 (Unified Optimization Process, UOP) : 使用 MIQP 的核心引擎。
- 执行 (Execution) : 将数学结果转化为可运行的计划。

让我们拆解一下“UOP”黑盒内部发生的魔法。
1. 性能分析与代价建模
首先,UniAP 需要知道运行代价。它对硬件环境进行分析,以测量通信带宽 (P2P 和 All-Reduce 速度) 和计算能力。它还对模型进行分析,以了解每一层的内存占用和计算时间。
它使用两个代价模型:
- 时间代价模型: 估算前向/后向传播时间和通信延迟。
- 内存代价模型: 估算内存使用情况。
对于内存,特别是模型状态 (参数 + 梯度 + 优化器) ,UniAP 使用以下公式:

这里,\(m_s\) 是内存代价,\(ps\) 是参数大小,\(ts\) 和 \(fs\) 分别代表张量并行和 FSDP 的大小。这个公式允许系统准确预测特定策略将消耗多少显存 (VRAM) 。
2. 混合整数二次规划 (MIQP)
这是论文的核心。研究人员将“如何快速训练该模型”的问题转化为一种称为混合整数二次规划的数学格式。
- 混合整数 (Mixed Integer) : 某些决策是二元的 (0 或 1) 。例如,“第 5 层是否在 GPU 2 上?” (是/否) 。
- 二次 (Quadratic) : 代价函数涉及变量相乘 (例如,将两个连接的层放在同一阶段会降低代价,这涉及二次项) 。
目标: 最小化 TPI
目标是最小化每次迭代时间 (Time Per Iteration, TPI) 。 在流水线系统 (如 GPipe) 中,速度取决于流水线的总延迟加上最慢阶段 (瓶颈) 所花费的时间。

基于图 3 中的分解,目标函数如下所示:

该方程试图最小化处理时间 (\(p_i\)) 和通信时间 (\(o_j\)) 的总和,并根据微批次 (micro-batches) 的数量 (\(c\)) 进行加权。
约束条件
没有规则就没有优化。UniAP 施加了几个关键约束以确保解决方案有效。
A. 计算与通信约束 求解器计算每个阶段的代价。如果你将特定层分配给某个阶段,它们的计算代价会累加。如果层与层之间跨设备通信,那会增加通信代价。


B. 内存约束 这点至关重要。所选策略绝不能导致显存溢出 (OOM) 错误。任何设备上激活值和模型状态的总内存必须小于设备限制 \(m\)。

C. 保序 (连续性) 约束 流水线并行不是随机的。如果你把第 1、2、3 层放在 GPU A 上,你通常不能把第 4 层放在 GPU B 上,然后又把第 5 层放回 GPU A。流水线阶段必须是层的连续集合。

为了在数学上强制执行这一点,论文使用辅助变量 \(Z\) 来确保如果一个节点在一个阶段中,其依赖关系得到尊重。

D. 放置与选择约束 最后,每一层必须被放置在某个地方,并且每一层必须只选择一种策略。


统一优化过程 (UOP)
定义好数学模型后,UniAP 运行一种算法 (论文中的算法 1) ,该算法:
- 枚举可能的流水线大小 (\(deg\)) 和微批次数量 (\(c\))。
- 将代价矩阵和约束条件输入求解器 (如 Gurobi) 。
- 求解器找到 TPI 的全局最小值。
可视化解决方案
该过程的输出是一组矩阵,准确指示每一层的去向及其使用的策略。

如图 7 所示,矩阵 \(\mathbf{P}\) (放置) 和 \(\mathbf{S}\) (策略) 给出了执行的确定性蓝图。例如,第 0 层可能在第 1 阶段使用数据并行,而第 1 层使用数据并行和张量并行的混合。
矩阵表示在数学上如下所示:

实验与结果
研究人员在不同的硬件环境 (NVIDIA V100、A100 甚至 DCU) 下,使用多种模型 (BERT、T5、ViT、Swin、Llama) 将 UniAP 与顶级基线 (如 Galvatron 和 Alpa )以及手动方法 (如 Megatron-LM 和 DeepSpeed )进行了测试。
1. 吞吐量与优化速度
结果令人印象深刻。UniAP 不仅找到了更快的执行策略 (更高的吞吐量) ,而且找到策略的速度也快得多 (更低的优化时间) 。

在表 1 中,注意 EnvC 上的 Llama-7B 。 UniAP 实现了 4.63 samples/s , 而 Galvatron 仅为 1.22。这是 3.80 倍的加速 。 为什么?UniAP 意识到在基于 PCIe 的 GPU 集群上,通信是瓶颈。它选择了 8 阶段流水线,并尽量减少张量并行,以减少跨设备通信。受限于其搜索空间的 Galvatron 选择了一种通信繁重的策略,阻塞了带宽。
此外,看看 BERT-Huge 的优化时间 。 UniAP 仅用 0.37 分钟就找到了解决方案,而 Alpa 花了超过 80 分钟。这就是 MIQP 求解器相对于复杂动态规划的效率优势。
2. 可扩展性
随着集群规模的扩大,UniAP 还能撑得住吗?

图 5(a) 显示吞吐量随节点数量线性增长。更重要的是, 图 5(b) 显示 UniAP 寻找策略所需的时间并没有呈指数级爆炸,这使其适用于大规模集群。
这种可扩展性即使在非 NVIDIA 硬件 (DCU) 上也成立,如表 4 所示:

3. 为什么联合优化很重要
研究人员进行了一项消融实验 , 以证明结合层间和层内并行实际上是必要的。他们将完整的 UniAP 与仅限于层间或仅限于层内策略的版本进行了比较。

图 6 中的结果非常鲜明。对于许多模型,限制搜索空间会导致性能极差或完全失败 (SOL \(\times\) 表示未找到解决方案,通常是由于 OOM) 。这验证了论文的核心前提: 必须进行联合优化。
案例研究: “EnvB”上的 BERT-Huge
为了具体说明,让我们看看 UniAP 在特定集群 (“EnvB”——2 个节点,节点间带宽较慢) 上为 BERT-Huge 找到的最佳策略。

如图 9 所示,UniAP 做了一些聪明的事情:
- 它使用了 2 阶段流水线 (每个节点一个阶段) ,以最大限度地减少缓慢的节点间通信。
- 在节点内部,它使用了张量并行 (TP) , 因为节点内带宽 (PCIe) 很快。
- 它有选择地对特定层应用 FSDP (绿色框) ,以将所有内容放入内存中。
手动操作的工程师可能很难平衡所有这些因素,但数学模型自动解决了这个问题。
结论
分布式训练正在成为必需品,而非奢侈品。然而,配置这些系统的复杂性一直是一个主要障碍。
UniAP 代表了向前迈出的重要一步。通过将并行策略问题公式化为混合整数二次规划 (MIQP) 任务,它统一了层间和层内策略的搜索。主要结论如下:
- 统一 > 分层: 联合优化 PP、DP、TP 和 FSDP 比分步优化产生更好的结果。
- MIQP 速度快: 与传统搜索算法相比,数学求解器在导航这些巨大的搜索空间方面效率极高。
- 硬件感知: 无论是配备 NVLink 的 A100 集群还是基于 PCIe 的设置,UniAP 都能适应硬件的特定带宽和内存限制。
对于研究大型语言模型的学生和研究人员来说,像 UniAP 这样的工具为更易用、更高效和更自动化的模型训练铺平了道路。在白板上手动计算张量拆分的日子可能终于要结束了。
](https://deep-paper.org/en/paper/2307.16375/images/cover.png)