配置和管理 Ray 仪表板#

Ray 仪表盘 是监控和调试 Ray 应用和集群最重要的工具之一。本页描述了如何在您的集群上配置 Ray 仪表盘。

仪表板配置可能因您启动 Ray 集群的方式而异(例如,本地 Ray 集群与 KubeRay)。与 Prometheus 和 Grafana 的集成是可选的,以增强仪表板体验。

备注

Ray Dashboard 仅用于交互式开发和调试,因为集群终止后,Dashboard UI 和底层数据将无法访问。对于生产监控和调试,用户应依赖 持久化日志持久化指标持久化 Ray 状态 和其他可观测性工具。

更改 Ray 仪表板端口#

Ray Dashboard 运行在头节点的端口 8265 上。如果需要,请按照以下说明自定义端口。

通过CLI显式启动集群
在命令行中使用 ray start 时传递 --dashboard-port 参数。

使用 ray.init 隐式启动集群
在调用 ray.init() 时传递关键字参数 dashboard_port

Cluster Launcher 的 YAML 文件head_start_ray_commands 部分中包含 --dashboard-port 参数。

head_start_ray_commands:
  - ray stop
  # Replace ${YOUR_PORT} with the port number you need.
  - ulimit -n 65536; ray start --head --dashboard-port=${YOUR_PORT} --port=6379 --object-manager-port=8076 --autoscaling-config=~/ray_bootstrap_config.yaml

查看 指定非默认端口 页面以获取详细信息。

在浏览器中查看 Ray 仪表板#

当您在笔记本电脑上启动单节点 Ray 集群时,您可以通过 Ray 初始化时打印的 URL 访问仪表板(默认 URL 是 http://localhost:8265)。

当你使用 VM 集群启动器KubeRay 操作员 或手动配置启动一个远程 Ray 集群时,Ray 仪表板会在头节点上启动,但仪表板端口可能不会公开暴露。你需要额外的设置来从头节点外部访问 Ray 仪表板。

危险

出于安全考虑,在没有适当身份验证的情况下,不要公开暴露 Ray 仪表板。

端口转发
你可以使用 ray dashboard 命令安全地将本地流量端口转发到仪表板。

$ ray dashboard [-p <port, 8265 by default>] <cluster config file>

仪表板现在可以在 http://localhost:8265 访问。

KubeRay 操作符通过一个名为 <RayCluster 名称>-head-svc 的服务使 Dashboard 可用,该服务指向 Ray 头节点 pod。在 Kubernetes 集群内部访问 Dashboard 的地址为 http://<RayCluster 名称>-head-svc:8265

有两种方法可以在集群外部公开仪表板:

1. 设置入口
按照 说明 设置入口以访问 Ray 仪表板。入口必须仅允许从受信任的来源访问。

2. 端口转发
您还可以通过使用端口转发从Kubernetes集群外部查看仪表板:

$ kubectl port-forward service/${RAYCLUSTER_NAME}-head-svc 8265:8265
# Visit ${YOUR_IP}:8265 for the Dashboard (e.g. 127.0.0.1:8265 or ${YOUR_VM_IP}:8265)

注意

不要在生产环境中使用端口转发。请按照上述说明使用Ingress暴露Dashboard。

有关在Kubernetes上配置Ray集群网络访问的更多信息,请参阅 网络说明

在反向代理后运行#

通过反向代理访问时,Ray 仪表板应能开箱即用。API 请求不需要单独代理。

始终在URL末尾加上尾随的 / 来访问仪表盘。例如,如果你的代理设置为处理 /ray/dashboard 的请求,请在 www.my-website.com/ray/dashboard/ 查看仪表盘。

仪表板发送带有相对URL路径的HTTP请求。当 window.location.href 以斜杠 / 结尾时,浏览器会如预期处理这些请求。

这是许多浏览器处理带有相对URL请求的特性,尽管MDN定义了预期的行为。

通过在反向代理中包含一个规则,使您的仪表板在没有尾部 / 的情况下可见,该规则将用户的浏览器重定向到 /,例如 /ray/dashboard –> /ray/dashboard/

下面是一个使用 traefik TOML 文件的示例,实现了这一点:

[http]
  [http.routers]
    [http.routers.to-dashboard]
      rule = "PathPrefix(`/ray/dashboard`)"
      middlewares = ["test-redirectregex", "strip"]
      service = "dashboard"
  [http.middlewares]
    [http.middlewares.test-redirectregex.redirectRegex]
      regex = "^(.*)/ray/dashboard$"
      replacement = "${1}/ray/dashboard/"
    [http.middlewares.strip.stripPrefix]
      prefixes = ["/ray/dashboard"]
  [http.services]
    [http.services.dashboard.loadBalancer]
      [[http.services.dashboard.loadBalancer.servers]]
        url = "http://localhost:8265"

警告

Ray 仪表板提供对 Ray 集群的读 和写 访问权限。反向代理必须提供身份验证或网络入口控制,以防止未经授权访问集群。

禁用仪表板#

如果你使用 ray[default]其他安装命令,仪表盘将被包含并自动启动。

要禁用仪表板,请使用以下参数 --include-dashboard

使用CLI显式启动集群

ray start --include-dashboard=False

使用 ray.init 隐式启动集群

import ray
ray.init(include_dashboard=False)

Cluster Launcher 的 YAML 文件head_start_ray_commands 部分中包含 ray start --head --include-dashboard=False 参数。

警告

不建议禁用 Dashboard,因为 RayJobRayService 等几个 KubeRay 功能依赖于它。

spec.headGroupSpec.rayStartParams.include-dashboard 设置为 False。查看这个 示例 YAML 文件

将 Grafana 可视化嵌入到 Ray 仪表板中#

为了获得增强的 Ray 仪表板体验,例如 查看时间序列指标 以及日志、作业信息等,请设置 Prometheus 和 Grafana 并将它们与 Ray 仪表板集成。

设置 Prometheus#

要渲染 Grafana 可视化,您需要 Prometheus 从 Ray 集群中抓取指标。请按照 说明 设置您的 Prometheus 服务器,并开始从 Ray 集群中抓取系统和应用程序指标。

设置 Grafana#

Grafana 是一个支持 Prometheus 指标高级可视化的工具,并允许您使用您喜欢的指标创建自定义仪表板。请按照 说明 设置 Grafana。

将 Grafana 可视化嵌入到 Ray 仪表板中#

要在 Ray 仪表板中查看嵌入的时间序列可视化,必须设置以下内容:

  1. 集群的头节点能够访问 Prometheus 和 Grafana。

  2. 仪表盘用户的浏览器能够访问 Grafana。

在启动 Ray 集群时,使用 RAY_GRAFANA_HOSTRAY_PROMETHEUS_HOSTRAY_PROMETHEUS_NAMERAY_GRAFANA_IFRAME_HOST 环境变量配置这些设置。

  • RAY_GRAFANA_HOST 设置为一个头节点可以用来访问 Grafana 的地址。头节点在后端对 Grafana 进行健康检查。

  • RAY_PROMETHEUS_HOST 设置为头节点可以用来访问 Prometheus 的地址。

  • RAY_PROMETHEUS_NAME 设置为选择不同的数据源,以供Grafana仪表板面板使用。默认值为“Prometheus”。

  • RAY_GRAFANA_IFRAME_HOST 设置为用户浏览器可以访问 Grafana 并嵌入可视化的地址。如果未设置 RAY_GRAFANA_IFRAME_HOST,Ray Dashboard 将使用 RAY_GRAFANA_HOST 的值。

例如,如果头节点的IP是55.66.77.88,并且Grafana托管在端口3000上。将值设置为 RAY_GRAFANA_HOST=http://55.66.77.88:3000

  • 如果你手动启动一个单节点Ray集群,请确保这些环境变量在启动集群之前已经设置并可访问,或者作为ray start ...命令的前缀,例如,RAY_GRAFANA_HOST=http://55.66.77.88:3000 ray start ...

  • 如果你使用 VM 集群启动器 启动 Ray 集群,环境变量应该在 head_start_ray_commands 下作为 ray start ... 命令的前缀设置。

  • 如果你使用 KubeRay 启动 Ray 集群,请参考这个 教程

如果所有环境变量都设置正确,你应该会在 Ray 仪表板 中看到时间序列指标。

备注

如果你为每个 Ray 集群使用不同的 Prometheus 服务器,并为所有集群使用相同的 Grafana 服务器,请为每个 Ray 集群设置 RAY_PROMETHEUS_NAME 环境变量为不同的值,并在 Grafana 中添加这些数据源。按照 这些说明 来设置 Grafana。

备用 Prometheus 主机位置#

默认情况下,Ray 仪表盘假设 Prometheus 托管在 localhost:9090。您可以选择在非默认端口或不同机器上运行 Prometheus。在这种情况下,请确保 Prometheus 可以按照 这里 的说明从您的 Ray 节点抓取指标。

然后,按照上述说明正确配置 RAY_PROMETHEUS_HOST 环境变量。例如,如果 Prometheus 托管在 IP 为 55.66.77.88 的节点上的 9000 端口,则设置 RAY_PROMETHEUS_HOST=http://55.66.77.88:9000

备用 Grafana 主机位置#

默认情况下,Ray Dashboard 假设 Grafana 托管在 localhost:3000。您可以选择在非默认端口或不同机器上运行 Grafana,只要头节点和仪表板用户的浏览器可以访问它。

如果在 Kubernetes 集群上使用 NGINX ingress 暴露 Grafana,Grafana ingress 注解中应包含以下行:

nginx.ingress.kubernetes.io/configuration-snippet: |
    add_header X-Frame-Options SAMEORIGIN always;

当Grafana和Ray集群在同一个Kubernetes集群中时,将 RAY_GRAFANA_HOST 设置为Grafana入口的外部URL。

Grafana 的用户认证#

当Grafana实例需要用户认证时,以下设置必须在它的配置文件中,以便在Ray仪表盘中正确嵌入:

  [security]
  allow_embedding = true
  cookie_secure = true
  cookie_samesite = none

故障排除#

仪表盘消息:未检测到 Prometheus 或 Grafana 服务器#

如果你已经按照上面的指示设置了所有内容,请在你的浏览器中运行以下连接检查:

  • 检查 Head Node 与 Prometheus 服务器的连接:在 Ray Dashboard URL 末尾添加 api/prometheus_health(例如:http://127.0.0.1:8265/api/prometheus_health)并访问它。

  • 检查 Head 节点与 Grafana 服务器的连接:在 Ray Dashboard URL 末尾添加 api/grafana_health(例如:http://127.0.0.1:8265/api/grafana_health)并访问它。

  • 检查浏览器与Grafana服务器的连接:访问在 RAY_GRAFANA_IFRAME_HOST 中使用的URL。

出现错误提示 RAY_GRAFANA_HOST 未设置#

如果你已经设置了 Grafana,请检查:

  • 你在URL中包含了协议(例如,http://your-grafana-url.com 而不是 your-grafana-url.com)。

  • URL 没有尾部斜杠(例如,http://your-grafana-url.com 而不是 http://your-grafana-url.com/)。

证书颁发机构 (CA 错误)#

如果你的 Grafana 实例托管在 HTTPS 后面,你可能会看到 CA 错误。请联系 Grafana 服务所有者以正确启用 HTTPS 流量。

查看内置的仪表板 API 指标#

Dashboard 由一个服务器驱动,该服务器通过 API 端点提供 UI 代码和集群数据。Ray 为每个 API 端点发出基本的 Prometheus 指标:

ray_dashboard_api_requests_count_requests_total: 收集请求的总数。这由端点、方法和http_status标记。

ray_dashboard_api_requests_duration_seconds_bucket: 收集请求的持续时间。这由端点和方法标记。

例如,您可以使用此查询查看所有请求的 p95 持续时间:

histogram_quantile(0.95, sum(rate(ray_dashboard_api_requests_duration_seconds_bucket[5m])) by (le))

你可以从 Prometheus 或 Grafana UI 查询这些指标。关于如何设置这些工具的说明,请参见上文。