您可以通过以下两种方式在 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,以便避免在头节点上运行任何工作负载。
在 Google Cloud 控制台中,转至“Ray on Vertex AI”页面。
点击创建集群,打开创建集群面板。
对于创建集群面板中的每个步骤,请查看或替换默认集群信息。点击继续以完成每个步骤:
点击创建。
手动扩缩
当 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 集群后,您可以将节点总数扩缩到 P
至 M
之间的值(含边界值),其中 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, )
控制台
在 Google Cloud 控制台中,转至“Ray on Vertex AI”页面。
在集群列表中,点击要修改的集群。
在集群详情页面上,点击修改集群。
在修改集群窗格中,选择要更新的工作器池,然后修改副本数量。
点击更新。
等待几分钟,直至集群完成更新。更新完成后,您可以在集群详细信息页面上看到更新后的副本数。
点击创建。