Tensorflow多线程数据竞赛

Tensorflow多线程数据竞赛,tensorflow,Tensorflow,在同时读取和更新权重时,Tensorflow中避免权重不一致的最佳实践是什么 目前我正在一个棋盘游戏上做一个简单的Q学习。典型的步骤是:使用NN选择最佳步骤,使用奖励+所选步骤的Q值更新当前值 因为它是按顺序发生的,所以我的GPU使用率非常低(大约10%)。为了加快速度,我计划运行多个代理,并使用队列存储数据点,成批处理它们以更新权重 Tensorflow提供SyncReplicasOptimizer,但根据文档,它有一个障碍,等待所有工作人员在每个步骤完成,更新权重,然后恢复所有工作人员。当所

在同时读取和更新权重时,Tensorflow中避免权重不一致的最佳实践是什么

目前我正在一个棋盘游戏上做一个简单的Q学习。典型的步骤是:使用NN选择最佳步骤,使用奖励+所选步骤的Q值更新当前值

因为它是按顺序发生的,所以我的GPU使用率非常低(大约10%)。为了加快速度,我计划运行多个代理,并使用队列存储数据点,成批处理它们以更新权重

Tensorflow提供SyncReplicasOptimizer,但根据文档,它有一个障碍,等待所有工作人员在每个步骤完成,更新权重,然后恢复所有工作人员。当所有其他线程等待最长的工作线程时,这仍然会导致GPU利用率低

我想通过移除障碍物来获得更高的速度。这意味着,当培训师线程更新权重时,工作人员正在读取NN的权重以计算分数


避免数据竞争但仍能充分利用GPU的最佳做法是什么?

您可以使用两个独立的网络

一个建立在GPU上的,在那里的backprop发生。另一个是构建在CPU上的,ops在所有代理线程之间共享,因此他们可以使用它来获得分数并采取最佳行动

在每次
k
迭代之后,您可以使用
tf.assign
将GPU网络的权重分配给CPU网络

这允许更高的GPU利用率和更好的收敛性,因为CPU网络充当很少更新的目标网络,从而减少损失的变化