gpt4 book ai didi

Tensorflow 多线程数据竞赛

转载 作者:行者123 更新时间:2023-12-05 06:36:54 24 4
gpt4 key购买 nike

在并发读取和更新权重时,Tensorflow 中避免权重不一致的最佳做法是什么?

目前我正在棋盘游戏上进行简单的 Q-Learning。典型的步骤是:使用神经网络选择最佳步骤,使用奖励+选择步骤的Q值来更新当前值。

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

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

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

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

最佳答案

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

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

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

这允许更高的 GPU 利用率和更好的收敛性,因为 CPU 网络充当很少更新的目标网络,因此导致损失的方差更小。

关于Tensorflow 多线程数据竞赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48755614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com