分布式训练的幕后花絮以及为什么 GPU 接线与策略一样重要

对分布式训练(从 DDP 和 FSDP 到中间的 ZeRO 阶段)的深入研究,以及为什么 GPU 之间的布线与您选择的策略一样重要分布式训练的幕后花絮以及为什么 GPU 布线与您的策略一样重要的帖子首先出现在《走向数据科学》上。

来源:走向数据科学

很简单。您加载权重、加载数据,然后等待其完成。对于大多数模型来说,这很好,唯一真正的成本是时间。当等待时间过长时,通常的解决方法是添加 GPU。每个人并行训练不同的数据片段,并且工作完成得更快。模型状态没有任何变化;你刚刚投入了更多的精力。

这涵盖了常见情况,即问题是时间。大型模型增加了第二个问题,更多的人无法解决:空间。在过去的一年里,我的主要工作涉及跨不同领域的大型基础模型的训练和微调,包括单细胞模型以及视觉和语言转换器模型。一旦超过数十亿个参数,模型、其梯度及其优化器状态就不再适合单个 GPU。您不能只是跨 GPU 复制工作,因为副本不适合其中任何一个。您必须拆分模型本身。

这两个问题映射到两种策略。 DDP(分布式数据并行)攻击时间。每个 GPU 都会保留模型的完整副本,并在批次的不同切片上进行训练。 FSDP(完全分片数据并行)攻击空间。该模型被分成多个部分,因此 GPU 不必保存整个模型。

不过,实际上并不仅仅只有两种选择。这些只是一个表盘的两端。在它们之间坐落着来自 DeepSpeed(微软的训练库)的 ZeRO 阶段,它可以让你一步一步地从一端滑到另一端,在每一站用一点内存换取一点沟通,而不是直接从“每个人都拥有一切”跳到“没有人拥有一切”。

在开始之前请注意一点。这里的一切都是经过测量的,而不仅仅是理论。策略比较在四个 A100 80GB GPU 上运行;硬件实验在 H200 机器上运行,其中两台机器具有完全相同的 GPU,以不同的方式连接在一起,结果证明这就是重点。

第 1 部分:软件:每个 GPU 所包含的内容

ZeRO:DDP 和 FSDP 之间的转折