【LLM101】3.3 LLM预训练之分布式训练:数据并行、模型并行、混合精度训练、分布式通信
对于训练过程来说,可以划分为几个阶段:数据加载、数据处理、模型训练,我们关注的分布式训练指的是模型训练阶段选择的并行策略,其旨在加速模型的训练。对于整个训练周期,除了模型训练、数据加载往往也是限制模型训练速度的关键。
数据加载涉及三个步骤:
提升数据加载速度可以从上面三个步骤入手,使用多进程处理数据加载以及将数据转移到固定内存。在Pytorch中,通过 num_workers 和 pin_memory 进行实现。
多个进程能够更快地加载数据,并且当数据处理时间足够长时,流水线数据加载几乎可以完全隐藏数据加载延迟。这是因为在处理当前批次的同时,将从磁盘读取下一个批次的数据,并将其传输到固定内存。如果处理当前批次的时间足够长,则下一个批次的数据将立即可用。这个想法需要为num_workers 参数设置适当的值。设置此参数,以使从磁盘读取批处理数据的速度比GPU处理当前批处理的速度更快(但不能过高,频繁的进程切换会浪费大量的系统资源)。

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

pin_memory设置与否的区别
分布式训练主要分为以下几种类型:
数据并行(Data Parallelism,DP)
同一模型在多个设备上运行,每个设备处理不同的数据子集,适合大数据集但模型相对较小的情况。
模型并行(Model Parallelism,DM)
将模型分割到多个设备上,每个设备负责模型的不同部分,适合大模型无法放入单个设备内存的情况。
流水线并行(Pipeline Parallelism)
将模型按层划分,不同层分配到不同设备上,数据通过流水线方式在设备间传递。
混合并行(Hybrid Parallelism)
结合上述多种并行策略结合上述多种并行策略,如GPT-3等大模型训练中同时使用数据并行、模型并行和流水线并行。