并行化依赖随机梯度下降的 ML 模型?

问题描述

我一直在阅读不同的 NLP 模型,如 word2vec 和 glove,以及如何将它们并行化,因为它们大多只是点积。但是,我对此有点困惑,因为计算梯度和更新模型取决于参数/向量的当前值。这是如何并行/异步完成的?您如何知道何时使用每个线程随机计算的梯度来更新全局参数?

解决方法

一般来说,在节点之间做一些大致的延迟/漂移并不会造成太大的伤害。两篇重要的早期论文是:

"HOGWILD!: 一种无锁的并行化方法 随机梯度下降"

作者:Benjamin Recht、Christopher Re、Stephen Wright、牛风

https://papers.nips.cc/paper/2011/hash/218a0aefd1d1a4be65601cc6ddc1520e-Abstract.html

摘要:随机梯度下降 (SGD) 是一种流行的算法 可以在各种机器上实现最先进的性能 学习任务。一些研究人员最近提出了方案 并行化 SGD,但都需要性能破坏内存锁定 和同步。这项工作旨在展示使用新颖的理论 SGD可以实现的分析、算法和实现 没有任何锁定。我们提出了一个名为 HOGWILD 的更新方案!哪个 允许处理器访问共享内存的可能性 覆盖彼此的工作。我们表明,当关联 优化问题是稀疏的,这意味着只有大多数梯度更新 修改决策变量的小部分,然后HOGWILD!达到了 接近最优的收敛速度。我们通过实验证明 霍格维尔德!优于使用订单锁定的替代方案 量级。

“大规模分布式深度网络”

作者:Jeffrey Dean、Greg Corrado、Rajat Monga、Kai Chen、Matthieu Devin、Mark Mao、Marc'aurelio Ranzato、Andrew Senior、Paul Tucker、Ke Yang、Quoc Le、Andrew Ng

https://papers.nips.cc/paper/2012/hash/6aca97005c68f1206823815f66102863-Abstract.html

最近在无监督特征学习和深度学习方面的工作有 表明能够训练大型模型可以显着提高 表现。在本文中,我们考虑训练一个深度的问题 使用数万个 CPU 拥有数十亿个参数的网络 核心。我们开发了一个名为 DistBelief 的软件框架 可以利用具有数千台机器的计算集群进行训练 大型模型。在这个框架内,我们开发了两种算法 对于大规模分布式训练:(i) 倾盆大雨 SGD,一个 支持大数据的异步随机梯度下降程序 模型副本的数量,以及 (ii) Sandblaster,一个框架 支持多种分布式批处理优化程序, 包括 L-BFGS 的分布式实现。倾盆大雨新元和 Sandblaster L-BFGS 增加了深度网络的规模和速度 训练。我们已经成功地使用我们的系统训练了一个深度网络 比以前文献中报道的大 100 倍,并实现了 ImageNet 上最先进的性能,视觉对象识别 具有 1600 万张图像和 21k 类别的任务。我们证明这些 相同的技术极大地加速了更多人的训练 用于商业语音识别的中等规模的深度网络 服务。尽管我们关注并报告这些方法的性能 当应用于训练大型神经网络时,底层 算法适用于任何基于梯度的机器学习 算法。