在我的代码中,我使用 ray 来管理多个工作人员,但我意识到,即使我将工作人员数量设置为 1,我仍然无法使用 PyCharm 来调试我的代码(这似乎是一个已知问题)。我真正希望能够做的是在“调试模式”下运行代码,比如说,我根本不使用射线。目前我所有的工作人员都用类似的东西初始化:
@ray.remote(num_gpus=0.25)
def worker_function():
...
并从主脚本中调用,类似于
worker_function.remote()
。所以我想我想以某种方式使 @ray.remote(...) 可选。有没有好的方法来做这样的事情?
有 2 种可能的方法可以做到这一点。
在本地模式下初始化Ray。这将使所有光线任务和参与者在单个进程中串行运行,从而允许您使用本机调试器。请注意,由于您的程序现在已序列化,因此它的行为方式可能略有不同。本地模式已启用
ray.init(local_mode=True)
如果您没有使用 pycharm 调试器,Ray 还通过其自己的 Ray 调试器在真实集群上提供相当大的 pdb 行为子集。
你可以做
@ray.remote(num_gpus=0.25)
def worker_function():
breakpoint()
...
在远程函数中设置断点,然后通过命令行上的
ray debug
运行程序。
嗨@Henry Charlesworth!
在尝试理解 https://github.com/YeWR/EfficientZero 源代码时,我在 PyCharm 上调试不同的射线工作人员时遇到了同样的情况。
EfficientZero 算法针对不同类型的工作负载启动多个工作线程(例如,自行玩 atari 游戏、实现重放缓冲区、重新分析体验等)。
这就是我调试的方法,例如,2 个不同的工作线程(在本例中是自播放工作线程和重播缓冲区工作线程):
pip install pydevd-pycharm~=221.5591.52
Remote Debug Server
配置。
Remote Debug Server
配置。
这些是您需要添加到代码中的所有更改。
现在,您只需按正确的顺序启动所有配置即可:
执行此操作后,您应该在 Pycharm 的“调试”部分看到 3 个选项卡:
现在,通过选择这些选项卡中的任何一个,您可以同时调试 3 个进程...例如,您可以在重播缓冲区工作程序上命中断点... 与此同时,您在自我游戏工作人员上遇到了另一个断点......
仅此而已...我希望这对您和我一样有帮助。
致以诚挚的问候,
大卫
我已成功在远程计算机上使用 pycharm 调试光线演员。我想您也可以跳过端口转发以在本地计算机上执行此操作。这是我的步骤。我使用6067端口
ssh -R localhost:6067:localhost:6067 <name_of_machine>
localhost
和端口 6067。您还需要设置项目路径映射,以便看到代码,但您可以稍后再做,或者在触发断点时使用自动下载pip install pydevd-pycharm~=241.14494.241
(版本应该与您不同,确切的版本显示在调试服务器配置中)
修改你的代码(我已经在需要调试的光线演员的构造函数中运行了它)import pydevd_pycharm
pydevd_pycharm.settrace('localhost', port=6067, stdoutToServer=True, stderrToServer=True)