Ray 分布式调试器#
Ray 分布式调试器包含一个调试器后端和一个 VS Code 扩展前端,通过交互式调试体验简化了调试过程。Ray 调试器使您能够
中断远程任务:在任何远程任务中设置断点。断点会暂停执行,并允许您连接到 VS Code 进行调试。
事后调试:当 Ray 任务因未处理的异常而失败时,Ray 会自动冻结失败的任务并等待 Ray 调试器附加,从而允许您检查程序出错时的状态。
Ray 分布式调试器抽象了调试分布式系统的复杂性,让您可以更高效地调试 Ray 应用,节省开发工作流中的时间和精力。
注意
Ray 分布式调试器前端仅在 VS Code 和其他兼容 VS Code 的 IDE(如 Cursor)中可用。如果您需要其他 IDE 的支持,请在 GitHub 上提交功能请求。
设置环境#
创建新的虚拟环境并安装依赖项。
conda create -n myenv python=3.9
conda activate myenv
pip install "ray[default]" debugpy
启动 Ray 集群#
运行 ray start --head
启动本地 Ray 集群。
按照RayCluster 快速入门中的说明设置集群。您需要将 VS Code 连接到集群。例如,将以下内容添加到 ray-head
容器,并确保 sshd
在 ray-head
容器中运行。
ports:
- containerPort: 22
name: ssd
注意
如何在 ray-head
容器中运行 sshd
取决于您的设置。例如,您可以使用 supervisord
。一种简单的交互式运行 sshd
进行测试的方法是登录到头节点 Pod 并运行
sudo apt-get install openssh-server
sudo mkdir -p /run/sshd
sudo /usr/sbin/sshd -D
然后您可以通过运行以下命令通过 SSH 连接到集群
kubectl port-forward service/raycluster-sample-head-svc 2222:22
检查 ssh -p 2222 ray@localhost
可用后,按照VS Code SSH 文档中的说明设置 VS Code。
注册集群#
在 VS Code 左侧导航栏中找到并点击 Ray 扩展。将 Ray 集群 IP:PORT
添加到集群列表。默认的 IP:PORT
是 127.0.0.1:8265
。启动集群时可以更改它。请确保您的当前机器可以访问该 IP 和端口。

创建 Ray 任务#
创建文件 job.py
,其中包含以下代码片段。在 Ray 任务中添加 breakpoint()
。如果您想使用下面的事后调试,还需要添加 RAY_DEBUG_POST_MORTEM=1
环境变量。
import ray
import sys
# Add the RAY_DEBUG_POST_MORTEM=1 environment variable
# if you want to activate post-mortem debugging
ray.init(
runtime_env={
"env_vars": {"RAY_DEBUG_POST_MORTEM": "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 应用。