使用两台计算机训练深度强化学习模型

数据挖掘 机器学习 深度学习 云计算
2022-02-13 00:29:17

我想知道是否有一种方法可以使用两台不同的计算机来训练深度 RL 模型。第一个将执行游戏并将申请发送到第二台计算机,第二台计算机将存储和训练模型本身。

Obs:计算机不在同一个局域网中。

谢谢!!

1个回答

分布式强化学习非常重要。谷歌为此创建了一个名为IMPALA的分布式设置,如果您搜索,则可以使用多个 A3C、PPO 等实例。我对 IMPALA 了解不多,但可扩展策略梯度方法的基本思想是运行多个环境,在每台服务器上收集梯度,然后每隔几步将它们整理在一起以创建改进的策略和价值网络。

根据共享数据的哪个阶段,策略有几种变化 - 观察或梯度。梯度计算是 CPU 密集型的,因此在一定规模以上,分布式设备上发生这种情况是值得的,这取决于首先收集经验的密集程度。

Obs:计算机不在同一个局域网中。

除非机器之间的带宽很高,否则这可能会阻止您使用低级观察或梯度共享来实现任何东西。

在这种情况下,使用两台计算机的最简单方法是通过在每台计算机上运行不同的测试并跟踪哪台计算机完成了哪些实验来执行基本的超参数搜索。

第一个将执行游戏并将申请发送到第二台计算机,第二台计算机将存储和训练模型本身

这可以与基于离策略值的方法一起使用,例如 DQN。两台机器之间仍然需要合理的带宽,尤其是在观察空间很大的情况下。DQN 是一个合理的选择,因为您不需要运行环境的机器来遵循当前的最佳策略 - 尽管您有时仍希望在第一台计算机上更新策略。

DQN 的基本算法不需要太多改变来支持这种分布。只需注释掉或使几个部分成为条件:

  • 在第一台机器上:

    • 注释掉或从逻辑上阻止从经验表中采样和学习
    • 维护一个“行为驱动”的 Q 值网络而不是学习网络,以便运行 -greedy 策略ϵ
    • 将经验发送到第二台机器,而不是将其存储在本地经验重放表中(这是带宽密集型部分)
    • 异步接收行为驱动 Q 值网络的更新
  • 在第二台机器上:

    • 注释掉或在逻辑上阻止与环境的交互
    • 从第一台机器异步接收经验并添加到经验重放表
    • 每隔这么多小批量,将更新的当前网络发送到第二台机器

您需要有一些处理多线程或多进程代码的经验,才能了解更新的异步特性。如果这看起来太难了,那么您可以让两台机器尝试同步更新彼此,或者通过排队机制。这样做的缺点是一台或另一台机器可能最终空闲等待其伙伴完成其部分工作。