2

对于我的生活,我没有得到“num_envs_per_worker”的作用。如果限制因素是策略评估,为什么我们需要创建多个环境?我们不需要创建多个策略吗?

请问ELI5?

文档说:

单个进程中的矢量化:尽管许多环境可以实现每个核心的高帧速率,但它们的吞吐量在实践中受到步骤之间的策略评估的限制。例如,即使是小型 TensorFlow 模型也会产生几毫秒的延迟来评估。这可以通过为每个进程创建多个 env并跨这些 env 批量策略评估来解决。您可以配置 {"num_envs_per_worker": M} 让 RLlib 为每个工作人员创建 M 个并发环境。RLlib 通过 VectorEnv.wrap() 自动矢量化 Gym 环境。

来源:https ://ray.readthedocs.io/en/latest/rllib-env.html

4

1 回答 1

1

可能有点晚了,但这是我的理解:

  • 正如您引用的文档所提到的,在使用 TensorFlow 时存在大量固定的每次调用开销(将数据转换为适当的结构、将数据传递到 GPU 的开销和协调等)
  • 但是,您可以使用一批数据调用 TensorFlow 模型,并且所需的执行时间通常可以很好地扩展。它应该在极限处线性缩放,当从单行变为几行时,它实际上可能会以亚线性方式缩放。例如,如果您要将 1 行数据传递给像 GPU(或专门的 CPU 指令)这样的矢量处理单元,您不妨一次性传递尽可能多的行,它实际上不再需要时间。(否则那些并行执行单元将一直处于空闲状态)
  • 因此,您希望批量处理数据行,以便您只需根据需要不频繁地支付固定的每次通话费用。一种方法是让多个 RL 环境同步执行。也许你有 8 个,这 8 个环境中的每一个都会产生自己的观察结果,然后你获取这 8 个观察结果并在这批 8 个观察结果上调用一次你的 TensorFlow 模型,以产生 8 个新动作,然后你用它们来产生8 个新的观察结果等。如果这些环境中的每一个都进行自己的 TensorFlow 调用,那么这将有望仅为 TensorFlow 评估成本的 1/8。
于 2020-07-11T15:07:00.447 回答