MindSpeed大模型训练前置知识之大并行加速算法

175 阅读4分钟

MindSpeed大模型训练前置知识之大并行加速算法

并行为什么对大模型训练这么重要?

从chatgpt大模型爆发,尤其因规模定律作用下,大模型展现出涌现能力,AI模型的天花板被一步步摸高。大模型规模定律与模型参数量、训练数据量、算力大小呈幂律正相关性。大模型训练过程中需要面对“模型参数量大、训练数据量大、算力量有限”的挑战,大模型参数量由十亿到百亿、千亿甚至万亿的增长量级,同时预训练数据量高达数十T的量级。例如GPT-3有1730亿的参数量,投喂570G语料数据,使用8张V100,则训练时长需要36年

量大力不足啊

面对大模型大参数量以及海量训练数据量对算力的需求挑战,衍生出两种经典的训练并行加速策略,模型并行&数据并行。

3D并行

模型并行(PP、TP)

大参数量的大模型训练需要多机多卡,多机多卡上并行的高效训练就需要对模型结构分拆以及并行计算做策略。模型并行衍生出对模型层进行拆分去并行计算的流水线并行(Pipeline Parallel,PP);对模型张量进行拆分做并行计算的张量并行(Tensor Parallel,TP)。 流水线并行:模型的结构一般是分layer构建,基于底层训练卡将模型的不同层分不到不同的卡上做流水线并行。假设,模型有8个layer,在4张GPU上做流水线并行,其中GPU_0负责计算

$Intermediatel1 = L_2(L_1(input))$,

而GPU_1则负责

$Intermediatel2 = L_4(L_3(Intermediatel1))$,

依次类推第四张GPU_3负责

$Outputs = L_8(L_7(Intermediatel3))$,

基于当前模型层拆分做并行计算的单词训练过程如下表示意:

图片描述 首先前两层在o卡上计算前两层,中间结果传递为1卡,基于此顺次完成前向过程,进一步的从最后一张卡反向传递只第一张卡完成反向传播完成梯度反传更新。 **张量并行**:Tranformer结构大量的计算为矩阵计算,基于矩阵计算的本质将大矩阵拆分为N个小矩阵,分散到N个GPU并行计算。 假设现有矩阵计算$C=AB$,将矩阵B拆分为$[B_1,B_1,B_2···B_n]$,进而矩阵C的计算转化为:$C=[AB_1,AB_1,AB_2···AB_n]$。 图片描述

数据并行

面对大模型训练海量数据投喂,其对内存和片上内存的使用更大,也会导致大的计算压力,导致数据存储及训练性能低下。基于此痛点,衍生出对数据进行拆分的数据并行策略(Data Parallel,DP),将训练数据按照batch进行切分,同一批数据分配到不同算力卡进行数据模型训练。

图片描述 每张卡数据进行一次完整训练后,进行allgather操作,将每张卡上的梯度进行融合,进行参数更新。

总结下,上述流水线并行、张量并行、数据并行构成了当前大模型训练加速的主流并行方法3D并行,可以看出3D并行下,大参数量模型在做海量数据训练时面临的内存及计算压力得到了极大的缓解,规避了相应的资源瓶颈。