Tensorflow、OpenAI Gym、Keras-rl 基本强化学习示例的性能问题
Tensorflow, OpenAI Gym, Keras-rl performance issue on basic reinforcement learning example
我正在做强化学习,但我遇到了性能问题。
情况,没有自定义代码:
- 我在 Google 云上加载了 Google 深度学习 VM (https://console.cloud.google.com/marketplace/details/click-to-deploy-images/deeplearning)。 NVidia K80 显卡安装了所有先决条件(CUDA、cuDNN、驱动程序)。
- 已安装keras-rl, OpenAI gym
- 现在,当我 运行 第 46 行带有 visualize=False 的(标准)示例 dqn_cartpole.py 时,它使用了大约 20% 的 GPU,导致每秒大约 100 步,这是比在我的 Razer Blade 15 (i7-8750H) 上使用 CPU 慢大约 3 倍。
- 能想到的瓶颈我都查过了,CPU使用、内存、高清I/O都正常
请帮忙!
提前致谢
这不一定是问题。就性能而言,使用 GPU 并不 "for free",而且它并不总是比 CPU 快。因为并非所有东西都在 GPU 上运行(例如,健身房环境本身仍然在 CPU 上运行),您确实会招致 "communication costs"(例如,将内存移入和移出 GPU)。如果你能真正用好你的 GPU,这将是值得的。
现在,GPU 也不一定比 CPUs 快。 GPU 非常擅长并行执行大量类似的计算。例如,对于大型矩阵之间的矩阵乘法,这是必要的,这在训练大型深度神经网络时确实经常发生。如果您只需要相对少量的可以并行完成的计算,并且大部分只有顺序代码,那么 GPU 肯定会比 CPU 慢(您提到的 CPU 是相当强大的一个)。
现在,如果我查看您链接的正在构建神经网络的代码部分 (starting from line 22),它看起来像是一个相当小的神经网络;只有几层,每层 16 个节点。这不是一个巨大的神经网络,卷积层后面跟着大的(例如数百个节点)完全连接的层(对于像 Cartpole 这样的小问题,这可能确实有点矫枉过正)。所以,你只能使用 20% 的 GPU 就不足为奇了(它不能并行使用更多,因为相乘的矩阵太小了),而且它比简单地慢也不一定令人惊讶运行 在 CPU 上。
我正在做强化学习,但我遇到了性能问题。
情况,没有自定义代码:
- 我在 Google 云上加载了 Google 深度学习 VM (https://console.cloud.google.com/marketplace/details/click-to-deploy-images/deeplearning)。 NVidia K80 显卡安装了所有先决条件(CUDA、cuDNN、驱动程序)。
- 已安装keras-rl, OpenAI gym
- 现在,当我 运行 第 46 行带有 visualize=False 的(标准)示例 dqn_cartpole.py 时,它使用了大约 20% 的 GPU,导致每秒大约 100 步,这是比在我的 Razer Blade 15 (i7-8750H) 上使用 CPU 慢大约 3 倍。
- 能想到的瓶颈我都查过了,CPU使用、内存、高清I/O都正常
请帮忙!
提前致谢
这不一定是问题。就性能而言,使用 GPU 并不 "for free",而且它并不总是比 CPU 快。因为并非所有东西都在 GPU 上运行(例如,健身房环境本身仍然在 CPU 上运行),您确实会招致 "communication costs"(例如,将内存移入和移出 GPU)。如果你能真正用好你的 GPU,这将是值得的。
现在,GPU 也不一定比 CPUs 快。 GPU 非常擅长并行执行大量类似的计算。例如,对于大型矩阵之间的矩阵乘法,这是必要的,这在训练大型深度神经网络时确实经常发生。如果您只需要相对少量的可以并行完成的计算,并且大部分只有顺序代码,那么 GPU 肯定会比 CPU 慢(您提到的 CPU 是相当强大的一个)。
现在,如果我查看您链接的正在构建神经网络的代码部分 (starting from line 22),它看起来像是一个相当小的神经网络;只有几层,每层 16 个节点。这不是一个巨大的神经网络,卷积层后面跟着大的(例如数百个节点)完全连接的层(对于像 Cartpole 这样的小问题,这可能确实有点矫枉过正)。所以,你只能使用 20% 的 GPU 就不足为奇了(它不能并行使用更多,因为相乘的矩阵太小了),而且它比简单地慢也不一定令人惊讶运行 在 CPU 上。