ChatGPT的推出,人工智能正式进入大模型时代。要训练一个chatgpt这样的大模型,需要分布式AI集群的支持。
Open AI的GPT-3模型,使用512张V100,需要训练7个月。现在的大模型训练,离不开分布式训练,通过分布式训练来加速训练过程,减少耗时。
分布式并行架构
加速比
单机训练时:
训练耗时 = 训练数据规模 * 单步计算量 / 单设备计算速率
多机训练时,理想情况是:
训练耗时 = 训练数据规模 * 单步计算量 / ( 单设备计算速率 *设备数)
但是,由于并行等带来的损失,实际达不到理想情况,实际的效率处于立项效率,就是加速比。 假设单设备吞吐量为T,n个设备系统的吞吐量应为nT,系统实际达到吞吐量为Tn,则加速比为:
实际过程中,这个加速比通常在0.4左右。
参数服务器
分布式训练时,需要更新模型参数,通常是用参数服务器来承担,工作包含:
- 计算损失和梯度
- 梯度聚合
- 参数更新并参数重新广播
有下面几种模式,当前大模型参数量过大,单个GPU不能承载,通常采用参数服务器分布在所有GPU上。
并行计算方法
分布式深度学习计算时,每迭代一个batch,需要同步参数,这里就涉及到如何并行。
同步并行
该并行方法,数据必须等全部工作节点完成了本次通信之后才能继续下一轮本地计算,优点是本地计算和通信同步严格顺序化,能够容易地保证并行的执行逻辑于串行相同。但是如果计算能力不一致,会导致最早计算完成的等待其它工作节点处理,造成了计算硬件的浪费。
半同步并行
通过动态限制进度推进范围,有限定的宽松同步障的通信协调并行。
跟踪各节点进度并维护最慢节点,保证计算最快和最慢节点差距在一个预定的范围内。
环同步
参数间如何同步,通过NVLink连接的GPU,主要通过环同步来实现。下面介绍,Ring All Reduce 算法。
首先,GPU通过NVLink互联,每个GPU一路发送,一路接收,构成一个环。
第一步,Scatter-reduce
开始的时候,每个GPU有各自的参数,现在需要通过环同步,实现参数同步。
通过环,我们可以把gpu0 的数据给GPU1,这样GPU1 就有a1+a0,同样的GPU1给GPU2,依次类推。
这样,遍历完一个环之后,每块GPU都有一个完整的参数,比如GPU4上,有a的全部部分。
第二步,All Gather,再执行一次环同步操作,这样执行完成后,所有GPU都有了全部数据。
通过该算法,对于3亿(0.3B)参数的语言模型每秒处理的样本数量与同时进行同步训练的 GPU 数量呈线性关系
总结
- 大规模分布式训练中主要使用参数服务器架构模式(PS),参数服务器分布在多个 GPU
- PS架构下通过集合通信来实现环同步,从而同步分布在多个 GPU 中的参数, Ring All Reduce 是环同步的经典同步方式