gpt4 book ai didi

python - 如何让这段RL代码获得GPU支持?

转载 作者:行者123 更新时间:2023-12-01 07:22:52 38 4
gpt4 key购买 nike

https://github.com/keon/deep-q-learning/blob/master/dqn.py#L52

def replay(self, batch_size):
minibatch = random.sample(self.memory, batch_size)
for state, action, reward, next_state, done in minibatch:
target = reward
if not done:
target = (reward + self.gamma *
np.amax(self.model.predict(next_state)[0]))
target_f = self.model.predict(state)
target_f[0][action] = target
self.model.fit(state, target_f, epochs=1, verbose=0)

此代码似乎无法从 GPU 获得帮助,因为它每次操作都会训练一次数据。

self.model.fit(state, target_f, epochs=1, verbose=0)

如何更改此代码以并行训练,然后从 GPU 获得帮助?

最佳答案

在强化学习 (RL) 中,每个样本步骤通常需要大量 CPU 计算(当然取决于环境,某些环境也可以使用 GPU)。强化学习模型很难理解奖励以及什么行为导致了特定的奖励,因为良好的奖励可能取决于更早的行为。因此,我们在进行强化学习时需要一个简单的模型架构(浅且权重较少),否则训练时间会很慢。因此,您的系统瓶颈可能是收集样本而不是训练数据。另请注意,并非所有 Tensorflow 架构都能与 GPU 同等地扩展。像大多数图像案例一样,具有大量权重的深度模型可以很好地扩展(例如带有 MNIST 的 CNN 和 MLP 网络),而时间相关的 RNN 的加速潜力较小(请参阅 this stackexchange question )。因此,在使用 GPU 时,请相应地设置您的期望。

根据我的 RL 经验,我想出了一些可以分享的可能的加速方法,并且希望看到更多建议!

  1. 单个示例步骤,可以通过创建并行运行的多个环境来加速,等于 CPU 核心的数量(Python 中有用于并行处理的包,您可以在此之前使用)。这可以潜在地加速与 CPU 核心数量成比例的数据采样速度。
  2. 在采样之间,您必须对下一步操作进行模型预测。您可以为所有并行状态调用单个 model.predict(使用等于并行环境数量的 batch_size),而不是在每个步骤中调用 model.predict。这将加快预测时间,因为有更多优化选项。

  3. 从更新模型权重到预测的变化出奇地慢。希望将来这会加快吗?但是,虽然变化像今天一样缓慢,但您可以通过保持模型不变并进行大量样本和预测(例如整个剧集或一个剧集中的多个步骤)来加速训练,然后在所有新收集的数据上训练模型之后的数据。就我而言,这导致 GPU 利用率周期性升高。

  4. 由于采样很可能是瓶颈,因此您可以制作状态、操作、奖励的历史存储库。与训练相比,您可以从此存储库中随机采样数据,并将其与新收集的数据一起训练。这在强化学习中被称为“体验重放”。

  5. 也许最有趣、最具改进潜力的方法是使用更先进的强化学习架构。更改损失函数的示例(例如查看PPO),使用和调整由奖励计算的“广义优势估计”。或者通过例如包含 RNN 的时间依赖性来更改模型,VAC或将它们全部组合起来,如 here

希望这可以帮助您加快训练时间,并可能提高 GPU 的利用率。

关于python - 如何让这段RL代码获得GPU支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603707/

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