我试图找出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基准中https://github.com/openai/baselines/blob/master/baselines/common/atari_wrappers.py#L217
上LazyFrames的普遍使用形成对比。这样做是因为PyArrow无法使用LazyFrames并且需要numpy数组吗?即使是这种情况,考虑到RLLib中的_get_ob输出是4个观测值的串联numpy数组,内存的需求不是比说分别保存4个观测值并通过ray对象ID链接它们要高得多的内存需求?我在这里想念什么?
答案 0 :(得分:1)
RLlib不使用LazyFrames。对于使用大量内存的算法(例如DQN),它改为使用LZ4压缩观测值,从而以节省更多CPU时间为代价提供了更高的节省。