本文档提供了有关如何在 Vertex AI 上设置 Ray 集群以满足各种需求的说明。例如,如需构建您自己的映像,请参阅自定义映像。某些企业可以使用专用网络。本文档介绍了 Ray on Vertex AI 的 Private Service Connect 接口。另一个应用场景是像访问本地文件一样访问远程文件(请参阅 Ray on Vertex AI 网络文件系统)。
概览
本文介绍的主题包括:
- 在 Vertex AI 上创建 Ray 集群
- 管理 Ray 集群的生命周期
- 创建自定义映像
- 设置专用连接和公共连接 (VPC)
- 将 Private Service Connect 接口用于 Ray on Vertex AI
- 设置 Ray on Vertex AI 网络文件系统 (NFS)
- 设置使用 VPC-SC + VPC 对等互连的 Ray 信息中心和交互式 Shell
创建 Ray 集群
您可以使用 Google Cloud 控制台或 Vertex AI SDK for Python 创建 Ray 集群。一个集群最多可以有 2,000 个节点。一个工作器池中的节点数上限为 1,000。虽然工作器池的数量没有限制,但如果有大量工作器池(例如,有 1,000 个工作器池,每个工作器池有一个节点),可能会对集群性能产生负面影响。
在开始之前,请务必阅读 Ray on Vertex AI 概览并设置您需要的所有必要工具。
Vertex AI 上的 Ray 集群在您创建后可能需要 10-20 分钟才能启动。
控制台
根据 OSS Ray 最佳实践建议,强制在 Ray 头节点上将逻辑 CPU 数量设置为 0,以便避免在头节点上运行任何工作负载。
在 Google Cloud 控制台中,前往“Ray on Vertex AI”页面。
点击创建集群,打开创建集群面板。
对于创建集群面板中的每个步骤,请查看或替换默认集群信息。点击继续以完成每个步骤:
在名称和区域中,为集群指定名称并选择位置。
在计算设置中,指定 Vertex AI 上的 Ray 集群的头节点的配置,包括其机器类型、加速器类型和数量、磁盘类型和大小以及副本数量。您可以酌情添加自定义映像 URI 来指定自定义容器映像,以添加默认容器映像未提供的 Python 依赖项。请参阅自定义映像。
在高级选项下,您可以:
- 指定您自己的加密密钥。
- 指定自定义服务账号。
- 如果您在训练期间不需要监控工作负载的资源统计信息,请停用指标收集。
(可选)如需为集群部署专用端点,建议使用 Private Service Connect。如需了解详情,请参阅 Ray on Vertex AI 的 Private Service Connect 接口。
点击创建。
Ray on Vertex AI SDK
根据 OSS Ray 最佳实践建议,强制在 Ray 头节点上将逻辑 CPU 数量设置为 0,以便避免在头节点上运行任何工作负载。
在交互式 Python 环境中,使用以下命令在 Vertex AI 上创建 Ray 集群:
import ray import vertex_ray from google.cloud import aiplatform from vertex_ray import Resources from vertex_ray.util.resources import NfsMount # Define a default CPU cluster, machine_type is n1-standard-16, 1 head node and 1 worker node head_node_type = Resources() worker_node_types = [Resources()] # Or define a GPU cluster. head_node_type = Resources( machine_type="n1-standard-16", node_count=1, custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest", # Optional. When not specified, a prebuilt image is used. ) worker_node_types = [Resources( machine_type="n1-standard-16", node_count=2, # Must be >= 1 accelerator_type="NVIDIA_TESLA_T4", accelerator_count=1, custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest", # When not specified, a prebuilt image is used. )] # Optional. Create cluster with Network File System (NFS) setup. nfs_mount = NfsMount( server="10.10.10.10", path="nfs_path", mount_point="nfs_mount_point", ) aiplatform.init() # Initialize Vertex AI to retrieve projects for downstream operations. # Create the Ray cluster on Vertex AI CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster( head_node_type=head_node_type, network=NETWORK, #Optional worker_node_types=worker_node_types, python_version="3.10", # Optional ray_version="2.47", # Optional cluster_name=CLUSTER_NAME, # Optional service_account=SERVICE_ACCOUNT, # Optional enable_metrics_collection=True, # Optional. Enable metrics collection for monitoring. labels=LABELS, # Optional. nfs_mounts=[nfs_mount], # Optional. )
其中:
CLUSTER_NAME:Vertex AI 上的 Ray 集群的名称,该名称在整个项目中必须是唯一的。
NETWORK:(可选)VPC 网络的完整名称,格式为
projects/PROJECT_ID/global/networks/VPC_NAME
。如需为集群设置专用端点(而非公共端点),请指定要与 Ray on Vertex AI 搭配使用的 VPC 网络。如需了解详情,请参阅专用连接和公共连接。VPC_NAME:可选:虚拟机在运行时所在的 VPC。
PROJECT_ID:您的 Google Cloud 项目 ID。您可以在 Google Cloud 控制台的欢迎页面上找到项目 ID。
SERVICE_ACCOUNT:可选:用于在集群中运行 Ray 应用的服务账号。授予必需的角色。
LABELS:(可选)带有用户定义元数据的标签,用于整理 Ray 集群。标签键和值不能超过 64 个字符(Unicode 代码点),并且只能包含小写字母、数字字符、下划线和短划线。允许使用国际字符。如需了解详情和标签示例,请访问 https://goo.gl/xmQnxf。
在状态更改为 RUNNING
之前,您应该会看到以下输出:
[Ray on Vertex AI]: Cluster State = State.PROVISIONING Waiting for cluster provisioning; attempt 1; sleeping for 0:02:30 seconds ... [Ray on Vertex AI]: Cluster State = State.RUNNING
请注意以下几点:
第一个节点是头节点。
不支持 TPU 机器类型。
生命周期管理
在 Vertex AI 上的 Ray 集群的生命周期内,每个操作都与一个状态相关联。下表总结了各个状态的结算状态和管理选项。 参考文档提供了每种状态的定义。
操作 | 状态 | 计费? | 是否可以执行删除操作? | 是否可以执行取消操作? |
---|---|---|---|---|
用户创建集群 | 正在预配 | 否 | 否 | 否 |
用户手动纵向扩容或缩容 | 正在更新 | 是,按实时大小 | 是 | 否 |
集群运行 | 正在运行 | 是 | 是 | 不适用 - 您可以删除 |
集群自动扩缩 | 正在更新 | 是,按实时大小 | 是 | 否 |
用户删除集群 | 正在停止 | 否 | 否 | 不适用 - 已停止 |
集群进入错误状态 | 错误 | 否 | 是 | 不适用 - 您可以删除 |
不适用 | STATE_UNSPECIFIED | 否 | 是 | 不适用 |
自定义映像(可选)
预构建映像适用于大多数应用场景。如果您想构建自己的映像,请使用 Ray on Vertex AI 预构建映像作为基础映像。如需了解如何根据基础映像构建自己的映像,请参阅 Docker 文档。
这些基础映像包含 Python、Ubuntu 和 Ray 的安装。 它们还包含以下依赖项,例如:
- python-json-logger
- google-cloud-resource-manager
- ca-certificates-java
- libatlas-base-dev
- liblapack-dev
- g++、libio-all-perl
- libyaml-0-2。
专用连接和公共连接
默认情况下,Ray on Vertex AI 会创建一个安全的公共端点,以便在 Vertex AI 上的 Ray 集群中使用 Ray 客户端进行交互式开发。在开发或临时应用场景中使用公共连接。此公共端点可通过互联网访问。只有在 Ray 集群的用户项目中至少拥有 Vertex AI 用户角色权限的授权用户才能访问集群。
如果您需要与集群建立专用连接,或者如果您使用的是 VPC Service Controls,则 Vertex AI 上的 Ray 集群支持 VPC 对等互连。只有从与 Vertex AI 对等互连的 VPC 网络中的客户端才能访问具有专用端点的集群。
如需使用 VPC 对等互连为 Ray on Vertex AI 设置专用连接,请在创建集群时选择 VPC 网络。VPC 网络需要在您的 VPC 网络和 Vertex AI 之间建立专用服务连接。如果您要在控制台中使用 Ray on Vertex AI,则可以在创建集群时设置专用服务访问通道连接。
如果您想将 VPC Service Controls 和 VPC 对等互连与 Vertex AI 上的 Ray 集群搭配使用,则需要进行额外的设置才能使用 Ray 信息中心和交互式 Shell。按照使用 VPC-SC + VPC 对等互连的 Ray 信息中心和交互式 Shell 中的说明,在您的用户项目中使用 VPC-SC 和 VPC 对等互连配置交互式 Shell 设置。
在 Vertex AI 上创建 Ray 集群后,您可以使用 Vertex AI SDK for Python 连接到头节点。连接环境(例如 Compute Engine 虚拟机或 Vertex AI Workbench 实例)必须位于与 Vertex AI 对等互连的 VPC 网络中。请注意,专用服务连接的 IP 地址数量有限,这可能会导致 IP 地址耗尽。因此,我们建议您为长时间运行的集群使用专用连接。
Ray on Vertex AI 的 Private Service Connect 接口
Vertex AI 上的 Ray 集群支持 Private Service Connect 接口出站和 Private Service Connect 接口入站。
如需使用 Private Service Connect 接口出站,请按照以下说明操作。如果未启用 VPC Service Controls,则使用 Private Service Connect 接口出站的集群会通过 Ray 客户端使用安全的公共端点进行入站。
如果启用了 VPC Service Controls,则 Private Service Connect 接口入站默认与 Private Service Connect 接口出站搭配使用。如需连接到 Ray 客户端,或通过笔记本为使用 Private Service Connect 接口入站的集群提交作业,请确保该笔记本位于用户项目 VPC 和子网中。如需详细了解如何设置 VPC Service Controls,请参阅将 VPC Service Controls 与 Vertex AI 搭配使用。
启用 Private Service Connect 接口
按照设置资源指南设置 Private Service Connect 接口。设置资源后,您就可以在 Vertex AI 上的 Ray 集群上启用 Private Service Connect 接口了。
控制台
在创建集群时,指定名称和区域以及计算设置后,系统会显示网络选项。
请执行以下操作之一来设置网络附件:
- 使用您在为 Private Service Connect 设置资源时指定的 NETWORK_ATTACHMENT_NAME 名称。
- 点击下拉菜单中显示的创建网络连接按钮,创建新的网络连接。
点击创建网络连接。
在显示的子任务中,为新的网络连接指定名称、网络和子网。
点击创建。
Ray on Vertex AI SDK
Ray on Vertex AI SDK 是 Vertex AI SDK for Python 的一部分。如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。如需了解详情,请参阅 Vertex AI SDK for Python API 参考文档。
from google.cloud import aiplatform import vertex_ray # Initialization aiplatform.init() # Create a default cluster with network attachment configuration psc_config = vertex_ray.PscIConfig(network_attachment=NETWORK_ATTACHMENT_NAME) cluster_resource_name = vertex_ray.create_ray_cluster( psc_interface_config=psc_config, )
其中:
- NETWORK_ATTACHMENT_NAME:您在用户项目中为 Private Service Connect 设置资源时指定的名称。
Ray on Vertex AI 网络文件系统 (NFS)
如需让集群可以访问远程文件,请装载网络文件系统 (NFS) 共享。然后,您的作业可以像访问本地文件那样访问远程文件,从而实现高吞吐量和短延时。
VPC 设置
您可以通过以下两种方式设置 VPC:
设置 NFS 实例
如需详细了解如何创建 Filestore 实例,请参阅创建实例。如果您使用的是 Private Service Connect 接口方法,则无需在创建 Filestore 时选择专用服务访问通道模式。
使用网络文件系统 (NFS)
如需使用网络文件系统,请指定网络或网络连接(推荐)。
控制台
在创建页面的“网络”步骤中,在指定网络或网络连接后。为此,请点击“网络文件系统 (NFS)”部分下的添加 NFS 装载,然后指定 NFS 装载(服务器、路径和装载点)。
字段 说明 server
NFS 服务器的 IP 地址。此地址必须是您的 VPC 中的专用地址。 path
NFS 共享路径。此路径必须是以 /
开头的绝对路径。mountPoint
本地装载点。这必须是有效的 UNIX 目录名称。比方说,如果本地装载点是 sourceData
,则指定训练虚拟机实例中的路径/mnt/nfs/ sourceData
。如需了解详情,请参阅在何处指定计算资源。
指定服务器、路径和装载点。
点击创建。这将创建 Ray 集群。
使用 VPC-SC + VPC 对等互连的 Ray 信息中心和交互式 Shell
-
配置
peered-dns-domains
。{ VPC_NAME=NETWORK_NAME REGION=LOCATION gcloud services peered-dns-domains create training-cloud \ --network=$VPC_NAME \ --dns-suffix=$REGION.aiplatform-training.cloud.google.com. # Verify gcloud beta services peered-dns-domains list --network $VPC_NAME; }
-
NETWORK_NAME:更改为对等互连的网络。
-
LOCATION:所需位置(例如
us-central1
)。
-
-
配置
DNS managed zone
。{ PROJECT_ID=PROJECT_ID ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com DNS_NAME=aiplatform-training.cloud.google.com DESCRIPTION=aiplatform-training.cloud.google.com gcloud dns managed-zones create $ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME \ --dns-name=$DNS_NAME \ --description="Training $DESCRIPTION" }
-
PROJECT_ID:您的项目 ID。您可以在 Google Cloud 控制台的欢迎页面中找到这些 ID。
-
-
记录 DNS 事务。
{ gcloud dns record-sets transaction start --zone=$ZONE_NAME gcloud dns record-sets transaction add \ --name=$DNS_NAME. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction add \ --name=*.$DNS_NAME. \ --type=CNAME $DNS_NAME. \ --zone=$ZONE_NAME \ --ttl=300 gcloud dns record-sets transaction execute --zone=$ZONE_NAME }
-
提交已启用交互式 Shell 和 VPC-SC 以及 VPC 对等互连的训练作业。