数据并行训练:从参数服务器到All - Reduce架构及训练流程详解
1. 参数服务器架构的问题
在数据并行训练中,参数服务器架构是一种常见的范式,但它存在一些问题。
当分配更多节点作为工作节点(Workers)时,虽然训练吞吐量会提高,但通信延迟也会增加。因为更多的工作节点需要同步,会有更多的数据需要通信,而参数服务器数量减少会导致通信带宽降低。同时,很难确定参数服务器和工作节点的最佳比例,更多参数服务器意味着较低的通信延迟但较低的训练吞吐量,更多工作节点则相反。
此外,参数服务器架构还带来了较高的编码复杂度:
- 需要显式定义 Worker() 和 ParameterSever() 对象,并在这些对象中实现额外的函数。
- 需要显式定义工作节点和参数服务器的通信句柄/指针,并且如果硬件环境发生变化(如参数服务器数量、工作节点数量、节点间的网络拓扑改变),还需要反复实现数据传输协议。
由于这些缺点,人们倾向于转向另一种数据并行训练范式——All - Reduce。
2. All - Reduce架构
All - Reduce架构摒弃了参数服务器的角色,每个节点都是等价的工作节点,直接解决了参数服务器架构的两个主要缺点:
- 不需要确定参数服务器和工作节点的比例,将所有节点都视为工作节点。
- 只需要定义工作节点对象,并将实现通信协议的负担交给标准的集体通信库,如NCCL和Blink。
2.1 Reduce操作
Reduce是与All - Reduce相关的一个简单的集体原
超级会员免费看
订阅专栏 解锁全文
363

被折叠的 条评论
为什么被折叠?



