在 vSphere 上启动 Ray 集群#

本指南详细介绍了在vSphere环境中启动Ray集群所需的步骤。

要启动一个 vSphere Ray 集群,您将使用 Ray 集群启动器与 VMware vSphere Automation SDK for Python。

准备 vSphere 环境#

如果你还没有vSphere部署,你可以通过阅读 vSphere文档 了解更多信息。vSphere Ray集群启动器需要vSphere 8.0或更高版本,以及创建Ray集群的以下先决条件。

另一种准备 vSphere 环境的方法是使用 VMware Cloud Foundation (VCF)。VCF 是一个统一的软件定义数据中心 (SDDC) 平台,它无缝集成了 vSphere、vSAN 和 NSX,形成了一个原生集成的堆栈,为私有和公共云环境提供了企业级的云基础设施。如果你正在使用 VCF,你可以参考 VCF 文档来 创建工作负载域 以运行 Ray 集群。一个 VCF 工作负载域包含一个或多个 vSphere 集群、共享存储如 vSAN,以及由 NSX 管理的软件定义网络。你还可以 使用 VCF 创建 NSX Edge 集群 并为 Ray VM 网络创建段。

准备冻结的虚拟机#

vSphere Ray 集群启动器要求 vSphere 环境中有一个处于冻结状态的虚拟机,用于部署 Ray 集群。该虚拟机已安装所有依赖项,并随后通过 VMware 的 即时克隆 技术快速创建头节点和工作节点。使用冻结虚拟机进行 Ray 集群配置过程的详细信息可以在 Ray on vSphere 架构文档 中找到。

你可以按照 vm-packer-for-ray 的 文档 使用 Packer 创建和设置冻结的虚拟机,或者在一组冻结的虚拟机中,每个虚拟机都将托管在 vSphere 集群中的不同 ESXi 主机上。默认情况下,Ray 集群的头节点和工作节点虚拟机将被放置在与冻结虚拟机相同的资源池中。在构建和部署冻结虚拟机时,有几点需要注意:

  • 虚拟机的网络适配器应连接到上一节中配置的端口组或NSX段。并且应选中 开机时连接 复选框。

  • 在冻结的虚拟机构建完成后,会在当前用户的HOME目录下生成一个私钥文件(ray-bootstrap-key.pem)和一个公钥文件(ray_bootstrap_public_key.key)。如果你想从另一台机器部署Ray集群,这些文件应该被复制到那台机器的HOME目录中,以便被vSphere集群启动器识别。

  • 将在内容库中生成一个OVF。如果你想在其他vSphere部署中部署Ray集群,你可以使用内容库的发布和订阅功能将冻结的VM模板同步到另一个vSphere环境。然后你可以利用Ray集群启动器首先帮助你创建一个或多个冻结的VM,然后帮助你创建Ray集群,查看文档了解如何编写yaml文件以帮助从OVF模板部署冻结的VM。

安装 Ray 集群启动器#

Ray 集群启动器是 ray CLI 的一部分。使用 CLI 通过 ray upray downray attach 等命令来启动、停止和附加到正在运行的 Ray 集群。你可以使用 pip 安装支持集群启动器的 ray CLI。请参考 Ray 安装文档 获取更详细的安装说明。

# install ray
pip install -U ray[default]

安装 VMware vSphere Automation SDK for Python#

接下来,安装适用于 Python 的 VMware vSphere Automation SDK。

# Install the VMware vSphere Automation SDK for Python.
pip install 'git+https://github.com/vmware/vsphere-automation-sdk-python.git'

你可以附加一个版本标签来安装特定版本。

# Install the v8.0.1.0 version of the SDK.
pip install 'git+https://github.com/vmware/vsphere-automation-sdk-python.git@v8.0.1.0'

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

安装 vSphere Automation SDK 后,您应该准备好使用集群启动器启动您的集群。提供的 集群配置文件 将创建一个带有头节点的小型集群,该头节点配置为自动扩展到最多两个工作节点。

请注意,您需要通过设置环境变量或在 Ray 集群配置 YAML 文件中添加它们来配置您的 vSphere 凭据和 vCenter 服务器地址。

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

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

# Setup vSphere credentials using environment variables
export VSPHERE_SERVER=vcenter-address.example.com
export VSPHERE_USER=foo
export VSPHERE_PASSWORD=bar

# Edit the example-full.yaml to update the frozen VM related configs under vsphere_config. there are 3 options:
# 1. If you have a single frozen VM, set the "name" under "frozen_vm".
# 2. If you have a set of frozen VMs in a resource pool (one VM on each ESXi host), set the "resource_pool" under "frozen_vm".
# 3. If you don't have any existing frozen VM in the vSphere cluster, but you have an OVF template of a frozen VM, set the "library_item" under "frozen_vm". After that, you need to either set the "name" of the to-be-deployed frozen VM, or set the "resource_pool" to point to an existing resource pool for the to-be-deployed frozen VMs for all the ESXi hosts in the vSphere cluster. Also, the "datastore" must be specified.
# Optionally configure the head and worker node resource pool and datastore placement.
# If not configured via environment variables, the vSphere credentials can alternatively be configured in this file.

# 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.
python -c 'import ray; ray.init()'
exit

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

恭喜,您已经在 vSphere 上启动了一个 Ray 集群!

将 vSAN 文件服务配置为 Ray AI 库的持久存储#

从 Ray 2.7 开始,Ray AI 库(Train 和 Tune)将要求用户在运行分布式训练或调优作业时提供云存储或 NFS 路径。在具有 vSAN 数据存储的 vSphere 环境中,您可以利用 vSAN 文件服务功能将 vSAN 用作共享持久存储。您可以参考 此 vSAN 文件服务文档 来创建和配置 vSAN 支持的 NFS 文件共享。一般步骤如下:

  1. 启用 vSAN 文件服务并使用域信息和 IP 地址池进行配置。

  2. 使用NFS协议创建一个vSAN文件共享。

  3. 查看文件共享信息以获取NFS导出路径。

一旦创建了文件共享,您可以将其挂载到头节点和工作节点,并使用挂载路径作为 Ray Train 和 Tune 中 RunConfig 参数的 storage_path。请参考 这个示例 YAML 作为如何挂载和配置路径的模板。您需要修改 initialization_commands 列表中的 NFS 导出路径,并在 Ray 容器中绑定挂载路径。在这个示例中,您需要将 /mnt/shared_storage/experiment_results 作为 RunConfigstorage_path