概览
您可以使用 Spot 虚拟机来降低运行预测作业的费用。Spot 虚拟机是过剩的 Compute Engine 容量的虚拟机 (VM) 实例。Spot 虚拟机的折扣力度很大,但 Compute Engine 可能会提前停止或删除(抢占)Spot 虚拟机来随时收回容量。
如需了解详情,请参阅 Spot 虚拟机。
限制和要求
将 Spot 虚拟机与 Vertex AI 搭配使用时,请考虑以下限制和要求:
- 将 Spot 虚拟机与 Vertex AI 搭配使用时,所有Spot 虚拟机限制均适用。
- 仅支持将 Spot 虚拟机与 Vertex AI 搭配使用进行自定义训练和预测。
- 不支持将 Spot 虚拟机与 TPU Pod 搭配使用。
- 不支持通过 Google Cloud 控制台提交作业。
结算
如果您的工作负载具有容错能力,并且可以承受可能的虚拟机抢占,Spot 虚拟机可以显著降低您的计算费用。如果其中某些虚拟机在处理期间停止,作业会减慢但不会完全停止。Spot 虚拟机可完成您的批处理任务,而不会在现有虚拟机上增加额外的负载,您也不再需要为额外的标准虚拟机支付全价。请参阅抢占处理。
使用 Spot 虚拟机时,您需要按作业时长和机器类型付费。您无需为作业在队列中或被抢占的时间付费。
抢占处理
Compute Engine 可随时回收 Spot 虚拟机。因此,您的预测作业必须具有容错能力,才能充分利用 Spot 虚拟机。当抢占式虚拟机被抢占时,预测作业会失败并显示 STOCKOUT
错误,Compute Engine 会尝试最多重启该作业六次。如需了解如何充分利用 Spot 虚拟机,请参阅 Spot 虚拟机最佳实践。
以下是一些可用于使预测作业具有容错能力的方法:
- 创建检查点以保存进度。通过定期存储模型的进度,您可以确保终止的预测作业可以从上次存储的检查点继续运行,而不是从头开始。
- 使用关停脚本。如果 Compute Engine 抢占 Spot 虚拟机,您可以使用关停脚本尝试在虚拟机被抢占前执行清理操作。如需了解详情,请参阅使用关停脚本处理抢占。
使用 Spot 虚拟机获取预测
如需在部署模型以获取预测结果时使用 Spot VM,您可以使用 REST API 或 Vertex AI SDK for Python。
REST
在使用任何请求数据之前,请先进行以下替换:
- LOCATION_ID:您在其中使用 Vertex AI 的区域。
- PROJECT_ID:您的项目 ID。
- ENDPOINT_ID:端点的 ID。
- MODEL_ID:要部署的模型的 ID。
-
DEPLOYED_MODEL_NAME:
DeployedModel
的名称。您还可以将Model
的显示名用于DeployedModel
。 -
MACHINE_TYPE:可选。用于此部署的每个节点的机器资源。其默认设置为
n1-standard-2
。详细了解机器类型。 - ACCELERATOR_TYPE:可选。要挂接到机器的加速器类型。了解详情。
- ACCELERATOR_COUNT:可选。每个副本要使用的加速器数量。
- MIN_REPLICA_COUNT:此部署的最小节点数。 节点数可根据预测负载的需要而增加或减少,直至达到节点数上限并且绝不会少于此节点数。此值必须大于或等于 1。
- MAX_REPLICA_COUNT:此部署的节点数上限。 节点数可根据预测负载的需要而增加或减少,直至达到此节点数并且绝不会少于节点数下限。
- TRAFFIC_SPLIT_THIS_MODEL:流向此端点的要路由到使用此操作部署的模型的预测流量百分比。默认值为 100。所有流量百分比之和必须为 100。详细了解流量拆分。
- DEPLOYED_MODEL_ID_N:可选。如果将其他模型部署到此端点,您必须更新其流量拆分百分比,以便所有百分比之和等于 100。
- TRAFFIC_SPLIT_MODEL_N:已部署模型 ID 密钥的流量拆分百分比值。
- PROJECT_NUMBER:自动生成的项目编号。
HTTP 方法和网址:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
请求 JSON 正文:
{ "acceleratorCount": 1}, "spot": true, "minReplicaCount": 1, "maxReplicaCount": 1}}, "trafficSplit": {"0": 100}}' \ "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel" "deployedModel": { "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID", "displayName": "DEPLOYED_MODEL_NAME", "enableContainerLogging": true, "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorType": "ACCELERATOR_TYPE", "acceleratorCount": ACCELERATOR_COUNT }, "spot": true, "minReplicaCount": MIN_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT }, }, "trafficSplit": { "0": TRAFFIC_SPLIT_THIS_MODEL, "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1, "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2 }, }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata", "genericMetadata": { "createTime": "2020-10-19T17:53:16.502088Z", "updateTime": "2020-10-19T17:53:16.502088Z" } } }
Python
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。如需了解详情,请参阅 Vertex AI SDK for Python API 参考文档。
endpoint5.deploy( model = model, deployed_model_display_name=DEPLOYED_NAME, traffic_split=TRAFFIC_SPLIT, machine_type="MACHINE_TYPE", accelerator_type="ACCELERATOR_TYPE", accelerator_count=ACCELERATOR_COUNT, min_replica_count=MIN_REPLICA_COUNT, max_replica_count=MAX_REPLICA_COUNT, spot=True, sync=True )
后续步骤
- 详细了解 Spot 虚拟机。
- 如需从整体上详细了解 Compute Engine 虚拟机,请参阅虚拟机实例文档。
- 如需了解如何创建 Spot 虚拟机,请参阅创建和使用 Spot 虚拟机。
- 将 Spot 虚拟机与 Vertex AI Training 搭配使用。