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

このドキュメントでは、Compute Engine の予約を使用して、カスタム トレーニング ジョブに実行に必要なリソースがあることを高いレベルで保証する方法について説明します。

カスタム トレーニング ジョブで仮想マシン(VM)インスタンス リソースが必要なときに利用できるようにするには、Compute Engine の予約を使用します。予約を使用すると、指定したハードウェア構成で 1 つ以上の VM に容量を確実に確保できます。VM の予約を行うと、予約を作成した時点から削除するまでの VM の料金が発生します。ただし、その VM を使用している間、合計費用は予約のない VM と同じです。詳細については、Compute Engine ゾーンリソースの予約をご覧ください。

制限事項と要件

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

  • Vertex AI は、GPU が接続されている VM の予約のみを使用できます。
  • Vertex AI での Compute Engine 予約の使用は、カスタム トレーニングと予測でのみサポートされています。
  • 予約を使用するには、予約の VM プロパティが Vertex AI ワークロードと完全に一致している必要があります。たとえば、予約で a2-ultragpu-8g マシンタイプを指定した場合、Vertex AI ワークロードは a2-ultragpu-8g マシンタイプも使用している場合にのみ、予約を使用できます。要件をご覧ください。
  • GPU VM の共有予約を使用するには、オーナー プロジェクトまたは予約を共有するコンシューマ プロジェクトを使用して使用する必要があります。 共有予約の仕組みをご覧ください。
  • Vertex AI デプロイの定期的な更新をサポートするには、同時デプロイごとに VM 数を 1 つ以上増やすことをおすすめします。
  • Vertex AI トレーニングで 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 の既存の予約を使用できるようにするには、 予約の共有ポリシーを変更するをご覧ください。

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

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 に関する情報が含まれています。

次のステップ