RLlib PPO 通过 RuntimeWarning 奖励平线:空切片的平均值

问题描述

我已经为此苦苦挣扎了几天,所以真的需要我能得到的所有帮助!在我使用由 TensorFlow 提供支持的 RLlib 的 PPO 算法的训练运行期间,所有训练都进行得很顺利(奖励正在增加)。 系统可以获得的最大奖励为+20。并且车辆静止不动不做任何事情可以获得0奖励

rewards increasing

annotated rewards increasing

突出显示的区域并不是真正的学习,因为这是在警告之后发生的

Warning: NaN or Inf found in input tensor

打印了几次,然后是另一个被打印多次的警告:

(pid=853) /usr/local/lib/python3.6/dist-packages/ray/rllib/execution/train_ops.py:264: RuntimeWarning: Mean of empty slice

大约是我的训练集开始超时并且集长度直线上升的时间。

Episode timeout

Episode length shooting straight up

注意(在顶部)由于超时而结束的集数(与完成或达到目标相对)是如何突然上升到接近 100 万个训练步数的。剧集长度(底部)或剧集步数也同时飙升。

我不确定这是否是由于某种内存问题,因为有些运行还会出现 RAM 警告以及上面所说的仅剩下 10% 的 RAM 内存,这可能会导致错误。我曾尝试在 ray.init() 上设置某些值但无济于事

  • object_store_memory
  • _redis_max_memory
  • _driver_object_store_memory
  • _memory

我在具有 16 GB RAM、12 个 cpu 内核和 1 个 GPU 的 Ubuntu 18.04.5 LTS 上运行它,并具有相关的 RLlib (Ray 1.4.0) 配置:

policy_conf['batch_mode'] = 'complete_episodes'
policy_conf['simple_optimizer'] = False
policy_conf['num_workers'] = 1
policy_conf['num_envs_per_worker'] = 1
policy_conf['rollout_fragment_length'] = 256
policy_conf['num_gpus'] = 1
policy_conf['num_gpus_per_worker'] = 0
policy_conf['num_cpus_for_driver'] = 4
policy_conf['num_cpus_per_worker'] = 4
policy_conf['train_batch_size'] = 1024
policy_conf['sgd_minibatch_size'] = 128
policy_conf['shuffle_sequences'] = True
policy_conf['num_sgd_iter'] = 30
policy_conf['gamma'] = 0.99
policy_conf['lr'] = 1e-4
policy_conf['evaluation_num_workers'] = 1
policy_conf['evaluation_interval'] = 25
policy_conf['evaluation_num_episodes'] = 10

更新 (03/07/2021)

我做了更多的挖掘,似乎生成的连续动作突然变成了 nan 值。此外,在此之前的一些动作也会超出指定的动作空间范围。示例:操作空间应该介于 -7.5 和 +3 之间,但生成的操作可能具有 值 50。我仍然不确定为什么会发生这种情况,或者这两个问题是否相关。

有人能指出我正确的方向吗?我将不胜感激。

更新 (05/07/2021)

我已将其移至另一个问题,因为我已将问题的性质缩小到获得 nan 连续操作 here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)