评价此页

简介 || 什么是 DDP || 单节点多 GPU 训练 || 容错 || 多节点训练 || minGPT 训练

使用 DDP 训练“真实世界”模型#

创建日期:2022 年 9 月 27 日 | 最后更新日期:2025 年 7 月 9 日 | 最后验证日期:2024 年 11 月 5 日

作者: Suraj Subramanian

您将学到什么
  • 编写分布式训练脚本时的最佳实践

  • 在云端保存/加载工件时增加了灵活性

  • 何时不适合使用 DDP

GitHub 上查看此教程中使用的代码

先决条件
  • PyTorch 已在所有机器上 安装 了 CUDA

  • 熟悉 多 GPU 训练torchrun

  • [可选] 熟悉 多节点训练

  • 2 个或更多 TCP 可达的 GPU 机器用于多节点训练(本教程使用 AWS p3.2xlarge 实例)

请跟随下面的视频或在 youtube 上观看。

在本视频中,我们将回顾在多节点 DDP 中训练 GPT 模型的过程。我们首先克隆 minGPT 仓库,并重构 Trainer 以匹配本系列中使用的结构。观看视频以了解这些更改的详细信息。

我们使用 hydra 来集中管理我们训练运行的所有配置。在代码重构完成后,我们首先在一个具有 4 个 GPU 的单节点上运行它,然后在 slurm 集群上运行。

用于训练的文件#

  • trainer.py 包含 Trainer 类,该类使用提供的数据集在模型上运行分布式训练迭代。

  • model.py 定义了模型架构。

  • char_dataset.py 包含一个字符级数据集的 Dataset 类。

  • gpt2_train_cfg.yaml 包含数据、模型、优化器和训练运行的配置。

  • main.py 是训练作业的入口点。它设置 DDP 进程组,读取所有配置并运行训练作业。

从云端保存和加载#

在上面的视频中,我们直接将训练快照保存到云端。这使我们能够灵活地从任何有权访问云存储桶的节点继续训练。

使用混合精度#

为了加快速度,您可以使用 混合精度 来训练模型。在混合精度中,训练过程的一部分以降低的精度进行,而另一些对精度下降更敏感的步骤则保持在 FP32 精度。

何时 DDP 不够用?#

典型的训练运行的内存占用包括模型权重、激活、梯度、输入批次和优化器状态。由于 DDP 会在每个 GPU 上复制模型,因此只有当 GPU 具有足够的容量来容纳全部占用空间时它才起作用。当模型变得更大时,更激进的技术可能有用。

  • 激活检查点:在正向传播期间不保存中间激活,而是在反向传播期间重新计算激活。在此方法中,我们进行更多的计算,但节省了内存占用。

  • 完全分片数据并行 (FSDP):在这里,模型不会被复制,而是被“分片”到所有 GPU 上,并且计算在正向和反向传播中与通信重叠。阅读我们的 博客 以了解我们如何使用 FSDP 训练一个 1 万亿参数的模型。

进一步阅读#