并发访问下的tensorflow中的异步梯度下降

时间:2017-07-25 20:57:29

标签: asynchronous tensorflow gradient

我在多线程环境中实现异步梯度下降时遇到了麻烦。

为每个线程描述我的代码的骨架

loop
    synchronize with global param
    < do some work / accumulate gradients on mini-batch >
    apply gradient descent to the global network, specifically,
    = self.optimizer.apply_gradients(grads_and_vars)
end

每个线程都有自己的优化器。

现在的问题是,在使用'use_locking = False'定义优化器时,它不起作用,由我的强化学习代理生成的奖励证明。

然而,当我设置'use_locking = True'时,它的工作方式是正确的;只是局部渐变没有正确应用于全局参数。

因此我想到的一些可能原因如下:    1.当一个线程正在更新全局参数时,当另一个线程访问全局参数时,前一个线程将取消所有剩余的更新。并且太多的线程同时访问这个全局参数,线程做了所有努力工作。    2.参考,How does asynchronous training work in distributed Tensorflow?,异步读取在循环顶部确定无误。但是,可能一旦线程完成应用渐变,它就会从全局参数中快速同步,以至于它不会从其他线程获取更新。

对于这个特定的循环实例,你能帮助我使用'use_locking'来帮助我真正发生的事情吗?

我在这个简单的例子上度过了几天。尽管设置use_locking = True确实可以解决问题,但它本质上不是异步的,而且速度也很慢。

感谢您的帮助。

0 个答案:

没有答案