• 教程 >
  • 使用 DDP 训练“真实世界”模型
快捷方式

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

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

作者:Suraj Subramanian

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

  • 在云中保存/加载工件的灵活性增强

  • DDP 不适合使用的情况

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

先决条件

按照以下视频或 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 具有足够容量来容纳完整占用空间时才有效。当模型变得更大时,更激进的技术可能会有用。

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

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

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取适合初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源