趋近智
如今训练大型Transformer模型,经常会超出单个加速器(如GPU或TPU)的计算和内存限制。当模型拥有数十亿参数,或数据集需要非常大的批处理尺寸以实现稳定收敛时,将工作负载分散到多个设备上就变得必须。实现此目的的两种主要策略是:数据并行和模型并行。
数据并行可能是分布式训练中最直接、最常用的方法。其核心思想简单:在每个可用设备上复制整个模型,并让每个设备处理输入数据批次的不同部分。
数据并行工作流程。模型被复制,数据被分割,梯度在本地计算,跨设备汇总,并用于同步更新所有模型副本。
数据并行主要优点是其相对简单性,以及随着设备数量增加,训练时间可能实现近乎线性的加速,尤其是在计算量远超通信量时。大多数深度学习框架都提供其实现(例如PyTorch中的torch.nn.parallel.DistributedDataParallel或TensorFlow中的tf.distribute.MirroredStrategy)。
然而,数据并行有一个重要限制:整个模型必须能够放入单个设备的内存中。如果您的Transformer模型对于一个GPU来说太大,那么仅数据并行将无法满足需求。此外,随着设备数量的增加,同步梯度的通信开销可能成为瓶颈,从而降低增加更多设备带来的效益。
当模型过大无法放入单个设备时,模型并行就变得必须。我们不是复制模型,而是将模型本身分割到多个设备上。每个设备仅负责存储和计算模型的一部分。
分割模型主要有两种方式:
这种策略将模型垂直划分。不同的层(或层序列)被分配到不同的设备。数据顺序流经这些设备,形成一个处理流水线。
流水线并行将模型层分割到不同设备上。数据顺序流动。在没有微批处理的情况下(简化显示),设备会经历空闲时间(“气泡”)。
这种策略将模型水平划分。它涉及将单个大型层(如自注意力或FFN中的权重矩阵)内部的计算分割到多个设备上。
模型并行使得训练那些超出单个设备内存容量的模型成为可能。流水线并行通常更容易理解,但受气泡开销影响,需要微批处理以提高效率。张量并行可以处理非常大的层,但要求高设备间带宽并增加了实现复杂性。这两种形式通常比数据并行需要更细致的实现和调试。
实际中,训练目前先进的大型语言模型通常涉及组合这些策略。一种常见配置是使用流水线并行将层块分布到节点上,并使用张量并行分割每个流水线阶段内的大层。数据并行随后常应用于这种模型并行配置之上,在多组设备上复制整个流水线/张量分割模型以并发处理更多数据。这有时被称为3D并行(数据、流水线、张量)。
此外,诸如ZeRO(零冗余优化器)及其框架实现(例如DeepSpeed、PyTorch FSDP - 完全分片数据并行)提供了精巧的组合。它们作用类似数据并行,但不仅分片数据,还分片优化器状态、梯度,以及可选地将模型参数本身分片到数据并行工作器中。这大幅减少了每个设备的内存占用,使得数据并行能够扩展到比以前大得多的模型,有时甚至能消除中等大小模型对复杂流水线或张量并行的需求。
理解这些分布式训练模式对于有效地使用大型Transformer架构非常重要。尽管深度学习框架提供了实现这些策略的工具,但掌握数据流、通信模式和潜在瓶颈的底层机制,能让您选择正确的方法并优化针对特定模型和硬件配置的训练过程。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造