Ray 的 RLlib 如何使用 LazyFrames?
How is Ray's RLlib making use of LazyFrames?
我试图找出 RLLib 如何有效地使用帧,即它如何避免将重复的帧保存到内存中,这在 OpenAI 基线中是通过 LazyFrames 完成的。
在 Ray 的 RLLib atari_wrapper.py
中,似乎所有观察结果都以普通的 ndarray 格式存储:https://github.com/ray-project/ray/blob/master/python/ray/rllib/env/atari_wrappers.py#L253
这与 OpenAI 基线中常用的 LazyFrames 形成对比:https://github.com/openai/baselines/blob/master/baselines/common/atari_wrappers.py#L217
这样做是因为 PyArrow 不能使用 LazyFrames 并且需要 numpy 数组吗?即使是这种情况,鉴于 RLLib 中的 _get_ob 输出是 4 个观测值的串联 numpy 数组,内存需求是否比分别保存 4 个观测值中的每一个并通过链接它们高得多射线对象 ID?我在这里错过了什么?
RLlib 不使用 LazyFrames。对于使用大量内存的算法(例如 DQN),它改为使用 LZ4 压缩观察结果,这以额外 CPU 时间为代价提供了更高的节省。
我试图找出 RLLib 如何有效地使用帧,即它如何避免将重复的帧保存到内存中,这在 OpenAI 基线中是通过 LazyFrames 完成的。
在 Ray 的 RLLib atari_wrapper.py
中,似乎所有观察结果都以普通的 ndarray 格式存储:https://github.com/ray-project/ray/blob/master/python/ray/rllib/env/atari_wrappers.py#L253
这与 OpenAI 基线中常用的 LazyFrames 形成对比:https://github.com/openai/baselines/blob/master/baselines/common/atari_wrappers.py#L217
这样做是因为 PyArrow 不能使用 LazyFrames 并且需要 numpy 数组吗?即使是这种情况,鉴于 RLLib 中的 _get_ob 输出是 4 个观测值的串联 numpy 数组,内存需求是否比分别保存 4 个观测值中的每一个并通过链接它们高得多射线对象 ID?我在这里错过了什么?
RLlib 不使用 LazyFrames。对于使用大量内存的算法(例如 DQN),它改为使用 LZ4 压缩观察结果,这以额外 CPU 时间为代价提供了更高的节省。