Ray 分布式调试器#
Ray 分布式调试器是一个 VS Code 扩展,它通过交互式调试体验简化了调试过程。Ray 调试器使您能够:
中断远程任务:在任何远程任务中设置断点。断点会暂停执行,并允许你连接到 VS Code 进行调试。
事后调试:当 Ray 任务因未处理的异常而失败时,Ray 会自动冻结失败的任务并等待 Ray 调试器连接,允许您在错误发生时检查程序的状态。
Ray 分布式调试器抽象了调试分布式系统的复杂性,使您能够更高效地调试 Ray 应用程序,从而节省开发工作流程中的时间和精力。
设置环境#
创建一个新的虚拟环境并安装依赖项。
conda create -n myenv python=3.9
conda activate myenv
pip install "ray[default]" debugpy
启动一个 Ray 集群#
运行 ray start --head
以启动一个 Ray 集群。
注册集群#
在VS Code左侧导航栏中找到并点击Ray扩展。将Ray集群的`IP:PORT`添加到集群列表中。默认的`IP:PORT`是`127.0.0.1:8265`。你可以在启动集群时更改它。确保当前机器可以访问该IP和端口。
创建一个 Ray 任务#
创建一个包含以下代码片段的 job.py
文件。添加 RAY_DEBUG
环境变量以启用 Ray 调试器,并在 Ray 任务中添加 breakpoint()
。
import ray
import sys
# Add RAY_DEBUG environment variable to enable Ray Debugger.
ray.init(
runtime_env={
"env_vars": {"RAY_DEBUG": "1"},
}
)
@ray.remote
def my_task(x):
y = x * x
breakpoint() # Add a breakpoint in the Ray task.
return y
@ray.remote
def post_mortem(x):
x += 1
raise Exception("An exception is raised.")
return x
if len(sys.argv) == 1:
ray.get(my_task.remote(10))
else:
ray.get(post_mortem.remote(10))
运行你的 Ray 应用#
开始运行您的 Ray 应用程序。
python job.py
附加到暂停的任务#
当调试器命中断点时:
任务进入暂停状态。
终端清晰地指示了调试器何时暂停任务并等待调试器连接。
暂停的任务列在 Ray Debugger 扩展中。
点击暂停任务名称旁边的播放图标,以附加 VS Code 调试器。
开始调试#
像本地开发时一样调试您的 Ray 应用。
事后调试#
当 Ray 任务遇到未处理的异常时,使用事后调试。在这种情况下,Ray 会自动冻结失败的任务,等待 Ray 调试器的连接。此功能允许您彻底调查和检查程序在错误发生时的状态。
运行 Ray 任务引发异常#
使用额外的参数运行相同的 job.py
文件以引发异常。
python job.py raise-exception
附加到暂停的任务#
当应用程序抛出异常时:
调试器冻结了任务。
终端清晰地指示了调试器何时暂停任务并等待调试器连接。
暂停的任务列在 Ray Debugger 扩展中。
点击暂停任务名称旁边的播放图标以附加调试器并开始调试。
开始调试#
像本地开发时一样调试您的 Ray 应用。