PS:本篇只在宏观上介绍相关概念和技术,不做数学推导和过于细节介绍,旨在快速有一个宏观认知,不拘泥在细节上,导致很混乱。
涉及技术名词
分布式框架等涉及的技术名词很多,很容易让人眼花缭乱,整体可以概括如下:
1、混合精度训练。
2、并行维度:数据并行、张量并行、流水线并行、模型并行、3D并行、混合并行。
3、ZeRO 1、ZeRO 2、ZeRO 3、ZeRO-offload
4、框架(基本都有或就是基于pytorch):Megatron、DeepSpeed、Megatron-LM、Megatron-DeepSpeed 、pytorch 自带的FSDP。
5、关于Attention优化:Flash Attention、Flash Attention 2、 Paged Attention、Xformers、MHA、MQA、GQA。
6、硬件:nvlink、nvswitch、Infiniband。
1、混合精度训练
目的是降低显存消耗和加速推理过程。大致原理是模型参数、梯度、激活等使用FP16或BF16,然后再保存一份模型的状态(sgd,如果是Adam则包含模型、一阶专状态、二阶状态三份参数)用于梯度更新。原因是单纯半精度有如下问题:
1)溢出错误:由于FP16的动态范围比FP32位的狭窄很多,因此,在计算过程中很容易出现上溢出和下溢出,溢出之后就会出现"NaN"的问题。在深度学习中,由于激活函数的