购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 分布式机器学习介绍

3.1.1 分布式机器学习的定义

分布式机器学习也称为分布式学习,是指利用多个计算节点(也称为工作者,Worker)进行机器学习或者深度学习的算法和系统,旨在提高性能、保护隐私,并可扩展至更大规模的训练数据和更大的模型 [7,155] 。如图3-1所示,一个由三个工作者(即计算节点)和一个参数服务器组成的分布式机器学习系统 [41] ,训练数据被分为不相交的数据分片(Shard)并被发送给各个工作者,工作者将在本地执行随机梯度下降(Stochastic Gradient Descent,SGD)。工作者将梯度 ∇W i 或者模型参数 W i 发送至参数服务器。参数服务器对收到的梯度或者模型参数进行聚合(例如,计算加权平均),从而得到全局梯度 ∇W 或全局模型参数 W 。同步或者异步的分布式SGD算法都适用于分布式机器学习 [44,157]

图3-1 分布式机器学习系统示例

通常来说,DML可以分为两类:面向扩展性的DML(Scalability-Motivated DML)和面向隐私保护的DML(Privacy-Motivated DML)。面向扩展性的DML是指用来解决不断增长的扩展性和计算需求问题的机器学习(Machine Learning,ML)系统。例如,在过去的数十年中,人们需要处理的ML和深度学习(Deep Learning,DL)的规模以指数级增长。使用大量训练数据训练一个复杂DL模型的需求,将轻易超过使用单一计算单元的传统ML范式的能力范围。一个很好的例子是著名的BERT模型 [158] ,它的预训练需要使用多个张量处理单元(Tensor Processing Unit,TPU)且耗时数天。为了应对这种现状,快速发展的DML被认为是解决ML模型不断增长的规模和计算复杂度问题的一种可行解决方法。

当内存限制和算法复杂度是主要障碍时,面向扩展性的DML方法便为大规模ML提供了可行的解决方案。除了克服训练数据的集中存储需求,DML系统还能够使用更弹性化和更廉价的计算资源,例如增加计算单元的数量。云计算在这方面提供了很大帮助。在云计算平台上,能够根据需求随时获取更多的计算资源,如CPU和图形处理器(Graphics Processing Unit,GPU),甚至TPU和内存资源。鉴于这种特性,面向扩展性的DML被广泛应用于具有横向划分数据集的场景中。其中,训练数据的子集存储在不同的计算单元实体中。

与面向扩展性的DML不同,面向隐私保护的DML的主要目的是保护用户隐私和数据安全。随着用户隐私和数据安全逐渐成为人工智能领域中的主要关注点(见第1章和附录A) [54] ,面向隐私保护的DML逐渐成了机器学习社区中的新趋势 [1] (亦可参见第2章关于面向隐私保护的机器学习的介绍)。在面向隐私保护的DML系统中,有多个参与方且每一方都拥有一些训练数据。因此,需要使用DML技术来利用每个参与方的训练数据,从而协同地训练机器学习模型。由不同参与方拥有的数据集可能具有不同的数据特征,所以实际中经常遇到的是训练数据的纵向划分。也就是说,面向隐私保护的DML适用于具有纵向划分数据集的场景,不同参与方各自持有的训练数据具有相同的训练样本ID和不同的数据特征。

3.1.2 分布式机器学习平台

由于DML具有分布式与并行计算架构,我们需要专门的ML平台才能充分发挥DML的优势。现在有许多的商业和开源DML平台,下面介绍一些有代表性的框架。

使用最广的DML数据处理系统之一便是Apache Spark MLlib [159] 。MLlib是Apache Spark的扩展ML库,是一个基于内存的DML框架,并且使得ML系统易于扩展和部署。MLlib提供了传统ML(相对于DL而言)算法的分布式实现,例如分类、回归和聚类等。Apache DeepSpark提供了DL的分布式训练框架的实现 [160]

基于图的并行处理算法是DML最近一个比较新的方法,也称为DML环境下的图并行方法(见3.2.2节)。GraphLab平台 [161,162] 提供了可扩展的ML工具包,并实现了一些基础算法如随机梯度下降和高性能梯度下降。另一个图并行计算平台是Apache Spark GraphX,是Spark中的一个新组件,实现了Pregel-like的块同步消息传递 [163] ,其中Pregel是来自谷歌的基于块同步处理模型的并行图计算库 [164]

由微软发布的DML工具包(Distributed ML Toolkit,DMTK)具有算法上和系统上的创新 [165] 。DMTK支持数据并行化的统一接口、大型模型存储的混合数据结构、大型模型训练的模型调度,以及实现高训练效率的自动化流水线。

DL需要在大量数据上训练具有众多参数的深度神经网络(DNN)。分布式计算和并行计算是一个能将现代硬件利用到极致的完美工具。对于分布式深度学习(Distributed Deep Learning,DDL),除了Apache DeepSpark,其他著名的DL框架,例如TensorFlow和PyTorch,也都支持DNN的分布式训练和部署。

TensorFlow通过tf.distribute支持DNN的分布式训练,允许数据在不同进程上甚至不同服务器上进行计算,并且可以使用多处理器或者服务器,在数据集的不同分片上训练相同的模型 [166] 。TensorFlow使大型模型分割到许多设备上成为可能,即如果模型过大,单一设备的内存容量已不足容纳,则可以将模型分割到多台设备上进行并行训练。此外,这也可以将计算分配给具有强大性能的GPU集群的服务器,并在拥有更多内存的服务器上进行其他计算。使用分布式TensorFlow,我们能够将分布式模型的训练规模扩展至数以百计的GPU中。通过并行地在许多GPU和服务器上进行模型训练,我们还能够将模型调试耗时(如超参数调整)大幅降低。

PyTorch中的分布式包(即torch.distributed)让研究人员和使用者能够轻松地将他们的DNN训练分布部署到集群上 [167] 。与TensorFlow类似,分布式PyTorch允许一个模型依逻辑分割为若干部分(即一些层在一个部分,另一些层在另一部分),然后置于不同的计算设备中。PyTorch利用消息传递技术,允许每个进程和其他进程进行通信,与多进程包(如torch.multiprocessing)相反,进程能够使用不同的通信后端,且不必在同一台机器上执行。 Yv/CPykEJqKdxAkEMyTV0QYBenn29m0DkgQQuPn1FtzijhPWcLWmV/DQV/KZcWC1

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开