二十多篇文献带你读懂分布式学习与联邦学习优化思路 调度优化 压缩算法 聚合算法

前言

文中增加了引用跳转,如果想要细度哪一篇文章,只需通过引用跳转到结尾的Reference便可以获得文章的标题,通过Google Scholar搜索便可以获取原文。

本文为作者原创,转载请注明作者kaiserqzyue

摘要

联邦学习的提出是为了解决用户隐私问题。在其提出后得到了迅速的发展。联邦学习研究方向包括聚合算法、安全协议、通信效率等方面。通信效率方面的研究指通过一系列新的算法减少通信数据量或者改进通信架构来提高数据交换的效率。本文对该方面的研究论文进行总结分析,主要介绍整个研究现状、研究进度以及存在的困难和挑战。

引言

联邦学习自提出以来,取得了巨大的进展。这些进展覆盖各个方面:聚合算法、安全协议、通信效率等。这其中有许多标志性的文章,本文总结了其中关于通信效率方面的文章。这些文章主要通过研究压缩算法、改变通信架构来提高联邦学习的通信效率。

联邦学习是一个正在蓬勃发展的方向。其不再像传统中心服务器架构进行模型的训练,其不需要收集用户数据。用户数据直接在多个终端设备上进行训练。最开始的联邦学习可以表述为下图:
在这里插入图片描述

这也是很多联邦学习采用的架构。在该架构下,各个终端结点首先从中心服务器(也被称为参数服务器)获取模型(该过程也被称为模型分发);成功获取模型后,终端结点则根据本地的用户数据进行模型的训练(这个过程发生真正的模型训练);完成一定时间的本地训练后,终端结点将训练后的模型发送给参数服务器;参数服务器收到所有终端的模型后,进行一次聚合操作得到新的模型(最后两个过程统称为模型聚合)。重复上面的过程,直到达到指定的精度或者指定的训练轮数。

经过一段时间的发展,联邦学习的分类开始多了起来,最常见的分类是根据各个终端设备所拥有的数据特点不同分为横向联邦学习和纵向联邦学习[cite{yang2019federated}]。其中横向联邦学习指的是各个终端设备拥有的数据具有相同的数据类型,但具体数据的样本不同(可以抽象成同一个表格,但是各个终端结点拥有其中不同行的数据);纵向联邦学习则指的是各个终端设备拥有不同的数据类型,但是产生数据的个体基本相同(可以抽象成同一个表格,但是各个终端结点有用其中不同的列的数据)。下图给出了一个直观的解释:
在这里插入图片描述

联邦学习的发展迅速,其中横向联邦学习的研究尤为突出。本文将介绍并总结横向联邦学习中关于通信效率提升的文章。本文按照如下的方式进行叙述:除去引言部分,第二部分对联邦学习的背景进行介绍;第三部分介绍联邦学习的研究现状;第四部分则是介绍整个研究进展(发展过程);第五个部分简述现阶段面临的困难与挑战;第六部分则进行总结以及联邦学习关于未来发展的建议。

背景介绍

随着终端设备容量以及存储能力的提升,许多数据的处理可以不再发送给远程服务器进行处理,而是直接在终端设备进行处理,与此同时,随着时代的发展,用户的安全意识逐渐提升,对于隐私以及数据的安全越来越重视,表现为用户不再愿意用户数据被互联网公司所收集。但是用户这样的行为与机器学习的发展背道而驰,机器学习建立模型通过大量的数据对模型进行训练以获得更好的效果,随着GPU性能的提升,现在机器学习的模型变得越来越大,对于大模型而言想要获得高泛化能力则需要大量的训练数据进行训练(一个简单的例子,如果一个模型非常复杂,但是数据量非常小的话,那么模型会尝试记忆所有的数据,而不是提升自己的泛化能力,这样的后果是对于训练数据能有很好的效果,可一旦数据发生变化,那么效果会急剧下降,即模型没有足够的泛化能力),用户对于隐私问题的担忧并不是空穴来风,这其中体现着用户的合理诉求,当用户的数据被用于提升用户的体验上时,用户往往是愿意提供数据的(即使是这样,用户也会要求自己的数据被合法的保护),但是数据一旦向服务器上传,中间必然会经过很多的结点,即使互联网公司做出保证不会对数据进行滥用,但是在传播的过程中数据也存在被盗取的可能性。欧盟于2018年提出了通用数据保护条例,旨在保护用户的隐私安全[cite{regulation2018general}]

联邦学习是Google2016年首次提出的概念。其最初是为了解决安卓手机终端用户在本地更新模型的问题。后面经过Google的努力,将联邦学习的实现加入到了TensorFlow[cite{abadi2016tensorflow}]。联邦学习一开始只适合小规模的数据训练(终端的计算能力虽然得到的很大程度上的发展,但是其对与大模型的训练依然困难)。但是联邦学习的机制是极好的,联邦学习并不需要将用户的任何数据发送到服务器,这天然地保护了用户的隐私安全,同时它却能够达到使用所有用户数据进行模型训练相近的效果。仅仅凭借这两点,联邦学习很快边发展起来了。

研究现状

横向联邦学习总体概述

根据横向联邦学习的定义我们可以发现其与分布式机器学习有着许多相似的地方:

  • 都有多个结点参与模型的计算;
  • 都有中心服务器;
  • 参与计算的结点均对自己的数据进行计算。

当然横向联邦学习与分布式机器学习也有着巨大的不同:

  • 分布式机器学习包含的范围更加广泛,一定程度上可以认为分布式机器学习为联邦学习的超集。具体地,分布式学习强调的是对于不同结点的计算能力的运用,而分布式机器学习对于计算能力的运用有着多种方法:

    • 在分布式计算中,可以将所有数据按照结点的计算能力进行随机分布进行训练。
    • 在分布式计算中,可以将模型按照结点的计算能力进行划分,一个或者多个结点负责模型的一部分计算;当有多个结点参与模型的同一部分的计算时,此时在该部分内部实际上又是一个并行计算。
    • 可以同时结合上述的两种方法进行分布式计算,从而最大限度的运用对于多个结点的计算能力。
  • 对于联邦学习而言,其更看重用户的隐私,在分布式机器学习的过程中,中心结点是拥有所有的数据的(这当然存在一个收集数据的过程),其只需要决定各个参与结点怎么进行计算,而数据是否在这些结点之间发生传输,或者发生什么样的传输均不需要关心;对于联邦学习则不行,各个参与结点所有的数据(这里的数据均是指训练数据,而不是指训练产生的梯度或者模型参数等数据)在联邦学习中则不会也不能进行任何传播。

  • 除了上述的不同之外,两者在数据分布上还有一个巨大的不同。由于分布式机器学习不关心数据在结点之间的传播(或者说所有的训练数据是平等的,当各个结点需要的数据确定后,各个数据会按照与需要数据量成正比的概率分布在各个结点上),其在分发数据的时候可以保证数据分布的独立同分布(这在机器学习中是一个重要的特性,很多方法在统计学中均要求存在数据独立同分布的假设成立);而对于联邦学习而言,其数据由于不能进行随机的划分,通常是不符合独立同分布的假设的。

在介绍了横向联邦学习与分布式机器学习的不同后,为了后文更清楚地进行叙述,后文将会使用参数服务器来代替中心服务器,使用工作结点来代指参与模型训练过程的结点。

横向联邦学习的评价指标

一个联邦学习的架构或者算法的好坏是由其评价指标所决定的,在联邦学习的发展过程中出现了一些具有代表性的评价指标,在这一部分将会介绍横向联邦学习的评价指标。

模型训练效果的评价指标

联邦学习的目的还是为了训练机器学习模型,所以其训练效果的评价指标可以使用机器学习常见的评价指标:例如可以使用训练时的损失函数、准确率、精确率召回率等作为联邦学习模型训练效果的评价指标。

通信效率的评价指标

对于通信效率常用的一个评价指标即,整个训练的完成时间,当对不同的通信算法进行在同一个环境下对同一个模型进行同等轮次的训练时,由于环境是相同的,其各个工作结点所花费的计算时间大致相同,因此可以使用整个训练完成的时间作为联邦学习的通信效率。除此之外,也可以为模型分发和模型聚合分别定义各自的评价指标,具体地,对于模型分发而言可以定义如下的通信效率指标[cite{zhou2021tsengine}]

C = 1 r n ∑ i = 1 r ∑ j = 1 n t i j C=\frac{1}{rn}\sum_{i=1}^{r}\sum_{j=1}^{n}t_{ij} C=rn1i=1rj=1ntij

其中, t i j t_{ij} tij 是第 j 个工作结点在第 i 轮中获得分发模型的时间;r 是模型分发的轮数;n 是工作结点个数。C 越小,模型分发的效率越高;而对于模型的聚合而言,则可以定义如下的通信效率指标[cite{zhou2021tsengine}]

G = 1 r ∑ i = 1 r m a x ( t i j ) , j = 1 , 2 , . . . , n G=\frac{1}{r}\sum_{i=1}^{r}max(t_{ij}),j=1,2,...,n G=r1i=1rmax(tij),j=1,2,...,n

其中, t i j t_{ij} tij 是第 i 轮中参数服务器从第 j 个工作结点处获得聚合模型的时刻;r 是模型聚合的轮数;n 是工作节点个数。G 越小,模型聚合的效率越高。

横向联邦学习近期取得的成果

联邦学习提出不久后,便有人提出了异步联邦学习:[cite{chen2019communication}] cite{zhang2015staleness} [cite{jianmin2016revisiting}],因此最开始的联邦学习也就变成了同步联邦学习。异步联邦学习指的是在传统的联邦学习基础上去除中心的参数服务器,不再使用参数服务器进行通信,而是各个结点之间直接进行通信,所谓异步的体现实际上指的是不再需要像同步联邦学习那样参数服务器需要等待所有工作结点完成一轮的训练后才能够获得新的模型,在异步联邦学习中,每有一个或者一定数量[cite{jianmin2016revisiting}]的工作结点完成训练后即可进行一次聚合操作,由于没有参数服务器,在异步联邦学习的过程中往往不需要进行模型的分发,当完成模型的聚合后,参与聚合的结点自然而然的就拥有了最新的模型参数。

在同步联邦学习方面,近期的主要成果包括:[cite{mcmahan2017communication}] [cite{konevcny2016federated}] [cite{zhou2021tsengine}]

在异步联邦学习方面,近期的主要成果包括:[cite{watcharapichat2016ako}] [cite{hong2021dlion}]

除了上面的成果,还有一些方法同时适用于同步联邦学习和异步联邦学习,这些方法着重考虑通过减少数据传输量来达到提升通信效率:[cite{lin2017deep}] [cite{seide20141}]

还有一些属于分布式机器学习的研究,但是他们却可以很好的应用到联邦学习中:[cite{luo2018parameter}] [cite{mai2015optimizing}] [cite{tao2018esgd}] [cite{zhang2017poseidon}] [cite{strom2015scalable}] [cite{zhang2015staleness}] [cite{wen2017terngrad}] [cite{he2021beamer}]

总体来说,联邦学习取得了巨大的发展,在通信效率的提升方面主要分为通信架构的改进和传输算法的改进。在通信架构从最开始的传统模型慢慢提升到异步的模型、多参数服务器的方法、树形架构、TSEngine等等;而在传输算法方面:从最开始的所有梯度均进行发展为传输部分梯度、进行数据压缩等等。

在第四部分将会对整个发展过程进行详细介绍。

研究进度、发展过程

此部分将会详细介绍整个关于横向联邦学习通信效率提升的发展过程。

同步联邦学习的发展

这部分主要介绍同步联邦学习相关的论文。

去数据中心的高效深度网络训练方法研究

[cite{mcmahan2017communication}]作为最早一批研究同步联邦学习的论文,其中的工作有着巨大的指导意义。

该文不仅总结了联邦学习的特点、联邦学习对于隐私的保护等联邦学习相关的基本概念。还提出了不同的聚合算法。
该文中指出有两种方法可以减轻通信带来而瓶颈:

  • 增加并行度,即让更多的参与者进行梯度更新。
  • 增加计算度,让每个参与者进行更多的计算。

根据这两种思想,本文根据不同的并行度,不同的计算度设计了不同的联邦学习算法,一些典型的算法如下:

  • Federeated SGD:该算法为最大并行度、最低计算度下的联邦学习,即本地结点每进行一次梯度的计算则全部参与一次更新获取新的模型。
  • Federated Averaging:该算法为可调整并行度、可调整计算的的联邦学习,即每个工作结点可以工作一段时间后,随机选择一部分工作结点的梯度更新,之后所有工作结点获取最新的模型。

作者对于上述的两种大的算法进行的细致的实验得出了几个重要的结论:

  • 算法的计算度提升到一定值后,再次提升计算度,模型的训练效果会下降,且会出现较为剧烈的抖动;
  • FedAvg算法相比于FedSGD有着更快的收敛速度;
  • 算法的并行度增加到一定值时,如果此时继续增加算法的并行度,整体的收敛速度反而会下降。

上面的结论告诉我们,我们在进行同步联邦学习的时候,在增加算法的并行度和计算度的时候需要考虑上限,而不能一味地采用最大的并行度与计算度,这样往往是得不偿失的。

同时作者做了聚合算法与初始化种子的选择相关实验。具体的,对于聚合算法作者采用如下的公式进行描述:

w t + 1 = θ w t 1 + ( 1 − θ ) w t 2 ,   θ ∈ [ − 0.2 , 1.2 ] w_{t+1} = \theta w_t^1 + (1-\theta) w_t^2,\ \theta\in[-0.2,1.2] wt+1=θwt1+(1θ)wt2, θ[0.2,1.2]

作者根据 θ \theta θ的取值不同,各个工作结点是否采用相同的初始参数做了相关的实验,实验结果如下:
在这里插入图片描述

从实验结果中可以看出选取 θ = 0.5 \theta=0.5 θ=0.5和采用相同的参数进行初始化能够获得更低的损失。

用于提升通信效率的策略

[cite{konevcny2016federated}]中提出了structured updatesketched update来提升通信效率。其中的structured update的主要思想是通过控制梯度矩阵的秩不超过 K K K来减少通信的数据量。而sketched update的主要思想则是在发送梯度信息之前对梯度进行压缩,这里的压缩指的是将梯度信息压缩成最大值或者最小值,这样就可以用1-bit来表示了(比如1表示当前梯度信息为最大值,0表示当前信息为最小值),这样的话,对于32-bit的浮点数来说,压缩率就达到了32倍。

TSEngine

[cite{zhou2021tsengine}]提出了一种全新的架构以及算法模式。在TSEngine中的网络拓扑不再是传统的参数服务器的架构,在TSEngine中除了要求参数服务器与各个工作结点能够互相通信之外,其还要求任意两个工作结点可以互相通信。

TSEngine的主要思想是通过利用工作结点之间的带宽来提升整个联邦学习的通信效率,属于通过简介增加服务器带宽来实现通信效率的提升。除此之外,TSEngine中还增加了调度算法,在其调度算法中,每次的发送会记录发送时间来计算估计带宽,同时当有结点进行发送时,其会优先使用一只最大带宽的链路进行发送,从而达到提升通信效率的效果。

异步联邦学习的发展

这一部分主要介绍异步联邦学习相关的论文。

Ako

[cite{watcharapichat2016ako}]中提出了一种能够自动的调整每轮参与同步的梯度比例方法。

具体地,Ako(毛利语中主动学习的意思)中提出了Partial Gradient Exchange AlgorithmPGE),该算法主要是为了解决在没有参数服务器的异步联邦学习中,每个工作结点均需要向其他结点发送梯度带来的巨额流量问题。

下图是带有PGE的结构:
在这里插入图片描述

PGE算法:

  • 各个工作结点计算本地的梯度,并进行划分;
  • 向其他工作结点发送某一个梯度信息;
  • 其他的工作结点在完成本地梯度的计算后也会继续发送梯度的划分。

更加具体的细节:

  • 梯度划分的个数可能并不会刚好与工作结点的个数相等,在梯度的划分个数较多的情况下,每一轮会依次选择其中的 N − 1 N-1 N1个进行发送指到保证所有的梯度能够延迟到达其他工作结点(后续会解释如何实现延迟到达),如果梯度划分的个数较少的情况下,则可能会出现多个结点收到的同一份梯度(也就是进行拷贝操作)。
  • 在梯度划分个数和结点个数减一相同的情况下(不同的情况下可以通过选择部分或者拷贝保证每轮参与梯度划分个数与结点个数相同),会保证在延迟发送的时候,每一轮其他工作结点当前收到的梯度与之前收到的不同,一个简单的实现是:例如当前有四个工作结点,当前的工作结点 1 1 1将梯度划分为三份 1 , 2 , 3 1, 2, 3 1,2,3那么第一轮工作结点 2 , 3 , 4 2,3,4 2,3,4收到的来自工作结点 1 1 1的梯度划分依次是: [ 1 , 2 , 3 ] [1, 2, 3] [1,2,3];那么下一轮就会收到 [ 2 , 3 , 1 ] [2, 3, 1] [2,3,1]在下一轮会收到 [ 3 , 1 , 2 ] [3, 1, 2] [3,1,2]。(这一部分会在 A l g o r i t h m   1 Algorithm\ 1 Algorithm 1中具体体现)。

上述的过程中表明当一个工作结点进行梯度的发送的时候,另外一个工作结点只能收到部分梯度,这就导致了延迟。为了减少延迟的影响,作者保证能够在一定数量的通信后让之前未参与聚合梯度也参与聚合。

下图展示了该过程:
在这里插入图片描述

  • 当一个结点在 t t t时刻向其他的结点发送了部分梯度后会在本地节点保存所有的梯度信息,该结点在 t + 1 t+1 t+1时刻计算出新的梯度之后,会将当前算出的梯度与保存的梯度进行一次聚合。
  • 工作结点在 t + 1 t+1 t+1时刻发送的梯度则是当前的梯度和之前保存的梯度聚合后的值。
  • 工作结点在 t + 2 t+2 t+2时刻同样会重复上述的过程。

下图描述了PGE的详细过程。
在这里插入图片描述

注意:图中蓝色圈中的 i i i应该改成 i + 1 i+1 i+1

Dlion

[cite{hong2021dlion}]中提出了基于微型云架构的联邦学习。Dlion基于以下三个目标进行设计:

  • 最大化数据并行,最大化数据并行能够减少模型训练所需要的时间,同时需要尽可能减少训练的精度损失。
  • 减少通信耗时:减少结点之间的通信耗时的同时,需要尽可能减少模型的精度损失。
  • 提升模型准确率:通过共享结点之间的数据来减少负面影响。

上述的三个目标依次对应前面提出的三个关键技术点。
下图展示了三个关键技术:
在这里插入图片描述

Weighted Dynamic Batching是通过对各个结点的相对计算能力进行估计,从而动态设置批量大小。

Per-Link Prioritized Gradient Exchange负责选择重要的梯度进行更新,使用 M a x   N Max\ N Max N算法该算法会选择绝对值大于等于绝对值最大的梯度的 N % N\% N%的梯度进行更新。

由于上面介绍的方法中没有使用参数服务器,而且采用了异步的方法,参与训练的各个结点所拥有的参数是可能存在不同的。Direct Knowledge Transfer部分的方法就是周期性的进行参数交换:选择出训练效果最好的结点,其他结点从该结点获取参数。

减少通信数据量

这部分主要介绍在联邦学习中通过减少通信数据量的方式来提升通信效率的论文。

1-bit压缩算法

[cite{seide20141}]中提出了一种开创性的压缩算法。文中的算法成功实现了将32位浮点数压缩成1位的0-1数来实现数据的压缩,由于数据量从原来的32位浮点数变成了1位的0-1数,每一轮的通信效率变为原来的32倍,不过由于存在梯度的损失,可能还需要更多的轮数才能收敛,但是从实验的结果来看,该压缩算法依然带来了十倍以上的通信效率提升。

具体地,本文中采用异步联邦学习的架构,其基本思想是希望通信时间与计算时间同时达到饱和,即满足:

T c a l c ( K ^ ) = T c o m m ( K ^ ) T_{calc}(\hat K)=T_{comm}(\hat K) Tcalc(K^)=Tcomm(K^)

也就是选取 K K K让每轮的通信时间和计算时间相等,这样当通信完成是下一轮的计算也完成可以继续进行通信。

文章使用了双缓冲机制:将一个用于模型训练的批量分成大小相等的两部分,当其中一部分完成训练后,才能开始后一部分计算,此时第一部分完成的数据则可以进行异步联邦学习中的通信。

除了使用双缓冲机制,本文提出了1-bit压缩算法,具体可以描述为如下的公式:

G q u a n t ( t ) = Q ( G ( t ) + Δ ( t − N ) ) Δ ( t ) = G ( t ) − Q − 1 ( G q u a n t ( t ) ) G^{quant}(t) = Q(G(t)+\Delta(t-N))\\ \Delta(t)=G(t)-Q^{-1}(G^{quant}(t)) Gquant(t)=Q(G(t)+Δ(tN))Δ(t)=G(t)Q1(Gquant(t))

参数说明如下:

  • G G G:本轮计算出来的梯度。
  • Q Q Q:量化函数,具体的,如果输入大于 0 0 0,则量化成 1 1 1,输出小于 0 0 0,则量化成 0 0 0,这样就可以将原本需要用 32 32 32位表示的梯度只用 1 1 1位进行表示。
  • G q u a n t G^{quant} Gquant:量化后的梯度。
  • Δ \Delta Δ:梯度误差。

简单来说大于0的梯度被压缩为1,而小于等于0的梯度被压缩为0,同时为了防止压缩后的梯度带来过大的损失,其中的 Δ \Delta Δ则是为了修正损失而提出的,其会记录丢失的精度用于下一次的更新中。

该算法虽然能够很好的减少通信量,但是其局限性过大,文中的方法目前只在语音识别方面取得较好的成就。

深度梯度压缩

[cite{lin2017deep}]提出了深度压缩算法。与1-bit压缩算法不同,该方法是建立在同步联邦学习的基础上。该方法主要是通过仅对重要的梯度进行传送以达到压缩梯度的目的。

具体地,该算法只会发送梯度大于某个门限的梯度,小于等于门限值的梯度不会进行发送,不过该算法并没有直接将小于等于门限值的梯度进行丢弃,而是将其保存起来,同一个参数的小于等于门限值的梯度会被累加起来,当其累加到门限值时也会被发送,但是实验表明该算法的压缩率最大可以到达近600倍(由原来的232MB的梯度大小变成了0.39MB的梯度大小),且模型的准确率基本不变(甚至提升了 0.01 % 0.01\% 0.01%)。

上述的算法可以描述为下图。
在这里插入图片描述

适用于联邦学习的分布式机器学习方法

这部分介绍论文的论文方法原本均为分布式机器学习背景下提出,但是其中的思想可以很好的适用于联邦学习,因此这里对这些论文进行单独的介绍。

Parameter Hub

[cite{luo2018parameter}]中提出了Parameter Hub,该架构从软硬件两方面设计专门用于参数服务器机架级别的架构。

其主要提出了PBox,在中心化的参数服务器上配置多块网卡,目的是为了解决内存与网卡之间的I/O请求瓶颈。

MLNet

[cite{mai2015optimizing}]提出了MLNet,其主要设计一个自定义的网络层来达到特性化的设置从而提升通信的效率,该模块主要管理流量调度的优先级,以及设法减少通信流量。其能够最高减少 78 % 78\% 78%的通信时间。

eSGD

[cite{tao2018esgd}]中提出了eSGD算法,该算法虽然研究的是分布式机器学习,但是其每次选择部分的梯度进行更新的思想已经很好的利用到联邦学习中并且被改进提出了deep gradient compression算法,前文已经进行了介绍。

eSGD算法的思想与deep gradient compression算法有着相似之处,二者均是选择一部分的梯度进行更新,但是二者对于重要梯度的定义有所不同。

一般的参数聚合使用的方法是:

x t = x t − 1 − γ 1 N b Σ i N Σ z ∇ L ( x , z ) x_t = x_{t-1}-\gamma \frac 1 {Nb}\Sigma_i^N\Sigma_z \nabla L(x, z) xt=xt1γNb1ΣiNΣzL(x,z)

x t x_t xt代表 t t t轮的时候的参数, γ \gamma γ代表学习率, N N N代表参与的结点个数, b b b代表每个节点训练数据的大小(为了可读性这里假设的是所有结点拥有的数据量相同), L ( x , z ) L(x, z) L(x,z)代表损失函数的参数为 x x x,而输入为 z z z。上面的式子也就是新的梯度是所有节点的梯度的平均值。

而如果增加 x i , t x_{i, t} xi,t用来表示第 i i i个参数在第 t t t轮的值,在 T T T轮之后结束我们可以用下面的式子来代替上面的式子:

x i , t = x i , t − 1 − γ 1 N b T Σ i N Σ z Σ j T − 1 ∇ L ( x j , z ) x_{i,t} = x_{i, t-1} - \gamma \frac 1 {NbT}\Sigma_i^N\Sigma_z\Sigma_j^{T-1}\nabla L(x_j, z) xi,t=xi,t1γNbT1ΣiNΣzΣjT1L(xj,z)

可以看到这里的思想与deep gradient compression中的思想类似均是通过累计梯度的方法来更新。

算法的整体流程则可以描述为下图:
在这里插入图片描述

Poseidon

[cite{zhang2017poseidon}]中提出了Poseidon,这是一个适用于分布式GPU集群的架构,其主要通过规范各个GPU之间的通信调度来实现分布式机器学习的通信效率提升。

一种适用于DNN的可扩展分布式机器学习方法

[cite{strom2015scalable}]中提出了一种基于梯度压缩的方法,该方法与eSGDdeep gradient compression属于同一类型,但是有着略微的不同,该方法中,不是采用梯度累计的方法,而是使用动态的门限进行梯度的选择,具体的算法可以描述为下图:
在这里插入图片描述

该算法最高的压缩率达到了12978倍,这是一个巨大的数字。但是如果数据集发生变化,其在保证压缩率的同时,不知道准确率是否也能得到保证。

梯度过期感知的异步SGD

异步分布式学习与异步联邦学习有着一个共同的重要的挑战:解决梯度过期带来影响。梯度过期指的是,当部分的工作结点参与更新后,这些工作结点会获得新的模型;但是其余还在计算的结点由于没有根据新的参数计算梯度,这些结点计算出来的梯度可能并不会是模型朝着更好的方向进化,而是反向进化。梯度过期会导致模型需要更多的迭代轮数才能收敛,而当模型的轮数增加时,通信的压力也就随之增加了。

解决梯度过期的方法之一就是减少学习率(这是因为当有用梯度更新后,为了防止过期梯度过多的影响模型,此时如果将学习率降低,那么模型收到过期梯度的影响将会下降),[cite{zhang2015staleness}]中提出的方法则可以动态的感知梯度过期而实现动态的调整学习率,通过对学习率的动态调整消除梯度过期的影响。该方法可以描述为如下:

c = ⌊ λ n ⌋ g i = 1 c ∑ l = 1 c α ( τ i , l ) Δ θ l , l ∈ 1 , 2 , . . . , λ θ i + 1 = θ i − g i c=\lfloor \frac{\lambda}{n} \rfloor\\ g_i = \frac{1}{c}\sum_{l=1}^c \alpha(\tau_i,l)\Delta\theta_l, l \in {1, 2, ..., \lambda}\\ \theta_{i+1} = \theta_i - g_i\\ c=nλgi=c1l=1cα(τi,l)Δθl,l1,2,...,λθi+1=θigi

参数说明:

  • λ \lambda λ:工作结点的个数;
  • μ \mu μ:每个节点的批量大小;
  • α \alpha α:学习率;
  • τ i , l \tau_{i,l} τi,l:工作结点 l l l的梯度过期程度。如果一个工作结点在 i i i时刻发送了 j j j时刻的梯度,这意味着当前发送的梯度是过期的,那么 τ i , l = i − j \tau_{i,l}=i-j τi,l=ij

作者通过实验发现其中的 τ \tau τ大多数都等于 n n n。有了这个直观认识,就可以通过控制 n n n来控制能够容忍的过期程度。

时刻 i i i,结点 l l l的学习率由如下公式决定:
α i , l = α 0 τ i , l i f   τ i , l > 0 α i , l = α 0 i f   τ i , l = 0 \alpha_{i,l}=\frac{\alpha_0}{\tau_{i,l}}\quad if\ \tau_{i,l} > 0 \\ \alpha_{i,l}=\alpha_0\quad if\ \tau_{i,l} = 0 αi,l=τi,lα0if τi,l>0αi,l=α0if τi,l=0

TernGrad

[cite{wen2017terngrad}]中提出了TernGrad (Ternary Gradients),所谓的Ternary实际上是根据梯度的符号将其变为{0, 1, -1}中的一个值。所以TernGrad算法实际上也是梯度压缩算法中的一种。

算法的整体流程可以描述为下图:
在这里插入图片描述

Beamer

[cite{he2021beamer}]为分布式机器学习中的协流设计了一种调度算法,该调度算法的目的是为了最小化阶段完成时间(即各个流量完成时间之和最少),该方法主要是大概故居流量的工作量来尽可能的将短流量放在前面调度。

面临的挑战

此部分介绍关于提升横向联邦学习通信效率面临的挑战。

通信架构方面的挑战

在带有中心参数服务器的横向联邦学习中,最开始由于只有一个参数服务器其最大的通信效率问题则是服务器需要承受大量的流量,参数服务器很容易就成为通信的瓶颈。一段时间的发展后,出现了多参数服务器的联邦学习[cite{chen2015mxnet}],多参数服务器联邦学习的出现使得参数服务器不再那么容易成为通信的瓶颈,其能够很好的将原来一个参数服务器的通信压力进行负载均衡。再到后面树形架构[cite{mai2015optimizing}]的提出,成功让工作结点也参与到通信进程中,这样一来参数服务器的压力进一步减少。而TSEngine[cite{zhou2021tsengine}]的提出更是将这一提升推向高潮。

通信架构方面的发展也出了没有参数服务的联邦学习(即异步联邦学习),在该架构中,每个工作结点均可以看成是一个参数服务器。这样的架构彻底解放了参数服务器,让所有的工作结点均成为同等性质的结点。

在通信架构方面的困难,需要对同步联邦学习和异步联邦学习分别进行讨论。

同步联邦学习

对于同步联邦学习来说,虽然出现了非常多的架构,但是这些架构往往均需要进行专门的配置,用户的自由行不高,例如对于多参数服务器的联邦学习而言,需要能够找到多个服务器结点,这些服务器结点与所有的工作结点要能够通信,同时要求这些服务器的带宽类似以免过高的带宽差异导致网络通信速度的下降;而对于树形联邦学习的架构,则需要专门假设符合树形结构的通信链路;同时对于TSEngine来说,虽然其提升最大,但是其要求也是最为苛刻的:需要任意两个结点之间均存在链路,且链路之间的带宽相互独立。

因此对于同步联邦学习的通信架构的主要挑战是:能否提供一种更加具有自由度的架构,让用户根据其自身情况进行配置,而不是将网络架构固定。

异步联邦学习

对于异步联邦学习来说,其由于取消了参数服务器,改为了各个工作结点之间进行通信,因此其也要求全联通的网络(即任意两个工作结点之间可以互相通信),除此之外,由于其缺少参数服务器进行同步的问题,其还需要解决梯度过期的问题(梯度过期会导致训练进展缓慢,属于通信架构带来的内在缺陷)。

因此对于异步联邦学习的通信架构的主要挑战是:解决全联通的限制;消除梯度过期带来的影响。

通信算法方面的挑战

对于通信算法方面,主要包含两方面:梯度的裁剪和压缩算法。梯度裁剪和压缩算法是两个不同的概念,对于梯度裁剪算法,其可能会导致模型的精确度下降,但是对于压缩算法,其并不会导致模型精度的下降。

梯度裁剪

梯度的裁剪往往不需要过度的执行时间(往往只需要遍历一次梯度信息,选取出需要发送的梯度,与不使用梯度裁剪的通信算法相比,其复杂度并没有改变,只是常数上的提升),而带来的提升是显而易见的(因为直接减少了数据量的发送),这也表明梯度裁剪算法是可以应用于不同的联邦学习通信架构方面。目前最为前沿的梯度裁剪算法和1-bit梯度发送[cite{seide20141}]对于梯度选择算法而言需要确定合适的门限值进行梯度的发送。而对于一位梯度发送而言,其目前只适用特定的领域。

因此梯度裁剪方面的主要挑战是:如何提出一种普适性的梯度裁剪算法。

压缩算法

任何压缩算法都可以很好的运用到联邦学习的通信过程中,不过需要注意的时,压缩算法的压缩和解压时间与带来的通信效率的提升是否是正向的。
因此压缩算法在联邦学习通信中的主要挑战是:保证在考虑压缩算法的耗时的情况下,依然能够带来正向提升。

总结与未来工作

这部分总结文章,并且提出未来的工作方向。

总结

本文介绍了联邦学习的定义,对横向联邦学习的各类提升通信效率的文章进行介绍和总结,还介绍了一些分布式机器学习的方法,这些方法往往可以很容易的适用于横向联邦学习;同时提出了当下面临的主要挑战、以及对于后续发展的建议。

未来工作

对于横向联邦学习的通信效率提升主要可以通过两个方面进行提升:

  • 通信架构:现有的通信架构限制性过大,因此设计能够在最小覆盖网络拓扑下进行联邦学习是一个重要的研究方向;通信架构的设计也可以朝着超高定制化的方向进行发展,其前提是需要能够充分利用带宽。
  • 调度算法:目前的横向联邦学习鲜有调度算法,或者已有的调度算法提升并不够,因此设计新的使用于联邦学习的调度算法是一个重要的研究方向。

除了上述方面的提升,增加链路的带宽依然是一个重要的手段,因此联邦学习中的通信问题可能会和6G技术进行紧密的节后。通信效率的提升同样可以通过减少发送数据的数据量来提升,为此在极小影响模型准确率的情况下,减少通信轮数也是一个重要的研究方向。

Reference

我不会laytexmarkdown我直接放bib吧。

@article{wen2017terngrad,
title={Terngrad: Ternary gradients to reduce communication in distributed deep learning},
author={Wen, Wei and Xu, Cong and Yan, Feng and Wu, Chunpeng and Wang, Yandan and Chen, Yiran and Li, Hai},
journal={Advances in neural information processing systems},
volume={30},
year={2017}
}

@article{chen2015mxnet,
title={Mxnet: A flexible and efficient machine learning library for heterogeneous distributed systems},
author={Chen, Tianqi and Li, Mu and Li, Yutian and Lin, Min and Wang, Naiyan and Wang, Minjie and Xiao, Tianjun and Xu, Bing and Zhang, Chiyuan and Zhang, Zheng},
journal={arXiv preprint arXiv:1512.01274},
year={2015}
}

@inproceedings{seide20141,
title={1-bit stochastic gradient descent and its application to data-parallel distributed training of speech dnns},
author={Seide, Frank and Fu, Hao and Droppo, Jasha and Li, Gang and Yu, Dong},
booktitle={Fifteenth annual conference of the international speech communication association},
year={2014}
}

@article{strom2015scalable,
title={Scalable distributed DNN training using commodity GPU cloud computing},
author={Str{"o}m, Nikko},
year={2015}
}

@inproceedings{zhang2017poseidon,
title={Poseidon: An efficient communication architecture for distributed deep learning on { \{ {GPU } \} } clusters},
author={Zhang, Hao and Zheng, Zeyu and Xu, Shizhen and Dai, Wei and Ho, Qirong and Liang, Xiaodan and Hu, Zhiting and Wei, Jinliang and Xie, Pengtao and Xing, Eric P},
booktitle={2017 USENIX Annual Technical Conference (USENIX ATC 17)},
pages={181–193},
year={2017}
}

@inproceedings{luo2018parameter,
title={Parameter hub: a rack-scale parameter server for distributed deep neural network training},
author={Luo, Liang and Nelson, Jacob and Ceze, Luis and Phanishayee, Amar and Krishnamurthy, Arvind},
booktitle={Proceedings of the ACM Symposium on Cloud Computing},
pages={41–54},
year={2018}
}

@inproceedings{mai2015optimizing,
title={Optimizing network performance in distributed machine learning},
author={Mai, Luo and Hong, Chuntao and Costa, Paolo},
booktitle={7th USENIX Workshop on Hot Topics in Cloud Computing (HotCloud 15)},
year={2015}
}

@article{konevcny2016federated,
title={Federated learning: Strategies for improving communication efficiency},
author={Kone{\v{c}}n{`y}, Jakub and McMahan, H Brendan and Yu, Felix X and Richt{‘a}rik, Peter and Suresh, Ananda Theertha and Bacon, Dave},
journal={arXiv preprint arXiv:1610.05492},
year={2016}
}

@inproceedings{tao2018esgd,
title={eSGD: Communication efficient distributed deep learning on the edge},
author={Tao, Zeyi and Li, Qun},
booktitle={USENIX Workshop on Hot Topics in Edge Computing (HotEdge 18)},
year={2018}
}

@inproceedings{hong2021dlion,
title={Dlion: Decentralized distributed deep learning in micro-clouds},
author={Hong, Rankyung and Chandra, Abhishek},
booktitle={Proceedings of the 30th International Symposium on High-Performance Parallel and Distributed Computing},
pages={227–238},
year={2021}
}

@article{lin2017deep,
title={Deep gradient compression: Reducing the communication bandwidth for distributed training},
author={Lin, Yujun and Han, Song and Mao, Huizi and Wang, Yu and Dally, William J},
journal={arXiv preprint arXiv:1712.01887},
year={2017}
}

@inproceedings{mcmahan2017communication,
title={Communication-efficient learning of deep networks from decentralized data},
author={McMahan, Brendan and Moore, Eider and Ramage, Daniel and Hampson, Seth and y Arcas, Blaise Aguera},
booktitle={Artificial intelligence and statistics},
pages={1273–1282},
year={2017},
organization={PMLR}
}

@article{regulation2018general,
title={General data protection regulation (GDPR)},
author={Regulation, General Data Protection},
journal={Intersoft Consulting, Accessed in October},
volume={24},
number={1},
year={2018}
}

@inproceedings{abadi2016tensorflow,
title={TensorFlow: a system for Large-Scale machine learning},
author={Abadi, Mart{’\i}n and Barham, Paul and Chen, Jianmin and Chen, Zhifeng and Davis, Andy and Dean, Jeffrey and Devin, Matthieu and Ghemawat, Sanjay and Irving, Geoffrey and Isard, Michael and others},
booktitle={12th USENIX symposium on operating systems design and implementation (OSDI 16)},
pages={265–283},
year={2016}
}

@article{li2020review,
title={A review of applications in federated learning},
author={Li, Li and Fan, Yuxi and Tse, Mike and Lin, Kuo-Yi},
journal={Computers & Industrial Engineering},
volume={149},
pages={106854},
year={2020},
publisher={Elsevier}
}

@article{yang2019federated,
title={Federated machine learning: Concept and applications},
author={Yang, Qiang and Liu, Yang and Chen, Tianjian and Tong, Yongxin},
journal={ACM Transactions on Intelligent Systems and Technology (TIST)},
volume={10},
number={2},
pages={1–19},
year={2019},
publisher={ACM New York, NY, USA}
}

@article{zhou2021tsengine,
title={TSEngine: Enable Efficient Communication Overlay in Distributed Machine Learning in WANs},
author={Zhou, Huaman and Cai, Weibo and Li, Zonghang and Yu, Hongfang and Liu, Ling and Luo, Long and Sun, Gang},
journal={IEEE Transactions on Network and Service Management},
volume={18},
number={4},
pages={4846–4859},
year={2021},
publisher={IEEE}
}

@article{chen2019communication,
title={Communication-efficient federated deep learning with layerwise asynchronous model update and temporally weighted aggregation},
author={Chen, Yang and Sun, Xiaoyan and Jin, Yaochu},
journal={IEEE transactions on neural networks and learning systems},
volume={31},
number={10},
pages={4229–4238},
year={2019},
publisher={IEEE}
}

@article{zhang2015staleness,
title={Staleness-aware async-sgd for distributed deep learning},
author={Zhang, Wei and Gupta, Suyog and Lian, Xiangru and Liu, Ji},
journal={arXiv preprint arXiv:1511.05950},
year={2015}
}

@inproceedings{jianmin2016revisiting,
title={Revisiting distributed synchronous SGD},
author={Jianmin, Chen and Xinghao, Pan and Rajat, Monga and Rafal, Jozefowicz},
booktitle={International Conference on Learning Representations Workshop Track},
year={2016}
}

@inproceedings{watcharapichat2016ako,
title={Ako: Decentralised deep learning with partial gradient exchange},
author={Watcharapichat, Pijika and Morales, Victoria Lopez and Fernandez, Raul Castro and Pietzuch, Peter},
booktitle={Proceedings of the Seventh ACM Symposium on Cloud Computing},
pages={84–97},
year={2016}
}

@article{he2021beamer,
title={Beamer: Stage-aware coflow scheduling to accelerate hyper-parameter tuning in deep learning clusters},
author={He, Yihong and Cai, Weibo and Zhou, Pan and Sun, Gang and Luo, Shouxi and Yu, Hongfang and Guizani, Mohsen},
journal={IEEE Transactions on Network and Service Management},
volume={19},
number={2},
pages={1083–1097},
year={2021},
publisher={IEEE}
}

  • 18
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度学习模型分布式并行推理设计一般可以通过以下步骤实现: 1. 将模型进行切割,将模型的各个层次划分为不同的部分。 2. 将切割后的模型分配到不同的计算节点中进行推理计算。 3. 对于分配到不同计算节点的模型部分,进行数据并行处理,使得每个计算节点都能够对自己的数据进行计算。 4. 对于每个计算节点的计算结果进行聚合,得到最终的推理结果。 在分布式并行推理设计中,还需要考虑数据传输和通信的问题,以保证计算节点之间的数据同步和一致性。同时,还需要根据具体的硬件环境和应用需求,选择合适的分布式并行推理框架,如TensorFlow、PyTorch等,以实现高效的分布式并行计算。 ### 回答2: 深度学习模型分布式并行推理设计是指将模型的推理过程划分为多个子任务,并同时在多个计算设备上进行并行计算,以提高推理速度和效率。 在进行分布式并行推理设计时,需要考虑以下几个关键步骤: 首先,需要将深度学习模型进行切分。通常,可以将模型按照层级进行切分,将每个层级的计算划分到不同的计算设备上。这样可以使得每个设备只负责部分计算,减轻单个设备的计算压力,提高推理效率。 其次,需要考虑数据的分割和传输。在深度学习模型中,通常需要输入大量数据进行推理。因此,在分布式并行推理过程中,需要将输入数据进行合理的切分,并将切分后的数据分配到不同的计算设备上进行并行计算。同时,还需要考虑数据的传输和同步机制,以保证计算设备之间的数据一致性。 接着,需要进行并行计算的任务分配和调度。在分布式并行推理设计中,需要将切分后的模型和数据任务分配给不同的计算设备,并合理调度计算设备之间的通信和计算任务,以实现高效的并行计算。 最后,需要考虑结果的合并和输出。在分布式并行推理完成后,需要将各个计算设备得到的结果进行合并,并输出最终的推理结果。同时,还需要考虑结果的同步和一致性,以确保输出结果的准确性和完整性。 总而言之,深度学习模型分布式并行推理设计是一个复杂而关键的任务,需要考虑模型划分、数据传输、任务调度等多个方面的问题。通过合理设计和优化,可以实现高效的深度学习模型推理,并在大规模计算设备上快速完成推理任务。 ### 回答3: 深度学习模型分布式并行推理设计是指将一个大型的深度学习模型部署到多个计算节点上,通过分布式计算的方式实现模型的推理。下面是关于如何设计深度学习模型分布式并行推理的一些建议: 1. 模型并行设计:将模型分割成多个子模型,并将不同的子模型分配到不同的计算节点上进行计算。可以基于模型的结构特点进行切割,例如如果模型是由多个卷积层组成,可以每个卷积层分配一个计算节点。 2. 数据并行设计:将训练数据分割成多份,并将每份数据分配到不同的计算节点上进行计算。每个计算节点都使用一部分数据来进行推理,然后将结果进行合并。 3. 网络拓扑设计:将不同的计算节点通过高速网络连接起来,形成一个分布式的计算集群。可以采用主从架构,其中一个计算节点作为主节点负责控制任务的调度和结果的合并,其他计算节点作为从节点进行计算。 4. 任务调度算法:设计一种合适的任务调度算法来决定每个计算节点的工作任务分配。可以考虑负载均衡、任务优先级等因素,使各个计算节点的计算负载尽可能均衡,并确保推理任务能够按时完成。 5. 通信机制设计:考虑到分布式计算节点之间需要进行数据传输和通信,需要设计合适的通信机制来保证传输速度和数据完整性。可以使用消息传递接口或者共享内存等机制进行节点间的数据交换。 以上仅是关于深度学习模型分布式并行推理设计的一些基本建议,具体的实现方案因应用场景和需求而有所不同。需要根据具体情况进行深入研究和调优,以提高并行推理的效率和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值