在本地部署集群#

本文档描述了如何在本地设置 Ray 集群,即在裸金属机器或私有云上运行 Ray。我们提供了两种启动本地集群的方式。

  • 您可以通过安装 Ray 包并在每个节点上启动 Ray 进程来手动设置 Ray 集群。

  • 或者,如果您提前知道所有节点并且可以 SSH 访问它们,您应该使用cluster-launcher 来启动 Ray 集群。

手动设置 Ray 集群#

本节假定您拥有一系列机器,并且集群中的节点共享相同的网络。它还假定 Ray 已在每台机器上安装。您可以使用 pip 来安装支持集群启动的 ray 命令行工具。有关更多详细信息,请遵循Ray 安装说明

# install ray
pip install -U "ray[default]"

启动主节点#

选择任何一个节点作为主节点并运行以下命令。如果省略了 --port 参数,Ray 将首先尝试端口 6379,如果 6379 被占用,则回退到随机端口。

ray start --head --port=6379

该命令将打印出 Ray 集群的地址,该地址可以传递给其他机器上的 ray start 命令以启动工作节点(如下所示)。如果您收到 ConnectionError,请检查您的防火墙设置和网络配置。

启动工作节点#

然后,在其他每个节点上,运行以下命令以连接到您刚刚创建的主节点。

ray start --address=<head-node-address:port>

请确保将 head-node-address:port 替换为主节点命令打印出的值(它看起来应该类似于 123.45.67.89:6379)。

请注意,如果您的计算节点位于具有网络地址转换(NAT)的独立子网中,则主节点打印出的地址在从该子网外部的机器连接时将不起作用。您需要使用从远程机器可访问的主节点地址。如果主节点具有像 compute04.berkeley.edu 这样的域名地址,您可以直接使用它代替 IP 地址,并依赖 DNS。

Ray 会自动检测每个节点可用的资源(例如 CPU),但您也可以通过向 ray start 命令传递自定义资源来手动覆盖此设置。例如,如果您希望指定一台机器有 10 个 CPU 和 1 个 GPU 可供 Ray 使用,您可以使用标志 --num-cpus=10--num-gpus=1 来实现。有关更多信息,请参阅配置页面

故障排除#

如果您看到 Unable to connect to GCS at ...,这意味着在给定的 --address 处主节点不可访问。一些可能的原因包括:

  • 主节点实际上并未运行;

  • 在指定的地址上运行的是不同版本的 Ray;

  • 指定的地址不正确;

  • 或者存在阻止访问的防火墙设置。

如果连接失败,您可以使用 nmap 或 nc 等工具来检查从一个节点是否可以访问另一个节点上的每个端口。

$ nmap -sV --reason -p $PORT $HEAD_ADDRESS
Nmap scan report for compute04.berkeley.edu (123.456.78.910)
Host is up, received echo-reply ttl 60 (0.00087s latency).
rDNS record for 123.456.78.910: compute04.berkeley.edu
PORT     STATE SERVICE REASON         VERSION
6379/tcp open  redis?  syn-ack
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
$ nc -vv -z $HEAD_ADDRESS $PORT
Connection to compute04.berkeley.edu 6379 port [tcp/*] succeeded!

如果节点无法访问该 IP 地址上的该端口,您可能会看到

$ nmap -sV --reason -p $PORT $HEAD_ADDRESS
Nmap scan report for compute04.berkeley.edu (123.456.78.910)
Host is up (0.0011s latency).
rDNS record for 123.456.78.910: compute04.berkeley.edu
PORT     STATE  SERVICE REASON       VERSION
6379/tcp closed redis   reset ttl 60
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
$ nc -vv -z $HEAD_ADDRESS $PORT
nc: connect to compute04.berkeley.edu port 6379 (tcp) failed: Connection refused

使用 Ray 集群启动器#

Ray 集群启动器是 ray 命令行工具的一部分。它允许您使用 ray upray downray attach 等命令来启动、停止和连接到正在运行的 Ray 集群。您可以使用 pip 安装它,或者遵循安装 Ray 以获取更详细的说明。

# install ray
pip install "ray[default]"

使用 Ray 集群启动器启动 Ray#

提供的 example-full.yaml 集群配置文件将根据节点列表创建一个 Ray 集群。

请注意,您需要在这些模板中填写您的 head_ipworker_ips 列表以及 ssh_user 字段。

通过从本地机器运行以下命令来测试它是否正常工作

# Download the example-full.yaml
wget https://raw.githubusercontent.com/ray-project/ray/master/python/ray/autoscaler/local/example-full.yaml

# Update the example-full.yaml to update head_ip, worker_ips, and ssh_user.
# vi example-full.yaml

# Create or update the cluster. When the command finishes, it will print
# out the command that can be used to SSH into the cluster head node.
ray up example-full.yaml

# Get a remote screen on the head node.
ray attach example-full.yaml
# Try running a Ray program.

# Tear down the cluster.
ray down example-full.yaml

恭喜,您已成功启动本地 Ray 集群!