教程介绍 || 什么是DDP || 单节点多GPU训练 || 容错机制 || 多节点训练 || minGPT训练
使用DDP进行“真实世界”模型训练¶
Created On: Sep 27, 2022 | Last Updated: Jan 23, 2025 | Last Verified: Nov 05, 2024
编写分布式训练脚本的最佳实践
保存/加载云端制品时的灵活性提升
当DDP不适用时
查看此教程中使用的代码,请访问`GitHub <https://github.com/pytorch/examples/tree/main/distributed/minGPT-ddp>`__
熟悉`多GPU训练 <../beginner/ddp_series_multigpu.html>`__和`torchrun <../beginner/ddp_series_fault_tolerance.html>`__
[可选]熟悉`多节点训练 <ddp_series_multinode.html>`__
2台或以上通过TCP连接的GPU机器(此教程使用了AWS p3.2xlarge实例)
所有机器上安装了支持CUDA的PyTorch 安装教程
可以跟随以下视频,或者访问`YouTube <https://www.youtube.com/watch/XFsFDGKZHh4>`__。
在视频中,我们将回顾使用多节点DDP训练GPT模型的过程。我们首先克隆`minGPT代码库 <https://github.com/karpathy/minGPT>`__并将Trainer类调整为与本系列教程类似的结构。观看视频以了解这些更改的详细信息。
我们使用`hydra <https://hydra.cc/>`__集中管理训练运行的所有配置。一旦代码被调整,我们先在一台单节点的机器上用4个GPU运行,然后在slurm集群上运行。
训练中使用的文件¶
trainer.py 包含了运行分布式训练迭代的Trainer类。
model.py 定义了模型架构。
char_dataset.py 包含了字符级数据集的``Dataset``类。
gpt2_train_cfg.yaml 包含了数据、模型、优化器以及训练运行的配置。
main.py 是训练任务的入口点。它设置了DDP进程组,读取所有配置并运行训练任务。
从云端保存和加载¶
在以上视频中,我们将训练快照直接保存到云端。这使我们能够从任何具有云存储访问权限的节点继续训练。
使用混合精度¶
为了加快速度,可以尝试使用`混合精度训练 <https://pytorch.org/docs/stable/amp.html>`__来训练模型。在混合精度模式中,某些训练过程将以降低的精度进行,而某些对精度更敏感的步骤则保持在FP32精度。
当DDP不足以处理时¶
典型训练任务的内存占用包括模型权重、激活值、梯度值、输入批次以及优化器状态。由于DDP在每个GPU上都复制模型,它仅在GPU有足够容量容纳完整占用时有效。当模型变得更大时,可以使用更为激进的技术:
激活检查点:在前向过程中不保存中间激活值,而是在后向过程中重新计算激活值。这种方法增加了计算量,但减少了内存占用。
完全切片数据并行:此方法不是复制模型,而是将模型“切片”分配到所有GPU中,并在前向和后向过程中通信与计算同时进行。阅读我们的`博客 <https://medium.com/pytorch/training-a-1-trillion-parameter-model-with-pytorch-fully-sharded-data-parallel-on-aws-3ac13aa96cff>`__,了解如何使用FSDP训练一个拥有1万亿参数的模型。
进一步阅读¶
使用DDP进行多节点训练 (本系列教程的上一个部分)