• Tutorials >
  • Training “real-world” models with DDP
Shortcuts

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

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

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

作者: Suraj Subramanian

What you will learn
  • 编写分布式训练脚本时的最佳实践

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

  • 当DDP不适用时

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

Prerequisites

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

在本视频中,我们将回顾在多节点DDP中训练GPT模型的过程。 我们首先克隆minGPT repo并重构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有足够容量容纳完整占用时才能工作。 当模型变得更大时,更激进的技术可能会有用:

  • activation checkpointing: 在前向传播过程中不保存中间激活值,而是在反向传播过程中重新计算激活值。这种方法会增加计算量,但会减少内存占用。

  • Fully-Sharded Data Parallel: 这里模型不会被复制,而是在所有GPU之间“分片”,并且在正向和反向传播中计算与通信重叠。阅读我们的博客,了解我们如何使用FSDP训练了一个1万亿参数的模型。

优云智算