搭配批次推論使用預留項目

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

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

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

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

限制與需求

搭配使用 Compute Engine 預訂功能與 Vertex AI 時,請注意下列限制和規定:

  • Vertex AI 只能使用以下項目的預留項目: CPUGPU VM、 或 TPU (預先發布版)。
  • Vertex AI 無法使用手動附加本機 SSD 磁碟的 VM 預訂項目。
  • 使用 Compute Engine 預留資源搭配 Vertex AI 時,僅支援 Vertex AI 無伺服器訓練、推論和 Vertex AI Workbench (搶先版)。
  • 如要使用預留項目,預留項目的 VM 屬性必須與 Vertex AI 工作負載完全相符。舉例來說,如果預留項目指定 a2-ultragpu-8g 機器類型,則 Vertex AI 工作負載也必須使用 a2-ultragpu-8g 機器類型,才能使用預留項目。請參閱「需求條件」。
  • 如要使用 GPU VM 或 TPU 的共用預留項目,必須透過擁有者專案或與預留項目共用的消費者專案使用。請參閱「 共用預留項目的運作方式」。
  • 如要使用 SPECIFIC_RESERVATION 預留項目,請在擁有預留項目的專案中,將 Compute Viewer IAM 角色授予 Vertex AI 服務帳戶 (service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com,其中 PROJECT_NUMBER 是使用預留項目的專案編號)。
  • 搭配 Vertex AI 批次推論使用 Compute Engine 預留資源時,系統不支援下列服務和功能:

    • 聯邦風險與授權管理計畫 (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,並選擇 Cloud Storage 或 BigQuery 做為來源和目的地。

Cloud Storage

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

  • LOCATION_ID:模型儲存位置和批次預測工作執行位置的區域。例如:us-central1

  • PROJECT_ID:建立預留量的專案。如要使用其他專案的共用預留項目,請務必與該專案共用預留項目。詳情請參閱「 修改共用預留項目中的用戶專案」。

  • BATCH_JOB_NAME:批次預測工作的顯示名稱。

  • MODEL_ID:用於預測的模型 ID。

  • INPUT_FORMAT輸入資料的格式jsonlcsvtf-recordtf-record-gzipfile-list

  • INPUT_URI:輸入資料的 Cloud Storage URI。可包含萬用字元。

  • OUTPUT_DIRECTORY:您希望 Vertex AI 儲存輸出的目錄的 Cloud Storage URI。

  • MACHINE_TYPE:用於這項批次預測作業的機器資源

  • ACCELERATOR_TYPE:要附加至機器的加速器類型。如要進一步瞭解各機器類型支援的 GPU 類型,請參閱「GPU 的運算工作負載比較」。

  • ACCELERATOR_COUNT:要附加至機器的加速器數量。

  • RESERVATION_AFFINITY_TYPE:必須是 ANYSPECIFIC_RESERVATIONNONE

    • ANY 表示 customJob 的 VM 可以自動使用任何屬性相符的預留項目。
    • SPECIFIC_RESERVATION 表示 customJob 的 VM 只能使用明確指定名稱的預留項目。
    • NONE 表示 customJob 的 VM 無法使用任何預留項目。指定 NONE 的效果與省略預留項目親和性規格相同。
  • BATCH_SIZE:每次預測要求中要傳送的執行個體數量;預設為 64 個。增加批次大小可提高總處理量,但也可能導致要求逾時。

  • STARTING_REPLICA_COUNT:這項批次預測作業的節點數量。

HTTP 方法和網址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

JSON 要求內文:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "INPUT_FORMAT",
    "gcsSource": {
      "uris": ["INPUT_URI"],
    },
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY",
    },
  },
  "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"
        ]
      }
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT
  },
  "manualBatchTuningParameters": {
    "batch_size": BATCH_SIZE,
  }
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求內文儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content

您應該會收到如下的 JSON 回覆:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",
  "displayName": "BATCH_JOB_NAME 202005291958",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "jsonl",
    "gcsSource": {
      "uris": [
        "INPUT_URI"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
}

BigQuery

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

  • LOCATION_ID:模型儲存位置和批次預測工作執行位置的區域。例如:us-central1

  • PROJECT_ID:建立預留量的專案。如要使用其他專案的共用預留項目,請務必與該專案共用預留項目。詳情請參閱「 修改共用預留項目中的用戶專案」。

  • BATCH_JOB_NAME:批次預測工作的顯示名稱。

  • MODEL_ID:用於進行預測的模型 ID。

  • INPUT_PROJECT_ID:您要從中取得資料的 Google Cloud 專案 ID。

  • INPUT_DATASET_NAME:要從中取得資料的 BigQuery 資料集名稱。

  • INPUT_TABLE_NAME:要從中取得資料的 BigQuery 資料表名稱。

  • OUTPUT_PROJECT_ID:您要儲存輸出內容的 Google Cloud 專案 ID。

  • OUTPUT_DATASET_NAME:要儲存輸出內容的目的地 BigQuery 資料集名稱。

  • OUTPUT_TABLE_NAME:要儲存輸出的 BigQuery 目的地資料表名稱。

  • MACHINE_TYPE:用於這項批次預測作業的機器資源

  • ACCELERATOR_TYPE:要附加至機器的加速器類型。如要進一步瞭解各機器類型支援的 GPU 類型,請參閱「GPU 的運算工作負載比較」。

  • ACCELERATOR_COUNT:要附加至機器的加速器數量。

  • RESERVATION_AFFINITY_TYPE:必須是 ANYSPECIFIC_RESERVATIONNONE

    • ANY 表示 customJob 的 VM 可以自動使用任何屬性相符的預留項目。
    • SPECIFIC_RESERVATION 表示 customJob 的 VM 只能使用明確指定名稱的預留項目。
    • NONE 表示 customJob 的 VM 無法使用任何預留項目。指定 NONE 的效果與省略預留項目親和性規格相同。
  • BATCH_SIZE:每次預測要求中要傳送的執行個體數量;預設為 64 個。增加批次大小可提高總處理量,但也可能導致要求逾時。

  • STARTING_REPLICA_COUNT:這項批次預測作業的節點數量。

HTTP 方法和網址:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

JSON 要求內文:

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://INPUT_PROJECT_ID.INPUT_DATASET_NAME.INPUT_TABLE_NAME"
    },
  },
  "outputConfig": {
    "predictionsFormat":"bigquery",
    "bigqueryDestination":{
      "outputUri": "bq://OUTPUT_PROJECT_ID.OUTPUT_DATASET_NAME.OUTPUT_TABLE_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"
        ]
      }
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT
  },
  "manualBatchTuningParameters": {
    "batch_size": BATCH_SIZE,
  }
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求內文儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content

您應該會收到如下的 JSON 回覆:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",
  "displayName": "BATCH_JOB_NAME 202005291958",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "jsonl",
    "bigquerySource": {
      "uris": [
        "INPUT_URI"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "bigqueryDestination": {
      "outputUri": "OUTPUT_URI"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
}

擷取批次推論結果

批次推論工作完成後,推論的輸出內容會儲存在您於要求中指定的 Cloud Storage bucket 或 BigQuery 位置。

後續步驟