扩缩 Vertex AI 上的 Ray 集群

您可以通过以下两种方式在 Vertex AI 上扩缩 Ray 集群:自动扩缩手动扩缩。借助自动扩缩功能,集群可以根据 Ray 任务和因子所需的资源自动调整工作器节点的数量。如果您运行的是繁重的工作负载,并且不确定所需的资源,建议您使用自动扩缩。通过手动扩缩,用户可以更精细地控制节点。

自动扩缩可以降低工作负载成本,但会增加节点启动开销,并且配置起来可能比较棘手。如果您是 Ray 新手,建议您先从非自动扩缩集群开始,并使用手动扩缩功能。

自动扩缩

您可以通过指定工作器池的最小副本数 (min_replica_count) 和最大副本数 (max_replica_count) 来启用 Ray 集群的自动扩缩功能。

请注意以下事项:

  • 您必须配置所有工作器池的自动扩缩规格。
  • min_replica_count 必须大于或等于 1
  • 不支持自定义升/降采样速度。如需了解默认值,请参阅 Ray 文档中的缩放速度

设置工作器池自动扩缩规格

您可以使用 Google Cloud 控制台或 Vertex AI SDK for Python 启用 Ray 集群的自动缩放功能。

Vertex AI SDK 上的 Ray

from google.cloud import aiplatform
import vertex_ray
from vertex_ray import AutoscalingSpec

autoscaling_spec = AutoscalingSpec(
 min_replica_count=1,
 max_replica_count=3,
)

head_node_type = Resources(
 machine_type="n1-standard-16",
 node_count=1,
)

worker_node_types = [Resources(
 machine_type="n1-standard-16",
 accelerator_type="NVIDIA_TESLA_T4",
 accelerator_count=1,
 autoscaling_spec=autoscaling_spec,
)]

# Create the Ray cluster on Vertex AI
CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster(
head_node_type=head_node_type,
worker_node_types=worker_node_types,
...
)

控制台

根据 OSS Ray 最佳实践建议,强制在 Ray 头节点上将逻辑 CPU 数量设置为 0,以便避免在头节点上运行任何工作负载。

  1. 在 Google Cloud 控制台中,转至“Ray on Vertex AI”页面。

    转至“Ray on Vertex AI”页面

  2. 点击创建集群,打开创建集群面板。

  3. 对于创建集群面板中的每个步骤,请查看或替换默认集群信息。点击继续以完成每个步骤:

    1. 名称和区域中,为集群指定名称并选择区域。
    2. 计算设置中,指定头节点上的 Ray 集群的配置,包括其机器类型、加速器类型和数量、磁盘类型和大小以及副本数量。您可以酌情添加自定义映像 URI 来指定自定义容器映像,以添加默认容器映像未提供的 Python 依赖项。请参阅自定义映像

      高级选项下,您可以:

      • 指定您自己的加密密钥。
      • 指定自定义服务账号
      • 如果您在训练期间不需要监控工作负载的资源统计信息,请停用指标收集。
    3. 如需创建包含自动扩缩工作器池的集群,请为工作器池的副本数上限提供一个值。autoscaling-compute-settings

  4. 点击创建

手动扩缩

当 Vertex AI 上的 Ray 集群的工作负载激增或减少时,您可以手动扩缩副本的数量以满足需求。例如,如果您有过剩的容量,可以缩减工作器池以节省费用。

VPC 对等互连的限制

扩缩集群时,您只能更改现有工作器池中的副本数量。例如,您无法在集群中添加或移除工作器池,也无法更改工作器池的机器类型。此外,工作器池的副本数量不能小于 1。

如果您使用 VPC 对等互连连接来连接到集群,则节点数上限受到限制。节点数上限取决于集群在创建后具有的节点数。如需了解详情,请参阅节点数上限计算。此数量上限不仅包括工作器池,还包括头节点。如果您使用默认网络配置,则节点数量不得超过创建集群文档中所述的上限。

计算节点数上限

如果您使用专用服务访问通道(VPC 对等互连)连接到节点,请使用以下公式检查您未超过节点数上限 (M)(假设 f(x) = min(29, (32 - ceiling(log2(x)))):

  • f(2 * M) = f(2 * N)
  • f(64 * M) = f(64 * N)
  • f(max(32, 16 + M)) = f(max(32, 16 + N))

Ray on Vertex AI 集群可以扩容到的节点总数上限 (M) 取决于您设置的初始节点总数 (N)。创建 Ray on Vertex AI 集群后,您可以将节点总数扩缩到 PM 之间的值(含边界值),其中 P 是集群中的池数量。

集群中的初始节点总数和纵向扩容目标数量必须位于同一色块中。

节点数量

更新副本数量

您可以使用 Google Cloud 控制台或 Vertex AI SDK for Python 更新工作器池的副本数量。如果集群包含多个工作器池,您可以在单个请求中单独更改每个副本数量。

Vertex AI SDK 上的 Ray

import vertexai
import vertex_ray

vertexai.init()
cluster = vertex_ray.get_ray_cluster("CLUSTER_NAME")

# Get the resource name.
cluster_resource_name = cluster.cluster_resource_name

# Create the new worker pools
new_worker_node_types = []
for worker_node_type in cluster.worker_node_types:
 worker_node_type.node_count = REPLICA_COUNT # new worker pool size
 new_worker_node_types.append(worker_node_type)

# Make update call
updated_cluster_resource_name = vertex_ray.update_ray_cluster(
 cluster_resource_name=cluster_resource_name,
 worker_node_types=new_worker_node_types,
)

控制台

  1. 在 Google Cloud 控制台中,转至“Ray on Vertex AI”页面。

    转至“Ray on Vertex AI”页面

  2. 在集群列表中,点击要修改的集群。

  3. 集群详情页面上,点击修改集群

  4. 修改集群窗格中,选择要更新的工作器池,然后修改副本数量。

  5. 点击更新

    等待几分钟,直至集群完成更新。更新完成后,您可以在集群详细信息页面上看到更新后的副本数。

  6. 点击创建