我有一个收集经验的射线演员(缓冲区)和一个对其进行优化的射线演员(学习者)+几个只收集经验的演员。这类似于 Ape-X 强化学习算法。
我的主要问题是使用学习器从缓冲区中采样需要很多时间,因为数据只能以 cpu 格式从缓冲区传输到学习器(即使学习器和缓冲区在同一台机器上)。因此,为了在学习器上运行优化传递,我仍然需要在每次调用ray.get(buffer.GetSamples.remote())
. 这是非常低效的,并且会花费大量时间进行优化计算。
在理想的世界中,缓冲区会不断地将随机样本推送到 GPU,并且学习者可以简单地从每次通过的样本中挑选一个块。我怎样才能使这项工作?
此外,将学习者和缓冲区都放入一个 ray actor 是行不通的,因为 ray(和 obv python)似乎在多线程方面存在重大问题,并且以串行方式执行它会破坏目的(因为它将是甚至更慢)。
请注意,这是我在这里提出的另一个问题的后续行动。
编辑:我应该注意这是针对 PyTorch