在深度学习这一领域经常涉及到模型的分布式训练(包括一机多GPU的情况)。我自己在刚刚接触到一机多卡,或者分布式训练时曾对其中到底发生了什么有过很多疑问,后来查看了很多资料,在这篇博客里对分布式的深度学习模型训练做一个总结。
由于是我自己的总结,所以如果有说的不对的地方,还望指正。
当然我的总结也是基于一些文献参考来的,所以如有雷同,纯属我借鉴别的大神的文章。
如果去查阅与分布式深度学习相关的资料,一般会看到两个词,模型并行和数据并行。
模型并行是指把模型的不同部分放置在各个设备上,这样整个集群就像一个生产流水线一样,对这样的分布式设置我还没有使用过,所以不在这里细说。
数据并行应该是大多数人都会遇到的场景。数据并行分为同步更新和异步更新,下面一一说明。
深度学习训练的数据并行化,说白了就是梯度下降的并行化,所以想要理解你在并行化训练一个深度学习的模型时到底发生了说明,你必须明白梯度下降时到底发生了什么。
我们先从单机的梯度下降说起。
所有介绍梯度下降的参考书都会说梯度下降分为整体梯度下降(每次更新参数使用所有数据)和随机梯度下降(每次更新参数使用一条数据),而在深度学习里我们一般都会结合这两种思想使用批梯度下降,每次更新参数使用一个batch的数据来更新参数。
一般我们可以把随机梯度下降的公式写成下面的形式:

本文详细介绍了深度学习模型的分布式训练,包括模型并行和数据并行,重点讨论了数据并行中的同步更新和异步更新机制。同步更新确保所有worker在同一步更新,而异步更新则允许worker独立更新,可能导致过期梯度问题。两种方法各有优缺点,实际应用中需根据任务和资源选择合适的方式。

2475

被折叠的 条评论
为什么被折叠?



