数据并行是什么?
数据并行是分布式训练里最直观的一种。它的做法很简单:把完整模型的副本复制到每一张 GPU 上,然后把训练数据切成很多份,每张卡各处理自己那一批。算完之后,大家把梯度汇总、平均,再用平均后的梯度一起更新参数。它怎么工作的?
模型复制,数据切分每一张卡上的模型完全一样,差别只在于「吃」到的数据不同。
梯度同步
每张卡各自算出梯度后,通过通信把梯度加起来取平均,让每张卡都拿到同一份「统一答案」,再各自更新本地模型。
结果等价于更大的批量
4 张卡各处理 32 条数据,效果上就相当于一次处理了 128 条——batch size 变大了。
它好在哪?
实现简单几乎不用改模型结构,是把训练提速的第一选择。
扩展性好
加卡就能提速,多少张卡、多大 batch 都行。
它的局限
模型必须装得下前提是每张卡都能放下完整的模型。模型太大,数据并行就无能为力了,得换模型并行。
通信是瓶颈
卡越多,梯度同步的通信量越大,同步慢会拖慢整体。
batch 不能无限大
过大的 batch 会影响收敛效果,需要调学习率等参数来补偿。
什么时候用它?
当模型不大、能装进单卡,但数据很多、想训得更快时,数据并行就是最省事的选择。它也是很多大模型训练系统里的「基础层」,再往上叠加模型并行、流水线并行。一句话记住:数据并行就是「同一份模型复制多份,各吃各的数据,算完梯度再对答案」。
评论