使用訓練的預留項目

本文說明如何使用 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 部署作業的定期更新,建議您為每個並行部署作業增加至少 1 個 VM。
  • 將 Compute Engine 預留資源用於 Vertex AI 訓練時,不支援下列服務和功能:

帳單

使用 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 說明文件中的「確認預留項目使用情形」。

建立含有預留項目的自訂訓練工作

使用 REST API 建立自訂訓練工作,耗用 GPU VM 的 Compute Engine 預留項目。

REST

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

  • LOCATION:容器或 Python 套件的執行區域。
  • PROJECT_ID:建立預留資源的專案。如要從其他專案使用共用的預留項目,請與該專案共用預留項目。詳情請參閱「 修改共用預留項目中的消費者專案」。
  • JOB_NAME:必填。CustomJob 的顯示名稱。
  • 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:預訂名稱。
    • DISK_TYPE:選用。用於工作的開機磁碟類型,可能是 pd-standard (預設) 或 pd-ssd進一步瞭解磁碟類型。
    • DISK_SIZE:選用。要用於這項工作的開機磁碟大小 (以 GB 為單位)。預設值為 100。
    • REPLICA_COUNT:要使用的工作站副本數量。在大多數情況下,請將此值設為 1,以用於第一個工作站集區
    • 如果訓練應用程式在自訂容器中執行,請指定下列項目:
      • CUSTOM_CONTAINER_IMAGE_URI:要在每個工作站副本上執行的 Artifact Registry 或 Docker Hub 容器映像檔 URI。
      • CUSTOM_CONTAINER_COMMAND:選用。容器啟動時要叫用的指令。這項指令會覆寫容器的預設進入點。
      • CUSTOM_CONTAINER_ARGS:選用。啟動容器時要傳遞的引數。
    • 如果訓練應用程式是可在預先建立的容器中執行的 Python 套件,請指定下列項目:
      • EXECUTOR_IMAGE_URI:執行所提供程式碼的容器映像檔 URI。請參閱可用的預先建構訓練容器
      • PYTHON_PACKAGE_URIS:以半形逗號分隔的 Cloud Storage URI 清單,指定訓練程式及其依附元件套件的 Python 套件檔案。套件 URI 數量上限為 100 個。
      • PYTHON_MODULE:安裝套件後要執行的 Python 模組名稱。
      • PYTHON_PACKAGE_ARGS:選用。要傳遞至 Python 模組的命令列引數。
    • TIMEOUT:選用。工作執行時間上限。
  • 為要套用至這項自訂工作的任何標籤指定 LABEL_NAMELABEL_VALUE

HTTP 方法和網址:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

JSON 要求主體:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "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"
            ]
          },
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

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

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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

回覆內容會包含規格資訊和 TRAININGPIPELINE_ID

後續步驟