0

我试图找出 RLLib 如何有效地使用帧,即它如何避免将重复的帧保存到内存中,这在 OpenAI 基线中是通过 LazyFrames 完成的。

在 Ray 的 RLLibatari_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 链接它们高得多? 我在这里想念什么?

4

1 回答 1

2

RLlib 不使用 LazyFrames。对于使用大量内存的算法(例如 DQN),它改为使用 LZ4 压缩观察结果,从而以一些额外的 CPU 时间为代价节省更多。

于 2019-07-17T19:19:25.527 回答