快捷方式

常见 PyTorch 错误及解决方案

我的训练太慢 [新手 / 中级]

  • 在某些情况下,强化学习以 CPU 密集型著称。即使在并行运行少量环境时,通过为群集请求比正在处理的环境数量更多的核心(例如,两倍),也可以看到显著的速度提升。对于渲染的环境(即使在 GPU 上渲染)尤其如此。

  • 训练速度取决于多种因素,没有一种万能的解决方案。常见的瓶颈是

    • 数据收集:模拟器的速度以及随后的数据转换可能会影响性能。加速环境交互通常通过向量化(如果模拟器支持,例如 Brax 和其他基于 Jax 的模拟器)或并行化(在 gym 和其他库中被不恰当地称为向量化环境)来实现。在 TorchRL 中,转换通常可以在设备上执行。

    • 回放缓冲区存储和采样:将项存储在回放缓冲区中可能需要时间,如果底层操作需要繁重的内存操作或繁琐的索引(例如,使用优先回放缓冲区)。如果数据不是连续存储的,或者执行了代价高昂的堆叠或连接操作,采样也可能花费相当多的时间。TorchRL 在这些情况下提供了高效的连续存储解决方案以及高效的写入和采样解决方案。

    • 优势计算:优势函数的计算也可能构成计算瓶颈,因为它们通常使用纯粹的 for 循环进行编码。如果性能分析表明此操作花费了大量时间,请考虑使用我们完全向量化的解决方案。

    • 损失计算:损失计算和优化步骤经常占compute time 的重要份额。一些技术可以加速。例如,如果使用了多个目标网络,使用向量化映射和函数式编程(通过 functorch)而不是遍历模型配置可以提供显著的加速。

常见错误

  • 对于与 mujoco(包括 DeepMind Control suite 和其他库)相关的错误,请参阅 MUJOCO_INSTALLATION 文件。

  • ValueError: bad value(s) in fds_to_keep:这可能有多种原因。在 torchrl 中常见的一种原因是,您试图在进程之间发送一个张量的视图。例如,当在进程之间发送张量 b = tensor.expand(new_shape) 时,将丢失对原始内容的引用(因为 expand 操作会保留对原始张量的引用)。要调试此问题,请查找此类操作(viewpermuteexpand 等)并在调用函数后调用 clone()contiguous()

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源