Reference

PyTorch 分布式概览

分布式通信包 - torch.distributed

【LLM101】3.3 LLM预训练之分布式训练:数据并行、模型并行、混合精度训练、分布式通信

数据加载

对于训练过程来说,可以划分为几个阶段:数据加载、数据处理、模型训练,我们关注的分布式训练指的是模型训练阶段选择的并行策略,其旨在加速模型的训练。对于整个训练周期,除了模型训练、数据加载往往也是限制模型训练速度的关键。

数据加载涉及三个步骤:

  1. 将数据从磁盘读取到内存中
  2. 将数据从可分页内存传输到固定内存
  3. 将数据从主机端(host)的存储环境传输到计算端(GPU/NPU)的存储环境

提升数据加载速度可以从上面三个步骤入手,使用多进程处理数据加载以及将数据转移到固定内存。在Pytorch中,通过 num_workerspin_memory 进行实现

多个进程能够更快地加载数据,并且当数据处理时间足够长时,流水线数据加载几乎可以完全隐藏数据加载延迟。这是因为在处理当前批次的同时,将从磁盘读取下一个批次的数据,并将其传输到固定内存。如果处理当前批次的时间足够长,则下一个批次的数据将立即可用。这个想法需要为num_workers 参数设置适当的值。设置此参数,以使从磁盘读取批处理数据的速度比GPU处理当前批处理的速度更快(但不能过高,频繁的进程切换会浪费大量的系统资源)。

单进程数据加载和多进程数据加载的区别

单进程数据加载和多进程数据加载的区别

pin_memory设置与否的区别

pin_memory设置与否的区别

并行模式

分布式训练主要分为以下几种类型: