第八周【任务1】神经网络训练加速(笔记)

训练加速主要针对并行加速

1. 基于数据的并行

1.1 模型平均

假设我们有10000条数据,分为10块,一块1000条数据。

又假设我们有10个GPU并行训练10块数据,那么我们要想方设法让他们彼此交流。假设10个GPU的参数矩阵都初始为 w 0 w_{0} w0,每个GPU都采用batch=100.

在第一轮训练之后,10个GPU有了10个不同的 w 1 w_{1} w1, 分别传回到server。然后server做平均得到一个统一的 w 1 ˉ \bar{w_{1}} w1ˉ。然后统一返回平均好的 w 1 ˉ \bar{w_{1}} w1ˉ

然后做第二个batch,算出10个 w 2 w_{2} w2, 然后上传,平均,返回。

在这里插入图片描述

注意,这个方案中,必须要等每一个GPU都算完同一个batch,上传所有10个参数矩阵后,再做平均。这样就产生了同步的瓶颈,所以要10个GPU要尽量性能相近,几乎同时得到batch训练结果

1.2 同步随机梯度下降

同步随机梯度下降其实也使用了类似的思路,只不过每个client上传的是GPU在当前batch算出的梯度 Δ w 1 \Delta w_{1} Δw1,10个梯度上传到server,然后做平均,返回平均的梯度 Δ w 1 ˉ \Delta \bar{w_{1}} Δw1ˉ,再做更新。

在这里插入图片描述

1.3 异步随机梯度下降

在这里插入图片描述

异步梯度下降有所不同

还是以上server和clients的情况。在server给了10个GPU初始参数 w 0 w_0 w0后,假设10个GPU从左到右依次计算性能下降。那么client1首先算出一个梯度,然后上传,server上的 w 0 w_0 w0首先根据第一个梯度算出新的参数 w 11 w_{11} w11,然后把新算出的参数返回client1,开始在client1上第二个batch的训练。然后第二个client算出了第一个batch的梯度,然后上传,server上已经更新的参数 w 11 w_{11} w11就根据这个梯度进行更新,得到新的参数 w 12 w_{12} w12,然后把这个 w 12 w_{12} w12返回到client2,进行第二个batch的训练。继续依次让其他client上传各自的梯度,server都根据上一个client的梯度算好的参数继续更新。

这样就大大提高了更新速度,突破了同步更新的瓶颈。

2.基于模型的并行

不同GPU负责不同神经网络隐藏层之间的参数矩阵的运算。比如第一二层之间的参数由GPU1算,第二三层之间的参数由GPU2算。

但是用得不多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值