使用預留項目進行推論

本文說明如何使用 Compute Engine 預留項目,確保預測作業有足夠的虛擬機器 (VM) 資源可供執行。

預訂是 Compute Engine 的功能。這類保留項目可確保您在需要時,有資源可建立具有相同硬體 (記憶體和 vCPU) 和選用資源 (CPU、GPU、TPU 和本機 SSD 磁碟) 的 VM。

建立預留項目時,Compute Engine 會驗證指定區域是否提供要求的容量。如果是,Compute Engine 會預留資源、建立預留項目,並發生下列情況:

  • 您可以立即使用預留資源,而且預留資源將無限期維持可用,直到您將其刪除為止。
  • 在刪除預留資源前,系統會以與執行中 VM 相同的隨選費率向您收費,包括任何適用的折扣。使用預留項目的 VM 不會產生額外費用。您只需為預訂範圍外的資源付費,例如磁碟或 IP 位址。詳情請參閱「預留項目定價」。

限制與需求

將 Compute Engine 預留項目用於 Vertex AI 時,請注意下列限制和規定:

  • Vertex AI 只能使用 CPU (預先發布版)、GPU VMTPU (預先發布版) 的預留項目。
  • Vertex AI 無法使用手動附加本機 SSD 磁碟的 VM 預訂項目。
  • Vertex AI 僅支援搭配 Compute Engine 預留資源,用於自訂訓練和推論,以及 Vertex AI Workbench (搶先版)。
  • 如要使用預留項目,預留項目的 VM 屬性必須與 Vertex AI 工作負載完全相符。舉例來說,如果預留項目指定 a2-ultragpu-8g 機器類型,則 Vertex AI 工作負載也必須使用 a2-ultragpu-8g 機器類型,才能使用預留項目。請參閱「需求條件」。
  • 如要使用 GPU VM 或 TPU 的共用預留項目,必須透過擁有者專案或與預留項目共用的消費者專案使用。請參閱「 共用預留的運作方式」。
  • 為支援 Vertex AI 部署的定期更新,建議您根據 DeployedModel 使用的預訂類型,將 VM 數量增加至超過副本總數,如下所示:
    • SPECIFIC_RESERVATION:至少須指定 1 個額外 VM;建議指定 10% (但至少 1 個)。使用 SPECIFIC_RESERVATION 部署的模型保證只會使用預留項目的 VM。如果沒有額外的 VM,Vertex AI 就無法執行更新。
    • ANY
      • 不需要額外 VM,因為如果預留容量不足,使用預留資源部署的模型會使用隨選 VM。ANY不過,如果沒有額外的 VM,升級後可能無法充分運用預留項目。舉例來說,假設您有 40 部 VM 的預留項目,並使用該預留項目部署 40 個副本的模型。首次部署時,預留資源中的所有 40 個 VM 都會由 DeployedModel 使用。升級後,只有 36 個 VM 來自預留項目,4 個 VM 則是隨選。
      • 如要將使用量控制在預訂範圍內,建議您為每個使用預訂的 DeployedModelDeploymentResourcePool 至少額外保留 1 個 VM。如果預訂中相同類型的 VM 總數少於 50 個,建議您增加 10% (但至少 1 個)。ANY如果超過 50,建議增加 25%。例如:
        • 如果您打算使用 40 個 A3 VM 部署模型,可以建立 1 個含 44 個 VM 的 A3 預留項目,也可以建立 2 個 A3 預留項目:預留項目 X 含 30 個 VM,預留項目 Y 含 14 個 VM (總共 44 個)。只要這些預留項目都與 Vertex AI 共用,且這些預留項目中的 VM 總數至少為 44 個,其他預留項目數量也適用相同規定。
        • 如果您打算使用 100 個 A3 VM 部署模型,與 Vertex AI 共用的所有 A3 預留項目中,VM 總數應至少為 125 個。
        • 如果您打算使用 10 部 VM 部署 2 個模型,與 Vertex AI 共用的所有 A3 預留項目中,VM 總數應至少為 12 部。VM 數量少於 50 個,但額外 VM 數量為 2 個 (每個 DeployedModel 1 個)。
  • 如要使用 SPECIFIC_RESERVATION 預留項目,請在擁有預留項目的專案中,將 Compute Viewer 身分與存取權管理角色授予 Vertex AI 服務帳戶 (service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com,其中 PROJECT_NUMBER 是使用預留項目的專案編號)。
  • 使用 Compute Engine 預留資源搭配 Vertex AI 推論時,系統不支援下列服務和功能:

    • 聯邦風險與授權管理計畫 (FedRAMP) 法規遵循

帳單

使用 Compute Engine 預留資源時,系統會針對下列項目向您收費:

  • Compute Engine 資源的 Compute Engine 定價,包括任何適用的承諾使用折扣 (CUD)。請參閱 Compute Engine 定價
  • 除了基礎架構使用費,您還必須支付 Vertex AI 預測管理費。請參閱「預測服務定價」。

事前準備

允許使用預留項目

如要使用 CPU、GPU VM 或 TPU 的預留項目,請先設定共用政策,允許 Vertex AI 使用預留項目。方法如下:

允許在建立預留項目時使用

建立 GPU VM 的單一專案共用預留項目時,您可以允許 Vertex AI 使用預留項目,方法如下:

  • 如果您使用 Google Cloud 控制台,請在「Google Cloud 服務」部分選取「共用預訂」
  • 如果您使用 Google Cloud CLI,請加入設為 ALLOW_ALL--reservation-sharing-policy 旗標。
  • 如果您使用 REST API,請在要求內文中加入 serviceShareType 欄位,並將其設為 ALLOW_ALL

允許在現有預留項目中使用

只有在預留項目的開始時間過後,您才能修改 GPU VM 或 TPU 的自動建立預留項目,以供日後預留。

如要允許 Vertex AI 使用現有預留項目,請使用下列其中一種方法:

確認預留項目是否已使用

如要確認預留項目是否正在耗用,請參閱 Compute Engine 說明文件中的「確認預留項目使用情形」。

使用預留項目取得推論結果

如要建立模型部署作業,並使用 GPU VM 的 Compute Engine 預留項目,請使用 REST API 或 Vertex AI SDK for Python。

REST

使用任何要求資料之前,請先替換以下項目:

  • LOCATION_ID:您使用 Vertex AI 的區域。
  • PROJECT_ID:建立預留資源的專案。如要從其他專案使用共用的預留項目,請與該專案共用預留項目。詳情請參閱「 修改共用預留項目中的消費者專案」。
  • ENDPOINT_ID:端點的 ID。
  • MODEL_ID:要部署的模型 ID。
  • DEPLOYED_MODEL_NAMEDeployedModel 的名稱。您也可以使用 Model 的顯示名稱做為 DeployedModel
  • MACHINE_TYPE:用於此部署作業中每個節點的機器類型。預設設定為 n1-standard-2。如要進一步瞭解支援的機器類型,請參閱「設定預測的運算資源」。
  • ACCELERATOR_TYPE:要附加至機器的加速器類型。如要進一步瞭解各機器類型支援的 GPU 類型,請參閱「GPU 的運算工作負載比較」。
  • ACCELERATOR_COUNT:要附加至機器的加速器數量。
  • RESERVATION_AFFINITY_TYPE:必須是 ANYSPECIFIC_RESERVATIONNONE
    • ANY 表示 customJob 的 VM 可以自動使用任何屬性相符的預留項目。
    • SPECIFIC_RESERVATION 表示 customJob 的 VM 只能使用明確指定名稱的預留項目。
    • NONE 表示 customJob 的 VM 無法使用任何預留項目。指定 NONE 的效果與省略預留項目親和性規格相同。
  • ZONE:建立預留資源的可用區。
  • 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/v1/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",
        "acceleratorType": "ACCELERATOR_TYPE",
        "acceleratorCount": ACCELERATOR_COUNT,
        "reservationAffinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/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

如要瞭解如何安裝或更新 Python 適用的 Vertex AI SDK,請參閱「安裝 Python 適用的 Vertex AI SDK」。詳情請參閱 Python 適用的 Vertex AI SDK API 參考說明文件

執行下列任何指令碼之前,請先替換以下項目:

  • DEPLOYED_NAME:已部署模型的名稱。
  • TRAFFIC_SPLIT:已部署模型 ID 鍵的流量分配百分比值。
  • MACHINE_TYPE:用於此部署作業各節點的機器。預設設定為 n1-standard-2。進一步瞭解 機器類型
  • ACCELERATOR_TYPE:要附加至機器的加速器類型。如要進一步瞭解各機器類型支援的 GPU 類型,請參閱「 運算工作負載適用的 GPU」。
  • ACCELERATOR_COUNT:要附加至機器的加速器數量。
  • PROJECT_ID:建立預留資源的專案。如要從其他專案使用共用預留項目,必須先與該專案共用預留項目。詳情請參閱「 修改共用預留項目的消費者專案」。
  • ZONE:預留項目所在的可用區。
  • RESERVATION_NAME:預訂名稱。
  • MIN_REPLICA_COUNT:此部署作業的節點數量下限。節點數量可視推論負載需求增加或減少,最多可達節點數量上限,最少則不得低於這個數量。這個值必須大於或等於 1。
  • MAX_REPLICA_COUNT:此部署作業的節點數量上限。 節點數量可視推論負載需求增減,最多可達這個節點數量,且絕不會少於節點數量下限。

視要使用的預留項目類型而定,請執行下列其中一項操作:

  • 如要使用特定預留項目:
    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
    )

後續步驟