@changlan   Archives  About

漫谈分布式机器学习系统: DistBelief

Large Scale Distributed Deep Networks, Dean et al, NIPS 2012

我们从 DistBelief 开始漫谈分布式机器学习系统系列文章的第一篇。作为 TensorFlow 的前身,DistBelief 解决的问题是大规模深度神经网络 (参数数量级 ~10^9) 的训练。DistBelief 不支持 GPU,而是使用 CPU 集群 (CPU 核数量级 ~10^5) 来训练。对此,文章的解释是:

A known limitation of the GPU approach is that the training speed-up is small when the model does not fit in GPU memory (typically less than 6 gigabytes). To use a GPU effectively, researchers often reduce the size of the data or parameters so that CPU-to-GPU transfers are not a significant bottleneck. While data and parameter reduction work well for small problems (e.g. acoustic modeling for speech recognition), they are less attractive for problems with a large number of examples and dimensions (e.g., high-resolution images).

DistBelief 支持多机并行的方法是 Model parallelism,也就是把同一个模型的参数划分到不同的 Parameter server 里去。和其他过去采用 MPI 方法的系统相比,Parameter server 的设计是 DistBelief 最大的特点。此外 DistBelief 还支持 Data parallelism。当数据量很大时,每个 Model replica (在其他工作中通常叫做 Worker) 可以使用不同的 Data Shard。

系统方面的介绍相当简略,在剩下的篇幅里,文章介绍了两个用 DistBelief 实现的异步算法:Downpour SGD 和 Sandblaster L-BFGS。

Downpour SGD 实际上就是 Parameter server 版的异步 SGD,在这里 Parameter server 相当于一个分布式的 Key-value 数据库。异步 SGD 除了效率更高之外,容错能力也更强:一台机器故障不会影响整体训练的进行。此外,异步 SGD 还引入了更多随机性,而理论结果表明带随机噪声的 SGD 对 Non-convex Optimization 反而是有帮助的,当然这个结果在 2012 年的时候还没有被证明,论文只是定性了说明了这一点:

On the other hand, the multiple forms of asynchronous processing in Downpour SGD introduce a great deal of additional stochasticity in the optimization procedure. Most obviously, a model replica is almost certainly computing its gradients based on a set of parameters that are slightly out of date, in that some other model replica will likely have updated the parameters on the parameter server in the meantime. But there are several other sources of stochasticity beyond this: Because the parameter server shards act independently, there is no guarantee that at any given moment the parameters on each shard of the parameter server have undergone the same number of updates, or that the updates were applied in the same order. Moreover, because the model replicas are permitted to fetch parameters and push gradients in separate threads, there may be additional subtle inconsistencies in the timestamps of parameters. There is little theoretical grounding for the safety of these operations for nonconvex problems, but in practice we found relaxing consistency requirements to be remarkably effective.

Sandblaster L-BFGS 的实现增加了一个 Coordinator 角色,用于协调 Parameter servers 和 Model replicas。熟悉 L-BFGS 算法的同学应该知道,除了计算梯度之外 (依赖数据),算法还要用现在和过去的参数计算近似 Hessian 矩阵的逆矩阵 (不依赖数据)。梯度的计算显然应该在 Model replica 上进行,但是计算 Hessian 逆矩阵应该怎么做呢?如果 Parameter server 只支持存取数据,我们只能用 Coordinator 读取参数来计算。作为优化,DistBelief 的 Parameter server 支持自定义的运算以及结果的保存,这样 Coordinator 可以让 Parameter server 在本地执行计算并且保存结果,再把结果提交给 Coordinator 做最后的计算,从而减少网络的数据量,加快速度。

最后我们看看 DistBelief 的一些实验结果。DistBelief 对于大规模的模型可以取得接近次线性的加速比。对于比较小的模型,增加机器的数量反而会增加网络通信的开销。

此外,DistBelief 还比较了 SGD 和 L-BFGS 在训练大规模神经网络的性能。可以看到 SGD 配合自适应学习率 Adagrad 的效果比二阶方法 L-BFGS 更好,现在已经成为常识了:

总的来说,可能因为是 NIPS 的原因,这篇论文的系统部分非常简练,但是足够让我们一窥 DistBelief 的架构。后来其他公司也纷纷开始搭建类似的系统,当然这是后话。