将 Spot 虚拟机与预测功能搭配使用

概览

您可以使用 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_NAMEDeployedModel 的名称。您还可以将 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
)

后续步骤