可以尝试取值更大的τ,压缩率会随之增加(例如, 若τ=15,则update size只有4.5KB),但是模型的准确率会有明显的下降。
尽管这种方法的结果很吸引眼球,但是它也存在三个主要的弊端。
Strom提到在训练的早期阶段收敛就会遇到问题(减少计算节点似乎能有帮助)
压缩和量化数据也需要开销:这些过程导致了给每个minibatch增加额外计算开销,以及每个执行单元的少量内存开销。
整个过程中引入了两个额外的超参数:τ的取值和是否使用熵编码(显然参数平均和异步SGD都会引入额外的超参数)
最后,就作者所知,目前并没有异步SGD与去中心化的异步SGD的实践比较。
分布式训练神经网络模型:哪种方法最好?
我们已经看到了许多种训练分布式神经网络的方法,每种方法又有多个变种。那么我们在实际应用中究竟应该选择哪一种呢?很不幸,我们并不能找到一个简单的答案。按照下面罗列的准则,我们可以将不同的方法定义为最优方法:
训练速度最快(每秒钟处理样本数量最多,或者每个epoch消耗时间最少)
当nepochs → ∞时,最大化模型预测的准确率
当给定训练时间时,最大化模型预测的准确率
当给定epoch时,最大化模型预测的准确率
另外,那个问题的答案也与许多因素有关,例如神经网络模型的类型和规模,集群的硬件配置,所选用的特性(如压缩算法),以及训练方法的特殊实现逻辑和配置。
我们从研究文献中可以总结出一些结论:
同步式参数平均方法(或者同步更新方法)就每一轮epoch的准确率,以及全局的准确率来说更胜一筹,尤其是当平均周期选的较小的时候。当N=1平均周期与单机训练的过程非常类似。然而,额外的同步开销也意味着这个方法每个epoch的速度更慢;也就是说,诸如InfiniBand的快速网络连接能极大地提高同步方法的竞争力(见文献[5]的例子)。然而,即使是普通商用硬件,我们在实践中用DL4J实现的同步参数平均方法也看到了较好的集群利用率。使用压缩还能进一步减小网络的开销。
也许参数平均法(以及普遍的同步方法)的最大问题在于所谓的“last executor”效应:即同步系统需要等待最慢的处理单元结束之后才能完成一次迭代。结果导致随着工作节点的增加,同步系统变得越来越不灵活。