【弹性训练】Adasum介绍(一)
【摘要】 Adasum 是一种针对分布式训练,卡间及节点间通信中梯度聚合的优化算法。与现有的梯度聚合方式相比
提出了一种模拟单机单卡梯度计算,从而减少在分布式聚合时的误差,
从根源上去解决在弹性训练中因扩缩节点产生的梯度聚合带来的模型精度降低问题。
1 分布式通信简介
并行任务通信一般分为P2P(Point-to-point communication)和 Collective communication。
P2P通信这种模式只有一个sender和一个receiver,即点到点通信。
Collective communication含多个sender多个receive。
Collective communication包含一些常见的原语
broadcast
reduce、allreduce
scatter、scatter reduce
gather、allgather
ring-base collectives
ring-allreduce
下面主要介绍一下allreduce,其他感兴趣的可以去查阅文末的参考文献。
all-reduce简单来说就是每个GPU都从其他GPU上面收集参数,同时对收集到的参数进行归并。
2 弹性训练
弹性训练:是一种在运行时可以动态扩展和缩减节点数量的,而无需重新启动或从保存的checkpoint恢复的分布式训练。
目前常用的框架有两种支持弹性训练:horovod、kungfu。
3 梯度优化算法
M-SGD(mini-batch stochastic gradient descent)是一种求解无约束最优值的一阶优化算法。公式如下
ω表示权重,lr表示学习率,m表示batch size,用g函数表示在t时刻时权重w的梯度。
4 Adasum
在一个batch size 下更新两次权重,在单机单卡训练,以及两卡卡训练的情况下权重更新情况如下图。
可以发现
多卡训练时,all-reduce与单机单卡的差异就在第二个batch中是以权重0时刻计算的梯度,还是权重1时刻计算的梯度。
Adasum 就是一种在all-reduce时,近似模拟单卡训练的梯度权重更新的一种算法。
Adasum 主要是近似计算第二个batch中以w1权重计算的梯度。具体推导细节请查看论文
Adasum 的三种形态,正交、平行以及既不平行也不正交
5 参考文献
分布式相关
https://www.zhihu.com/question/63219175
https://zhuanlan.zhihu.com/p/50116885
https://horovod.readthedocs.io/en/latest/adasum_user_guide_include.html
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)