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

このドキュメントでは、Compute Engine の予約を使用して、カスタム トレーニング ジョブの実行に必要な仮想マシン(VM)リソースを確実に用意する方法について説明します。

予約は Compute Engine の機能です。予約を使用すると、必要なときに同じハードウェア(メモリと vCPU)とオプションのリソース(GPU とローカル SSD ディスク)を使用して VM を作成するためのリソースを確保できます。

予約を作成するときに、Compute Engine は、指定されたゾーンでリクエストされた容量が使用可能であることを確認します。使用可能な場合、Compute Engine はリソースを予約し、予約を作成します。これにより、次の処理が行われます。

  • 予約済みリソースはすぐに使用でき、予約を削除するまで使用可能となります。
  • 予約済みリソースは、予約が削除されるまで、実行中の VM と同じオンデマンド料金(適用される割引を含む)で課金されます。予約を使用する VM に対しては、別途料金は発生しません。詳細については、Compute Engine ゾーンリソースの予約をご覧ください。

制限事項と要件

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

  • Vertex AI は、GPU が接続されている VM の予約のみを使用できます。
  • Vertex AI は、ローカル SSD ディスクが手動でアタッチされている VM の予約を使用できません。
  • Vertex AI での Compute Engine 予約の使用は、カスタム トレーニングと予測でのみサポートされています。
  • 予約を消費するには、予約の VM プロパティが Vertex AI ワークロードと完全に一致している必要があります。たとえば、予約で a2-ultragpu-8g マシンタイプを指定した場合、Vertex AI ワークロードは a2-ultragpu-8g マシンタイプも使用している場合にのみ、予約を消費できます。要件をご覧ください。
  • GPU VM の共有予約を使用するには、オーナー プロジェクトまたは予約を共有するコンシューマ プロジェクトを使用して消費する必要があります。共有予約の仕組みをご覧ください。
  • Vertex AI デプロイの定期的な更新をサポートするには、同時デプロイごとに VM 数を 1 つ以上増やすことをおすすめします。
  • Vertex AI Training で Compute Engine 予約を使用する場合、次のサービスと機能はサポートされていません。

課金

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

始める前に

予約の使用を許可する

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

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

GPU VM の単一プロジェクトまたは共有予約を作成するときに、次のように Vertex AI が予約を消費することを許可できます。

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

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

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

予約が消費されていることを確認する

予約が消費されていることを確認するには、Compute Engine ドキュメントの予約の消費を確認するをご覧ください。

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

GPU VM の Compute Engine 予約を消費するカスタム トレーニング ジョブを作成するには、REST API を使用します。

REST

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

  • LOCATION: コンテナまたは Python パッケージを実行するリージョン。
  • PROJECT_ID: 予約が作成されたプロジェクト。別のプロジェクトの共有予約を消費するには、そのプロジェクトと予約を共有する必要があります。詳細については、共有予約内のコンシューマ プロジェクトを変更するをご覧ください。
  • JOB_NAME: 必須。CustomJob の表示名。
  • MACHINE_TYPE: ジョブに使用するマシンタイプ。デフォルトの設定は n1-standard-2 です。サポートされているマシンタイプの詳細については、カスタム トレーニング用のコンピューティング リソースの構成をご覧ください。
  • ACCELERATOR_TYPE: マシンに接続するアクセラレータのタイプ。各マシンタイプがサポートする GPU の種類の詳細については、コンピューティング ワークロード用 GPU をご覧ください。
  • ACCELERATOR_COUNT: マシンに接続するアクセラレータの数。
  • カスタム トレーニング ジョブを定義します。
    • 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",
          "acceleratorType": "ACCELERATOR_TYPE",
          "acceleratorCount": ACCELERATOR_COUNT,
          "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 に関する情報が含まれています。

次のステップ