如何有效利用 GPU 进行强化学习?
How to effectively make use of a GPU for reinforcement learning?
最近我研究了强化学习,有一个问题困扰着我,我找不到答案:如何使用 GPU 有效地完成训练?根据我的理解,需要与环境进行持续交互,这对我来说似乎是一个巨大的瓶颈,因为这项任务通常是非数学的/不可并行化的。然而,例如 Alpha Go 使用多个 TPUs/GPUs。那么他们是怎么做到的?
事实上,在学习步骤之间,您经常会与环境进行互动,运行宁 CPU 通常比 GPU 更好。因此,如果您用于执行操作的代码和用于 运行 更新/学习步骤的代码非常快(例如,表格 RL 算法),则不值得尝试获取GPU 上的那些。
然而,当你有一个大的神经网络时,你需要在你 select 一个动作或 运行 一个学习步骤时经历它(就像大多数深度强化中的情况一样)这些天流行的学习方法),运行在 GPU 上而不是 CPU 上加速这些通常足以值得在 GPU 上 运行 宁他们的努力(甚至如果这意味着您经常在 CPU 和 GPU 之间使用“'switching'”,并且可能需要将一些内容从 RAM 复制到 VRAM 或相反)。
在进行off-policy强化学习时(这意味着您可以使用由"behavioral"策略生成的转换样本,与您当前正在学习的策略不同),通常使用经验回放。因此,您可以从这个大缓冲区中获取一堆转换,并使用 GPU 来优化学习 objective 和 SGD(c.f。DQN,DDPG)。
RL 的 CPU-GPU 混合方法的一个实例是 - https://github.com/NVlabs/GA3C。
在这里,多个 CPU 用于与环境的不同实例进行交互。 "Trainer" 和 "Predictor" 进程然后使用 multi-process 队列收集交互,并将它们传递给 back-propagation 的 GPU。
最近我研究了强化学习,有一个问题困扰着我,我找不到答案:如何使用 GPU 有效地完成训练?根据我的理解,需要与环境进行持续交互,这对我来说似乎是一个巨大的瓶颈,因为这项任务通常是非数学的/不可并行化的。然而,例如 Alpha Go 使用多个 TPUs/GPUs。那么他们是怎么做到的?
事实上,在学习步骤之间,您经常会与环境进行互动,运行宁 CPU 通常比 GPU 更好。因此,如果您用于执行操作的代码和用于 运行 更新/学习步骤的代码非常快(例如,表格 RL 算法),则不值得尝试获取GPU 上的那些。
然而,当你有一个大的神经网络时,你需要在你 select 一个动作或 运行 一个学习步骤时经历它(就像大多数深度强化中的情况一样)这些天流行的学习方法),运行在 GPU 上而不是 CPU 上加速这些通常足以值得在 GPU 上 运行 宁他们的努力(甚至如果这意味着您经常在 CPU 和 GPU 之间使用“'switching'”,并且可能需要将一些内容从 RAM 复制到 VRAM 或相反)。
在进行off-policy强化学习时(这意味着您可以使用由"behavioral"策略生成的转换样本,与您当前正在学习的策略不同),通常使用经验回放。因此,您可以从这个大缓冲区中获取一堆转换,并使用 GPU 来优化学习 objective 和 SGD(c.f。DQN,DDPG)。
RL 的 CPU-GPU 混合方法的一个实例是 - https://github.com/NVlabs/GA3C。 在这里,多个 CPU 用于与环境的不同实例进行交互。 "Trainer" 和 "Predictor" 进程然后使用 multi-process 队列收集交互,并将它们传递给 back-propagation 的 GPU。