1 同步算法
机器学习笔记:并行计算 (基础介绍)_UQI-LIUWJ的博客-优快云博客中所描述的属于同步算法,也就是所有的worker节点都完成了映射Map的计算后,系统才能执行规约 (Reduce) 通 信。这意味着即使有些节点先完成计算,也必须等待最慢节点;在等待期间,节点处于空闲状态。
1.1 同步的代价
- 实际软硬件系统中存在负载不平衡、软硬件不稳定、I/O 速度不稳定等因素。
- 因此 Worker 节点会有先后、快慢之分,不会恰好在同一时刻完成任务。
- 同步要求每一轮都必须等待所有节点完成计算,这势必导致“短板效应”,即任务所需时间取决 于最慢的节点。
- 同步会造成很多节点处于空闲状态,无法有效利用集群的算力。
2 异步算法
- 如果把图 13.7 中的同步屏障去掉,得到的算法就叫做异步算法 (Asynchronous Algorithm)
- 在异步算法中,一个 Worker 节点无需等待其余节点完成计算或通信。
- 当一个 Worker 节点完成计算,它立刻跟 Server 通信,然后开始下一轮的计算。
- 异步算法避免了等待,节点几乎没有空闲的时间,因此系统的利用率很高。
2.1 数据并发下的异步算法
我们仍然采用数据并发的方式,即把数据集
划分到 m
个
Worker
节点上。
服务器可以单独与某个 Worker 节点通信:
Worker
节点把计算出梯度发送给服务器,服务器把最新的参数发送给这个 Worker
节点。
如果想要编程实现异步算法,可以用
Message Passing Interface (MPI) 这样底层的库,也可以借助 Ray
3
这样的框架。用户需要做的工作是编程实现
Worker
端、 服务器端的计算。

2.1.1 worker端的计算
每个
Worker
节点独立做计算,独立与服务器通信;
Worker
节点 之间不通信,不等待。第 k
号
Worker
节点重复下面的步骤:

2.1.2 服务器端的计算
3 同步梯度下降 VS 异步梯度下降
同步并行梯度下降 完全等价于 标准的梯度下降,只是把计算分配到了 多个 Worker 节点上而已![]()
然而异步梯度下降算法与标准的梯度下降是 不等价 的。![]()
同步与异步梯度下降不只是编程实现有区别,更是在算法上有本质区别。
在理论上,异步梯度下降的收敛速度慢于同步算法,即需要更多的计算量才能达到相同的精度。【CPU时间上异步长于同步】
但是实践中异步梯度下降远比同步算法快【钟表时间商同步长于异步】,这是因为异步算法无需等待,Worker
节点几乎不会空闲,利用率很高。