将预留与预测搭配使用

为确保虚拟机资源在 Dataflow 作业需要时可用,您可以使用 Compute Engine 预留。预留为获取 Compute Engine 资源的容量提供了较高的保障。如需了解详情,请参阅 Compute Engine 可用区级资源的预留

概览

您的 Vertex AI 自定义训练和预测作业可以使用 Compute Engine 预留。您的预留必须指定 A2 或 A3 机器类型。如果这些预留的资源符合任何承诺使用折扣 (CUD) 的条件,那么当您的虚拟机使用这些预留资源时,您将以折扣价获得这些资源。请参阅预留资源的 CUD

限制和要求

将 Compute Engine 预留与 Vertex AI 搭配使用时,请考虑以下限制和要求:

  • Vertex AI 只能使用以下机器系列的预留:

    • A2
    • A3
  • 仅支持将 Compute Engine 预留与 Vertex AI 搭配使用来进行自定义训练和预测。
  • 确保您的 Vertex AI 作业有足够的配额。请参阅共享预留的其他配额要求
  • 为了支持定期更新 Vertex AI 部署,我们建议您为每个并发部署至少增加 1 个虚拟机。
  • 确保您的组织政策限制条件允许共享预留。请参阅允许和限制项目创建和修改共享预留
  • 您的预留的虚拟机实例属性必须与您的 Vertex AI 工作负载完全匹配,才能使用该预留。例如,如果 Vertex AI 工作负载具有 a2-megagpu-16g 机器类型,则预留的机器类型必须与之匹配。请参阅要求
  • 将 Compute Engine 预留与 Vertex AI 预测结合使用时,不支持以下服务和功能:

    • 客户管理的加密密钥 (CMEK)
    • 联邦风险和授权管理计划 (FedRAMP) 合规性

结算

使用 Compute Engine 预留时,您需要为以下各项支付费用:

  • Compute Engine 资源的 Compute Engine 价格,包括所有适用的承诺使用折扣 (CUD)。请参阅 Compute Engine 价格
  • 除基础设施使用费之外,还需支付 Vertex AI 预测管理费。请参阅预测价格

准备工作

允许使用预留

在使用 A2 或 A3 虚拟机的预留资源之前,您必须设置其共享政策,以允许 Vertex AI 使用该预留资源。为此,请使用以下方法之一:

在创建预留时允许使用

在创建 A2 或 A3 虚拟机的单个项目共享预留时,您可以指定允许 Vertex AI 使用预留,如下所示:

  • 如果您使用的是 Google Cloud 控制台,请在 Google Cloud 服务部分中选择共享预留
  • 如果您使用的是 Google Cloud CLI,请添加 --reservation-sharing-policy 标志并将其设置为 ALLOW_ALL
  • 如果您使用的是 REST API,请添加 serviceShareType 字段并将其设置为 ALLOW_ALL

允许在现有预留中使用

如需允许 Vertex AI 使用现有的 A2 或 A3 虚拟机预留,请参阅修改预留的共享政策

使用预留获取预测结果

如需在部署模型以获取预测结果时使用 Compute Engine 预留,您可以使用 REST API 或 Python 版 Vertex AI SDK。

REST

在使用任何请求数据之前,请先进行以下替换:

  • LOCATION_ID:您在其中使用 Vertex AI 的区域。
  • PROJECT_ID:您的项目 ID
  • ENDPOINT_ID:端点的 ID。
  • MODEL_ID:要部署的模型的 ID。
  • DEPLOYED_MODEL_NAMEDeployedModel 的名称。您还可以将 Model 的显示名用于 DeployedModel
  • MACHINE_TYPE:可选。用于此部署的每个节点的机器资源。其默认设置为 n1-standard-2详细了解机器类型。
  • RESERVATION_AFFINITY_TYPE:必须为 ANYSPECIFIC_RESERVATIONNONE
    • ANY 表示您的 customJob 的虚拟机可以自动使用具有匹配属性的任何预留。
    • SPECIFIC_RESERVATION 表示您的 customJob 的虚拟机只能使用虚拟机通过名称明确指向的预留。
    • NONE 表示 customJob 的虚拟机无法使用任何预留。指定 NONE 的效果与省略预留亲和性规范的效果相同。
  • RESERVATION_NAME:预留的名称。
  • 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/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

请求 JSON 正文:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "dedicatedResources": {
      "machineSpec": {
        "machineType": "MACHINE_TYPE",
        "reservationAffinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/reservations/RESERVATION_NAME"
          ]
        }
      },
      "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_ID/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,
    reservation_affinity_type="SPECIFIC_RESERVATION",
    reservation_affinity_key="compute.googleapis.com/reservation-name",
    reservation_affinity_values=["projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"],
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    sync=True
)

如需使用任何预留,请执行以下操作:

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,
    reservation_affinity_type="ANY_RESERVATION",
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    sync=True
)

后续步骤