在许多情况下,单个机器的计算资源是有限的。因此,我们希望把训练或者推断的任务分摊到多个机器上进行。分布式的推断是容易实现的,因为每一个输入的样本都可以在单独的机器上运行。这也被称为 数据并行(data parallelism)。同样地,模型并行(model parallelism)也是可行的,其中多个机器共同运行一个数据点,每一个机器负责模型的一个部分。对于推断和训练,这都是可行的。在训练过程中,数据并行某种程度上来说更加困难。对于随机梯度下降的单步来说,我们可以增加小批量的大小,但是从优化性能的角度来说,我们得到的回报通常并不会线性增长。使用多个机器并行地计算多个梯度下降步骤是一个更好的选择。不幸的是,梯度下降的标准定义完全是一个串行的过程:第 t 步的梯度是第 t − 1 步所得参数的函数。这个问题可以使用 异步随机梯度下降(Asynchoronous Stochastic GradientDescent)(Bengio et al., 2001b; Recht et al., 2011) 解决。在这个方法中,几个处理器的核共用存有参数的内存。每一个核在无锁情况下读取这些参数并计算对应的梯度,然后在无锁状态下更新这些参数。由于一些核把其他的核所更新的参数覆盖了,因此这种方法减少了每一步梯度下降所获得的平均提升。但因为更新步数的速率增加,总体上还是加快了学习过程。Dean et al. (2012) 率先提出了多机器无锁的梯度下降方法,其中参数是由 参数服务器(parameter server)管理而非存储在共用的内存中。分布式的异步梯度下降方法保留了训练深度神经网络的基本策略,并被工业界很多机器学习组所使用 (Chilimbi et al., 2014; Wu et al., 2015)。学术界的深度学习研究者们通常无法负担那么大规模的分布式学习系统,但是一些研究仍关注于如何在校园环境中使用相对廉价的硬件系统构造分布式网络 (Coates et al., 2013)。
领取专属 10元无门槛券
私享最新 技术干货