技术指南

数据并行性

数据并行性通过在多个 GPU 上复制模型来更快地训练一个模型,每个 GPU 处理数据批次的不同部分。

阅读时间:2分钟最后更新

概述

It is the workhorse technique that lets teams scale to dozens or thousands of accelerators.

深入探讨

在数据并行性中,每个 GPU 都保存模型权重的相同副本,但处理不同的小批量训练示例。每个设备独立地计算前向和后向传递,产生自己的一组梯度。在权重更新之前,使用全归约通信操作对所有 GPU 上的梯度进行平均,因此每个副本都保持同步,并且表现得就像在一个大型组合批次上进行训练一样。这有效地增加了吞吐量:8 个 GPU 每步可以处理大约 8 倍的数据。问题是每个 GPU 必须适应内存中的整个模型、其梯度和优化器状态,​​因此当模型对于单个设备来说太大时,普通数据并行性没有帮助。

技术洞察

关键操作是 all-reduce,它将跨设备的梯度求和并重新分配结果。 NCCL 和 Horovod 等库使用的 Ring all-reduce,在逻辑环周围传递梯度块,因此总通信独立于 GPU 数量。 PyTorch 的 DistributedDataParallel 将此通信与后向传递重叠,为早期层触发梯度同步,而后面的层仍在计算,隐藏了大部分网络延迟。

战略影响

成本与预算

多年来,架构决策决定着性能和运营成本。

更清晰的判决

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。

质量控制

更好的工程选择可以减少生产中的可靠性事故。

数据并行的未来

纯数据并行性越来越多地与分片和模型并行性相结合,形成针对万亿参数模型的混合“nD 并行性”策略。期望更智能的梯度压缩、异步和重叠通信以及拓扑感知的全归约,利用节点内的快速 NVLink 和跨节点的较慢的 InfiniBand。随着集群的增长,降低通信与计算的比率仍然是保持数千个 GPU 繁忙的核心工程挑战。

现实世界的实施

使用 PyTorch DistributedDataParallel 在一台服务器的 8 个 GPU 上训练 ResNet 图像分类器,每个 GPU 处理 256 个图像批次中的 32 个。

使用 Horovod 在数百个 GPU 上扩展 BERT 预训练,使用环 all-reduce 来同步每个步骤的梯度。

在多节点集群上微调推荐模型,其中每个节点处理不同的用户交互分片。

使用 TensorFlow 的 MirroredStrategy 在单个工作站上的多个 GPU 上传播视觉模型的训练,只需最少的代码更改。

风险与防护栏

优化一项基准测试可以隐藏更广泛的系统弱点。

基础设施和维护成本常常被低估。

随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

实施路线图

1

在实施之前定义延迟、质量和成本目标。

2

在实际负载和数据条件下进行基准测试。

3

仪器监控错误、漂移和用户影响。

4

在扩展之前准备回滚和事件响应路径。

不断探索

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the Data Parallelism quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

开始测验

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

下一个指南

人工智能数据治理

常见问题

What is Data Parallelism?

数据并行性通过在多个 GPU 上复制模型来更快地训练一个模型,每个 GPU 处理数据批次的不同部分。这是一种主力技术,可以让团队扩展到数十或数千个加速器。

在标准数据并行性中,每个 GPU 保存什么?

每个 GPU 都保留模型的完整副本,并处理数据批次的不同部分,这就是它的“数据”并行性而不是模型并行性的原因。

哪个通信操作使模型副本每一步保持同步?

每次向后传递后,梯度都会通过 all-reduce 跨设备进行组合(通常先求和然后求平均值),因此每个副本都应用相同的更新。

普通数据并行性的主要限制是什么?

由于每个 GPU 都保存了所有内容的完整副本,因此当模型太大而无法在一台设备上安装时,数据并行性没有任何帮助。

为什么环全归约对于大量 GPU 有吸引力?

环全归约在逻辑环周围传递梯度块,因此无论有多少个 GPU 参与,每个 GPU 发送的总带宽都保持不变。

PyTorch DistributedDataParallel 如何隐藏通信延迟?

DDP 开始同步较早层的梯度,而较晚的层仍在计算中,从而使网络通信与计算重叠。