Tensorflow-训练的并行模式介绍

TensorFlow中可以很容易地利用单个GPU加速深度学习模型的训练过程,但当需要利用更多的GPU或机器,需要了解如何并行化训练深度学习模型。常见的并行化深度学习模型的训练方式有两种,同步模式和异步模式。下文将对这两种模式展开介绍。

在此之前,还需要回顾一下TensorFlow是如何对深度学习模型进行训练的。深度学习模型的训练是一个迭代过程,在每一轮迭代中,前向传播算法会根据当前参数的取值计算出在一小部分训练数据上的预测值,再根据损失函数计算参数的梯度,通过反向传播算法更新参数。在并行化训练深度学习模型时,不同设备可以在不同训练数据上执行这个迭代过程,但不同的模式的区别在于不同的参数更新方式。

异步模式

每一轮迭代中,不同设备会读取参数最新的取值。但因为不同设备是异步地读取参数,所以得到的参数值可能会不一样。根据当前参数的取值和随机获取的一小部分训练数据,不同设备执行各自的反向传播过程,获取各自的关于参数更新的提取,对参数进行更新。在异步模式下,不同设备的训练过程以及对参数更新的过程是完全独立的。

实际上,异步模式可以理解为每个设备在训练时,自己训练自己的,更新也只更新自己的。多个设备共同维护一个模型中的所有参数。这里有几点值得指出,在参数更新过程中,实际上是不同设备根据其训练过程开始时获取的参数,和随机获取的一个Batch的数据训练得到的用于对训练过程开始时的参数进行更新时使用的梯度。注意,一是参数更新的对象,是对开始训练过程时获取的参数,二是更新的方式,是通过训练得到参数更新时的梯度,而并非更新完了的参数。总结一下就是,在各个设备训练过程:“获取参数—>获取训练数据—>训练—>更新参数”这四个阶段中,只有在获取参数阶段和参数更新阶段能够接触当前最新的模型参数,其他两个阶段操作的对象都是在第一个阶段获取参数中得到的相应时刻的模型参数。而参数更新阶段也仅仅是向实时参数传递更新参数的梯度,实时模型参数对其是透明的。这种情况会带来的问题是,由于不同设备是异步训练的,每个设备训练的时长也不相同,那么就有可能在某一设备中,训练结束时,当前实时的模型参数已经被其他设备更新了,和在第一阶段获取参数时获取的参数不同了,而训练得到的参数更新梯度又是适用于在第一阶段获取得到的模型参数,这样就有可能导致模型更新的错误。

由以上内容可知,异步体现在不同设备获取参数和对参数进行更新两个阶段。

同步模式

同步模式这是在不同设备中,同步(同时)获取参数,并且在最后统一地对实时模型参数进行同步的更新。其中,不同设备训练得到不同的参数更新梯度,若要同步地对同一个模型参数进行更新,可采用将不同设备训练得到的梯度进行平均等处理,得到一个唯一结果,再进行更新。

不同设备同步获取参数保证了不同设备中用于训练的参数是一致的,也就是保证了没有设备使用老的参数对应训练得到的梯度用于更新模型参数。

二者比较

同步模式解决了异步模式中存在的参数更新问题,然而同步模式的效率低于异步模式。原因是同步模式下,每一轮迭代需要各个设备统一开始,统一结束。如果设备运行时间不一致,那么每一轮训练都需要等待最慢设备结束时才可以开始进行参数的更新,于是很多时间花费在等待上。虽然异步模式在理论上存在偏差,但是因为训练深度学习模型时所使用的随机梯度下降算法本身就是梯度下降的一个近似解,而且即使是梯度下降算法也无法保证达到全局最优解。所以在实际应用中,相同时间内,使用异步模式训练的模型未必比同步模式训练的模型差。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值