GPU 在 Actor Critic (A2C) Stable Baselines3 实现中未得到充分利用

nai*_*per 6 gpu reinforcement-learning pytorch

我正在尝试使用 StablesBaselines3 的 A2C 在我的自定义环境中训练代理。我的问题是,我的 GPU 利用率非常低(仅 10% 左右),而我的 CPU 利用率已达到上限。因此,训练速度非常非常慢。我已经按照 @araffin [https://github.com/hill-a/stable-baselines/issues/308] 提出的讨论主题尝试了以下操作

  • 将 Actor 和 Critic 架构扩展为分别具有 256、256 和 128 个神经元的三层神经网络。此后 GPU 利用率确实有所增加,但只是微乎其微(从 10% 增加到 15%),如本建议所示
  • device将A2C 方法的参数cuda从默认值“ ”更改为“ auto” - 没有改进

在上述讨论中,尚不完全清楚什么对用户有效。我的A2C初始化如下:

import gym
from stable_baselines3 import A2C
policy_kwargs = dict(activation_fn=th.nn.ReLU,
                     net_arch=[dict(pi=[256, 256, 128], vf=[256, 256, 128])])
model = A2C("MlpPolicy", env, verbose=1,  learning_rate=linear_schedule(0.001),\
 n_steps=50, gamma=0.8, gae_lambda=1.0, ent_coef=0.2, vf_coef=0.2, \
tensorboard_log=logdir,  policy_kwargs=policy_kwargs, seed=50, device='cuda' )
model.learn(total_timesteps=50000)
Run Code Online (Sandbox Code Playgroud)

GPU 配置为:

  • Cuda 版本 - 9.0
  • GPU - NVIDIA RTX 2080i
  • GPU 内存 - 11GB(其中仅使用约 1600MB)

CPU配置

  • 每核线程数 - 2
  • 每个插槽核心 - 8
  • 英特尔 i9 核心 9900 K @ 3.6 Ghz
  • CPU 内存 - 32GB 软件版本
  • 火炬 - 1.6.0
  • Tensorflow GPU - 2.4.1(虽然我知道 SB3 实现使用 Torch)
  • anaconda环境下的Python 3.7

任何帮助将不胜感激!

小智 3

稳定基线正在使用您的 GPU ...如果您在第二个选项卡上查看任务管理器,请单击您的 GPU,而不是 3D 选择 cuda,您将看到 cuda 的使用情况

我的环境遇到了一些麻烦,因为我的环境使用 pandas .. 而 pandas 使用 cpu .. 在 Windows 上不可能轻松使用 cudf 所以我的 cpu 使用率是 100%

我在自定义环境中使用了 pandas 和 numpy ..为了改进它,我应该使用 cunumery 和 cudf 来代替,但要做到这一点,我需要 linux。

所以现在,我的 cpu 使用 100%,GPU 使用 cuda 70%,GPU 内存几乎 1.7 GB