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

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

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

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

  • 予約済みリソースはすぐに消費可能になり、予約が削除されるまで消費可能な状態に保たれます。
  • 予約済みリソースは、予約が削除されるまで、実行中の VM と同じオンデマンド料金(適用される割引を含む)で課金されます。予約を消費する VM に対して別途料金は発生しません。ディスクや IP アドレスなど、予約外のリソースに対してのみ料金が発生します。詳細については、予約の料金をご覧ください。

制限事項と要件

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

課金

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

始める前に

予約の消費を許可する

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

予約の作成中に消費を許可する

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

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

既存の予約の消費を許可する

GPU VM または TPU の自動作成された将来の予約は、予約の開始時間の後にのみ変更できます。

Agent Platform が既存の予約を消費できるようにするには、次のいずれかの 方法を使用します。

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

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

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

REST API を使用して、GPU VM の Compute Engine 予約を使用する Gemini Enterprise Agent Platform サーバーレス トレーニング ジョブを作成します。

REST

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

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

      • ANY_RESERVATION は、customJob の VM が、一致するプロパティを持つ予約を自動的に使用できることを意味します。
      • SPECIFIC_RESERVATION は、customJob の VM が、名前で明示的に指定された VM ターゲットの予約のみを使用できることを意味します。
      • NO_RESERVATION は、customJob の VM が予約を使用できないことを意味します。NO_RESERVATION を指定すると、予約アフィニティの指定を省略した場合と同じ効果があります。
    • 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: トレーニング プログラムとその依存パッケージである 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/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",
            // Use the following key and values only if
            // the reservationAffinityType is SPECIFIC_RESERVATION.
            "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 に関する情報が含まれています。

次のステップ