并行计算基础知识

  • Post author:
  • Post category:其他




前言

这是王树森老师在YouTube上的机器学习视频的学习笔记,原视频通俗易懂,条理清晰。这里做简单记录,感兴趣者请移步王树森老师YouTube频道

频道链接:

YouTube频道


视频链接:

视频链接


本文主要总结了并行计算的基础知识,包括并行计算的存在意义、并行计算的计算过程与通信机制、通信对于并行计算效率的影响等问题。



并行计算的存在意义

机器学习的数据和网络规模巨大导致计算时间过长,并行计算用空间换时间,用多节点同时工作的方式减少Clock Time(但不减少CPU Time)。

并行计算由计算(Computation)和通信(Communication)两部分组成。计算即各个节点基于本地数据计算得到的参数值,通信即不同节点之间消息的传递。



并行计算中的计算(以用并行计算实现最小二乘回归的梯度下降为例)

对于最小二乘回归问题,我们希望基于样本



(

x

i

,

y

i

)

(\boldsymbol{x}_i,y_i)






(





x












i


















,





y










i


















)





训练得到参数



w

\boldsymbol{w}








w







以使得实现从未标记数据



x

\boldsymbol{x}








x







到其样本



y

y






y





的预测。已知该问题的损失函数为




L

(

w

)

=

i

=

1

n

1

2

(

x

i

T

w

y

i

)

2

.

(1)

L(\boldsymbol{w})=\sum_{i=1}^n\frac{1}{2}\left(\boldsymbol{x}_i^{\mathrm{T}}\boldsymbol{w}-y_i\right)^2. \tag{1}






L


(




w




)




=

















i


=


1


















n






























2














1

























(






x












i










T






















w












y










i



















)












2











.







(



1



)






如果用梯度下降法求解该问题,则每一步梯度计算如下:




g

(

w

)

=

L

(

w

)

w

=

i

=

1

n

(

x

i

T

w

y

i

)

x

i

=

i

=

1

n

g

i

(

w

)

.

(2)

\boldsymbol{g}(\boldsymbol{w})=\frac{\partial L(\boldsymbol{w})}{\partial \boldsymbol{w}}=\sum_{i=1}^n\left(\boldsymbol{x}_i^{\mathrm{T}}\boldsymbol{w}-y_i\right)\boldsymbol{x}_i=\sum_{i=1}^n \boldsymbol{g}_i(\boldsymbol{w}). \tag{2}








g




(




w




)




=
























w



















L


(




w




)






















=

















i


=


1


















n





















(






x












i










T






















w












y










i



















)









x












i




















=

















i


=


1


















n






















g












i


















(




w




)


.







(



2



)






可以看出,梯度向量可以被拆分成为子函数



{

g

i

(

w

)

}

\left\{\boldsymbol{g}_i(\boldsymbol{w})\right\}







{






g












i


















(




w




)


}






的求和,而各个子函数至于当前参数



w

\boldsymbol{w}








w







以及本地数据



(

x

i

,

y

i

)

(\boldsymbol{x}_i,y_i)






(





x












i


















,





y










i


















)





有关,与其他数据无关,因此可以设置



n

n






n





个计算节点(worker nodes)并行计算,之后将各自的参数传到服务节点(server node)进行求和,即可得到整体的梯度向量。

由此可以看出,并行计算中的计算环节比较简单,而值得讨论的是“通信环节”。



并行计算中的通信



两种通信机制



共享内存(Share Memory)

各个节点之间数据共享,每个节点都知道所有节点的数据以及信息。



消息传递(Massage Passing)

不同节点之间数据不共享,各自用本地数据进行计算之后彼此之间只做massage的传递。消息传递机制应用较广,因此下面主要讨论该机制。



通信架构



Client-Server Architecture

一个节点作为Server,专注统筹,其他节点做Worker,专职计算。

在这里插入图片描述



Peer-to-Peer Architecture

相邻节点之间通信,远端节点之间不通信。

在这里插入图片描述



用mapreduce实现client-server架构

具体步骤:

  1. Broadcast: Server节点将当前参数广播给所有Workers;
  2. Map: 所有的Worker用本地数据算梯度;
  3. Reduce: Workers把结果传回Server节点进行整合;



通信对于整体效率的影响

理想情况下,



m

m






m





个节点会使得计算速度增加



m

m






m





倍(Clock Time下降至



1

m

\frac{1}{m}


















m
















1
























),但是实际系统中有通信不同步等问题造成的时延。

定义加速比作为计算效率的度量:

在这里插入图片描述

可以看出,由于各个节点工作节奏不同,实际的加速比低于



m

m






m





。因此有必要对网络中的通信代价进行分析。



网络通信代价的来源

网络中通信代价主要来自于通信复杂度(Communication Complexity)、延迟(Latency)、以及同步时延。



通信复杂度(Communication Complexity)


定义

节点之间需要传的码字个数



影响

正比于系统参数(parameters)的数量以及节点的个数



延迟(Latency)

一次发送动作的耗时,与发送次数以及网络本身有关(以发送次数为单位)



总结

有如下不准确公式:




C

o

m

m

u

n

i

c

a

t

i

o

n

T

i

m

e

=

C

o

m

p

l

e

x

i

t

y

B

a

n

d

w

i

d

t

h

+

L

a

t

e

n

c

y

(3)

Communication Time=\frac{Complexity}{Bandwidth}+Latency \tag{3}






C


o


m


m


u


n


i


c


a


t


i


o


n


T


i


m


e




=



















B


a


n


d


w


i


d


t


h














C


o


m


p


l


e


x


i


t


y






















+








L


a


t


e


n


c


y







(



3



)








同步时延

对于同步系统,系统会等待所有节点完成计算工作之后再进入下一个工作循环,因此系统一次工作的时间由最慢的节点(Straggler)决定,如下图所示:

在这里插入图片描述

由此可知,节点数越多,Straggler的影响越大。



版权声明:本文为whn19980801原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。