分布式机器学习

https://zhuanlan.zhihu.com/p/391187949

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

 

分布式机器学习

 

分布式学习平台

  • Apache Spark MLlib

Apache Spark’s scalable ML library. MLlib offers distributed implementations of the conventional ML algorithms (as compared to deep learning), such as classification, regression, and clustering, etc. [https://spark.apache.org/mllib/]

  • DeepSpark

Offers implementation of distributed training framework for deep learning (DL). It supports open-source deep learning frameworks, e.g., TensorFlow, PyTorch. [http://deepspark.snu.ac.kr/]

  • Microsoft Distributed ML Toolkit (DMTK)

Open-source distributed machine learning library. It supports both machine learning and deep learning. [http://www.dmtk.io/]

  • MxNet

Open-source deep learning framework, supports well for distributed deep learning. [https://mxnet.apache.org/]

  • TensorFlow

Open-source deep learning framework, supports well for distributed deep learning [https://tensorflow.google.cn/]

  • PyTorch

Open-source deep learning framework, supports well for distributed deep learning [https://pytorch.org/]

  • Uber Horovod

Open-source distributed deep learning framework, supports deep learning frameworks, e.g., MxNet, TensorFlow, PyTorch [https://eng.uber.com/horovod/]

分布式学习方法

数据并行

将训练数据划分为多个子集(也称为分片或者切片),然后将各子集置于多个计算实体中,之后并行地训练同一个模型。

主要有两种基于数据并行的分布式训练方法,即同步训练和异步训练。在同步训练中,所有的计算节点在训练数据的不同分片上同步地训练同一个模型的副本,在各计算节点每执行完一个模型更新步骤后,每个计算节点产生的梯度(或者模型参数)就会被发送给服务器,服务器在收到所有计算节点的结果后再进行聚合操作。而在异步训练中,所有计算节点独立地使用其本地的训练数据集来训练同一个模型的副本,并将本地获得的模型梯度及时地推送给服务器,以便服务器更新全局模型。同步训练一般由AllReduce架构支持,异步训练则通常由参数服务器架构实现。

 

分布式机器学习

 

数据并行能用于解决训练数据过大以至于不能存于单一计算节点中的问题,或者用于满足使用并行计算节点实现更快速的计算的要求。

模型并行

模型并行指的是一个模型(如DNN模型)被分割为若*分(如DNN中的一些层在一个部分,另一些层在其他部分),然后将它们置于不同的计算节点中。尽管将各个部分置于不同计算设备中确实能够改善执行时间(例如,使用数据的异步处理),但模型并行的主要目的是避免内存容量限制。

DNN模型的一个层可以被放入单一设备的内存中,且前向和后向传播意味着一台计算设备的输出以串行方式传输至另一台计算设备。只有当模型不能放入单一设备中,且不需要将训练过程加速很多时,才会采用模型并行方法。

谷歌发布了Downpour SGD框架,提供了SGD的异步和分布式实现方法。Downpour SGD结合了数据并行和模型并行,将训练样本分置于不同的机器中,且每台机器都有整个或者部分DNN模型的单一副本。

梯度下降方法

包括朴素联邦学习(Naive Federated Learning或者Vanilla Federated Learning)、代数方法、稀疏梯度更新方法、模糊处理方法和密码学方法(如同态加密和安全多方计算)。模糊处理方法基于随机化、泛化或抑制机制(如梯度分层化、差分隐私、k-匿名方法)。在朴素联邦学习、代数方法和稀疏梯度更新方法中,每一方发送给协调方明文形式的梯度信息以更新模型,而这只能保护数据的原始形式,即低隐私保护等级和非常高的效率。稀疏梯度更新方法还能通过更新梯度中的一个实体子集,用精度来换取效率和隐私。基于随机化机制的方法,如差分隐私和高斯随机映射(Gaussian Random Projection,GRP),通过给数据或梯度加入噪声的方式,用精度换取隐私。

朴素联邦学习

联邦平均方法是为了使朴素联邦学习能在水平划分数据集上使用而提出的一种方法。在联邦平均方法中,每一方给一个协调方(或是受信任的处理方,或是一个参数服务器)独立地上传明文形式的梯度或模型参数。最后,协调方将明文形式的更新模型发送给每一方[13]。

当数据集是纵向划分的时,模型在各方间分配。在梯度下降方法里,目标函数能被分解为一个可微函数和一个线性可分函数。为了进行梯度下降,每一方将自己的数据用于各自的局部模型,从而获得中间结果,并将其正常发送给协调方。协调方将所有中间结果积累起来,并评估可微函数以计算损失和梯度。最后,协调方更新整个模型,并将更新后的局部模型发送给每个相关方。

隐私保护方法

代数方法

代数方法旨在利用传输数据的代数特性保护原始训练数据。

稀疏梯度更新方法

稀疏梯度更新方法通过只更新梯度的子集的方式来保护隐私。这类方法用精度来换取效率,并且保护隐私程度较低。

模糊处理方法

模糊处理方法通过随机化、泛化和压缩来使得数据模糊,虽然可以改善隐私性,但会降低准确度。在联邦学习中,本地差分隐私(Local Differential Privacy,LDP)也可以用于给每一方的梯度加上噪声。

密码学方法

上述方法将每一方的明文梯度信息都暴露给了协调方或其他方。与此相反,密码学方法利用了同态加密和安全多方计算,在梯度下降过程中,保护每一方的梯度信息隐私。安全模型有很多种类型,从针对诚实的但好奇的对抗方的模型,到针对恶意敌对方的模型,对于堕落变坏的假设也有很大不同。

上一篇:李宏毅2021春机器学习课程笔记--类神经网络(三)


下一篇:简单梳理一下论文中的想法(二)