Ray的RLlib是如何利用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 无法使用 LazyFrame 并且需要 numpy 数组吗?即使如此,鉴于 RLLib 中的_get_ob输出是 4 个观测值的串联 numpy 数组,内存要求是否比我们说单独保存 4 个观测值中的每一个并通过射线对象 ID 链接它们要高得多?我在这里错过了什么?

RLlib不使用LazyFrames。对于使用大量内存(如 DQN(的算法,它使用 LZ4 压缩观测值,这以一些额外的 CPU 时间为代价,可以节省更多的成本。

最新更新