1.4 分布式机器学习研究领域
1.4.1 分布式机器学习的目标
首先我们看分布式机器学习的目标。如果算法模型比较固定,那么各个公司之间更多的是关于算法微调和计算效率的竞争,提供计算效率就要依靠并行机器学习。分布式机器学习希望把具有海量数据、巨大模型和庞大计算量的任务部署在若干台机器之上,借此提高计算速度、节省任务时间,因此也有以下几个特殊需求点。
• 分布式模型要保持与单节点模型一样的正确性,比如分布式训练出来的模型仍然可以收敛。
• 在理想情况下,训练速度应该达到线性加速比,即速度随着机器数目的增加而线性增加,每增加一个机器就可以获得额外的一倍加速,这样可以达到横向扩展的目的,即整个系统的吞吐量增加而不会影响迭代的收敛速度,不需要增加迭代次数。
• 在最大化利用计算资源的情况下,机器需要具备容错功能。因为机器学习通常需要耗费很长时间,某个节点出现故障不应该重启整个训练。
1.4.2 分布式机器学习的分类
分布式机器学习的特点是多维度、跨领域,几乎涉及机器学习的各个方面,包括理论、算法、模型、系统、应用等,而且与工业非常贴近,我们可以从如下角度对分布式机器学习进行分类。
• 从算法/模型角度看,主要分成以下几类研究方向。
■ 使用应用统计学和优化理论来解决问题。
■ 提供新的分布式训练算法或者对现有分布式训练算法进行改进。
■ 把现有模型改造成为分布式或者开发出一个全新的天生契合分布式模式的模型。
• 从系统角度来看,此处既有分布式系统的共性领域,比如编程模型、资源管理、通信、存储、容错、弹性计算等,也有机器学习特定领域,具体研究方向如下。
■ 如何解决一致性问题:如何切分计算/模型/数据,并保持模型一致性?
■ 如何容错:拥有100个节点的集群如何在其中一个节点崩溃的情况下保证任务不是从最开始重启而是原地无缝继续训练?
■ 如何处理通信问题:如何进行快速通信?如何最大化计算通信比?如何进行通信隐藏、通信融合、通信压缩、通信降频?如何充分发挥带宽?面对机器学习的大量I/O操作,如何设计存储系统和I/O系统?
■ 如何进行资源管理:如何管理集群?如何适当分配资源?如何提高资源利用率?是否支持弹性算力感知和动态扩容、缩容?弹性训练如何保证训练精度和一致性?是否支持抢占?是否支持租约?如何满足每个人的需求?
■ 如何设计编程模型:非分布式和分布式是否可以用同样的编程模型?是否可以用分布式技术自动放大针对单节点编写的程序?
■ 如何应用于特定领域:如何对特定应用领域进行处理并且部署到生产?
我们可以通过图1-2(机器学习生态系统)来大致了解分布式机器学习的研究领域。
图1-2
图片来源:论文A Survey on Distributed Machine Learning
了解分布式机器学习研究领域之后,我们回来聚焦目前机器学习的主要矛盾:单机的计算能力和拓展性能无法满足海量数据和超大模型的训练需求。而分布式训练可以通过扩展加速卡的规模,即并行训练来解决这个矛盾。我们的目标是在最短时间内完成模型计算量,对于超大模型,其训练速度的公式大体如下:
总训练速度∝单卡速度×加速卡数目×多卡训练加速比
单卡优化不是本书重点,我们接下来聚焦于另外两部分。加速卡数目与通信架构和拓扑相关。多卡训练加速比体现的是训练集群的效率与可扩展性,其由硬件架构、模型计算、通信等因素决定,因此接下来就从多个角度来看看如何并行。