一、简介
1、作用
- 提高训练效率
2、方案
- 3D并行训练
- 零冗余优化器
- 激活重计算
- 混合精度训练
二、3D并行训练
1、组成
- 数据并行
- 流水线并行
- 张量并行
2、数据并行
- 作用:提高训练吞吐量,通过增加GPU提升训练效率
- 原理:将模型参数和优化器状态复制到多个GPU上,然后将训练数据平均分配到这些GPU上,这样每个GPU只需要处理分配给它的数据,然后执行前向传播和反向传播以获得梯度,当所有GPU都执行完之后,该策略会将不同的GPU梯度进行平均,以得到整体的梯度来统一更新所有GPU上的模型参数
- 优点:
- 高可拓展性,通过增肌GPU即可提效
- 实现简单,多数深度学习库都提供支持,比如TensorFlow和PyTorch
3、流水线并行
- 方法:将大模型不同层的参数分配到不同的GPU上,以减少GPU之间传输隐藏状态或梯度的成本,为了避免多GPU串行导致的效率低下问题,需要使用梯度雷击进行优化
- 梯度累积:计算1个批次的梯度后不立刻更新模型参数,而是累积几个批次之后再更新,这样可以再不增加显存消耗的情况下模拟更大的批次
4、张量并行
- 介绍:将大模型加载到多个GPU上的技术,与流水线并行类似,流水线并行是将模型不同层分配到不同的GPU上,相较而言,张量并行分配的粒度更细,它进一步分解了模型的参数张量(参数矩阵),以便更高效的利用GPU算力
- 开源库支持情况:多个开源库中得到支持,例如Megatron-LM支持对参数矩阵按行按列分块进行张量并行
三、零冗余优化器
1、作用
通过降低数据并行中的模型冗余度,来提高训练效率
2、方式介绍
由DeepSpeed提出,用于解决数据并行中的模型冗余问题,优化掉不参与训练的部分,提高训练效率,每个GPU只保留部分,需要时再读取,降低显存冗余度
3、模型冗余问题
每张GPU在训练时都需要复制一份模型参数,有大部分实际是不参与训练的,这部分就是冗余
四、激活重计算
1、作用
又称梯度检查点,用于优化反向传播时的显存占用的技术
2、原理
在前向传播期间仅保留部分激活值,在反向传播时重新计算激活值,以节约显存,但是会引入额外计算开销
五、混合精度训练
1、原理
相比早起使用的单精度浮点数训练方式,使用半精度浮点(2个字节)和单精度浮点(4个字节)组成的混合精度训练技术,可以实现显存开销减半、训练效率翻倍
2、过程
首先会存一份原始的32位模型参数副本,在训练过程中,先将32位参数转化为16位参数,随后以16位参数执行前向传播和反向传播,最后再更新32位参数
3、优点
模型训练中,前向传播和反向传播占了大多数优化时间,所以混合精度训练可以显著提升训练效率
4、最新方案
将浮点数里面表示尾数的内存部分占用减少,例如谷歌研究人员提出半精度浮点数里面的1位符号位、5位指数位、10位尾数位,调整为1位符号位、8位指数位、7位尾数位,表示范围可以扩大到10的38次方