分布式训练
主要矛盾:日益增长的数据、模型训练的需求与当前单卡计算能力无法满足这个需求之间的矛盾
目标: 充分利用GPU的性能来提高模型学习的速度
框架: PyTorch的并行计算,让多个GPU来参与训练
策略: 模型并行、数据并行、混合并行
分类: 单机多卡、多机多卡
模型并行
将模型切分到不同的GPU上,将模型的参数分到不同的GPU上,每一个GPU上的参数量大大减小,这样可以容纳更大的模型进行训练
模型拆分:将一个模型的各个部分拆分,然后将不同的部分放入到GPU来做不同任务的计算
优点:单个节点的参数量减少,并且使得用更为精确的梯度进行计算提供了可能性。
缺点:不同模型组件在不同的GPU上时,GPU之间的传输就很重要,对于GPU之间的通信是一个考验,GPU的通信在这种密集任务中很难办到,每个GPU节点必须等待前一个节点的结果,才能进行运算
数据并行
不再拆分模型,而将输入的数据拆分
将batch中的数据拆分为多份,分别在多个GPU上训练
---将数据集分为N份,分别装载到N个GPU节点中去进行梯度求导
---将所有节点的求导结果进行加权平均,再传递给所有节点
---对于每个节点来说,使用相同的模型参数进行前向传播
---直到模型收敛或者提前停止训练
目前主流的方式是数据并行
数据并行基于一个假设:所有节点都可以放下整个模型
PyTorch实现
PyTorch提供了比较方便的数据并