トレーニングで予約を使用する

カスタム トレーニング ジョブで VM リソースが必要なときに利用できるようにするには、Compute Engine の予約を使用します。予約を使用すると、Compute Engine リソースのキャパシティを確実に確保できます。詳細については、Compute Engine ゾーンリソースの予約をご覧ください。

概要

Vertex AI のカスタム トレーニング ジョブと予測ジョブは、Compute Engine の予約を使用できます。予約では A2 または A3 マシンタイプを指定する必要があります。これらの予約のリソースが確約利用割引(CUD)の対象である場合、VM がこれらの予約を使用すると、割引価格でリソースが提供されます。予約済みリソースの CUD をご覧ください。

制限事項と要件

Vertex AI で Compute Engine 予約を使用する場合は、次の制限と要件を考慮してください。

  • Vertex AI は、次のマシンシリーズの予約のみを使用できます。

    • A2
    • A3
  • Vertex AI での Compute Engine 予約の使用は、カスタム トレーニングと予測でのみサポートされています。
  • Vertex AI ジョブに十分な割り当てがあることを確認します。共有予約の追加の割り当て要件をご覧ください。
  • Vertex AI デプロイの定期的な更新をサポートするには、同時デプロイごとに VM 数を 1 つ以上増やすことをおすすめします。
  • 組織のポリシーの制約で共有予約が許可されていることを確認します。プロジェクトでの共有予約の作成と変更を許可または制限するをご覧ください。
  • 予約を使用するには、予約の VM インスタンス プロパティが Vertex AI ワークロードと完全に一致している必要があります。たとえば、Vertex AI ワークロードに a2-megagpu-16g マシンタイプがある場合、予約のマシンタイプはこれと一致する必要があります。要件をご覧ください。
  • Vertex AI Training で Compute Engine 予約を使用する場合、次のサービスと機能はサポートされていません。

課金

Compute Engine 予約を使用すると、次の料金が発生します。

始める前に

予約の使用を許可する

A2 VM または A3 VM の予約を使用する前に、Vertex AI が予約を使用できるように共有ポリシーを設定する必要があります。そのためには、次のいずれかの方法を使用します。

予約の作成中に使用を許可する

A2 VM または A3 VM の単一プロジェクトまたは共有予約を作成するときに、次のように Vertex AI が予約を使用できるように指定できます。

  • Google Cloud コンソールを使用している場合は、[Google Cloud サービス] セクションで [予約を共有する] を選択します。
  • Google Cloud CLI を使用している場合は、ALLOW_ALL に設定された --reservation-sharing-policy フラグを指定します。
  • REST API を使用している場合は、ALLOW_ALL に設定された serviceShareType フィールドを含めます。

既存の予約で使用を許可する

Vertex AI が A2 VM または A3 VM の既存の予約を使用できるようにするには、予約の共有ポリシーを変更するをご覧ください。

予約を使用してカスタム トレーニング ジョブを作成する

REST API を使用して、Compute Engine 予約を使用するカスタム トレーニング ジョブを作成できます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: コンテナまたは Python パッケージを実行するリージョン。
  • PROJECT_ID: 実際のプロジェクト ID
  • JOB_NAME: 必須。CustomJob の表示名。
  • カスタム トレーニング ジョブを定義します。
    • MACHINE_TYPE: マシンのタイプ。トレーニングで使用可能なマシンタイプをご覧ください。
    • RESERVATION_AFFINITY_TYPE: ANYSPECIFIC_RESERVATION、または NONE

      • ANY は、customJob の VM が、一致するプロパティを持つ予約を自動的に使用できることを意味します。
      • SPECIFIC_RESERVATION は、customJob の VM が、名前で明示的に指定された VM ターゲットの予約のみを使用できることを意味します。
      • NONE は、customJob の VM が予約を使用できないことを意味します。NONE を指定すると、予約アフィニティの指定を省略した場合と同じ効果があります。
    • 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: トレーニング プログラムとその依存パッケージである Python パッケージ ファイルを指定する Cloud Storage URI のカンマ区切りのリスト。パッケージ URI の最大数は 100 です。
      • PYTHON_MODULE: パッケージのインストール後に実行する Python モジュール名。
      • PYTHON_PACKAGE_ARGS: 省略可。Python モジュールに渡すコマンドライン引数。
    • TIMEOUT: 省略可。ジョブの最大実行時間。
  • このカスタムジョブに適用するラベルの LABEL_NAMELABEL_VALUE を指定します。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "MACHINE_TYPE",
          "reservationAffinity": {
            "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
            "key": "compute.googleapis.com/reservation-name",
            "values": [
              "projects/PROJECT_ID/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/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

レスポンスには、仕様と TRAININGPIPELINE_ID に関する情報が含まれています。

次のステップ