
1.3.1 分布式机器学习的发展历史
近年来,新技术的快速发展导致数据量空前增长。机器学习算法正越来越多地用于分析数据集和建立决策系统。而由于问题的复杂性,例如控制自动驾驶汽车、识别语音或预测消费者行为(参考Khandani等人2010年发表的文章),算法解决方案并不可行。在某些情况下,单个机器上模型训练的较长运行时间促使解决方案设计者使用分布式系统,以增加并行度和I/O带宽总量,因为复杂应用程序所需的训练数据可以很容易就达到TB级。在其他情况下,当数据本身是分布式的或量太大而不能存储在单个机器上时,集中式解决方案甚至不可取。例如,大型企业对存储在不同位置的数据进行事务处理,或者由于数据量太大而无法移动和集中。为了使这些类型的数据集可以作为机器学习问题的训练数据被访问,必须选择并实现能够并行计算、适应多种数据分布和拥有故障恢复能力的算法。
近年来,机器学习技术得到了广泛应用。虽然出现了各种相互竞争的方法和算法,但使用的数据表示在结构上非常相似。机器学习工作中的大部分计算都是关于向量、矩阵或张量的基本转换,这些都是线性代数中常见的问题。几十年来,对这种操作进行优化的需求一直是高性能计算(High Performance Computing,HPC)领域高度活跃的研究方向。因此,一些来自HPC社区的技术和库(例如,BLAS或MPI)已经被机器学习社区成功地采用并集成到系统中。与此同时,HPC社区已经确定机器学习是一种新兴的高价值工作负载,并开始将HPC方法应用于机器学习。Coates等人在他们的商用高性能计算(COTS HPC)系统上用短短三天训练了一个含有10亿个参数的网络。You等人于2017年提出在Intel的Knights Landing上优化神经网络的训练,Knights Landing是一种为高性能计算应用设计的芯片。Kurth等人于2017年演示了深度学习问题(如提取天气模式)是如何在大型并行HPC系统上进行优化和扩展的。Yan等人于2016年提出通过借用HPC的轻量级分析等技术建模工作负载需求,可解决在云计算基础设施上调度深度神经网络应用的挑战。Li等人于2017年研究了深度神经网络在加速器上运行时针对硬件错误的恢复特性(加速器经常部署在主要的高性能计算系统中)。
同其他大规模计算挑战一样,我们有两种基本不同且互补的方式来加速工作负载:向一台机器添加更多资源(垂直扩展,比如GPU/TPU计算核心的不断提升),向系统添加更多节点(水平扩展,成本低)。
传统的超级计算机、网格和云之间的界限越来越模糊,尤其在涉及机器学习等高要求的工作负载的最佳执行环境时。例如,GPU和加速器在主要的云数据中心中更加常见。因此,机器学习工作负载的并行化对大规模实现可接受的性能至关重要。然而,当从集中式解决方案过渡到分布式系统时,分布式计算在性能、可伸缩性、故障弹性或安全性方面面临严峻挑战。