バッチ推論で予約を使用する

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

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

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

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

制限事項と要件

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

  • Vertex AI は、CPUGPU VM、または TPUプレビュー)の予約のみを使用できます。
  • 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 の共有予約を使用するには、オーナー プロジェクトまたは予約を共有するコンシューマ プロジェクトを使用して消費する必要があります。共有予約の仕組みをご覧ください。
  • SPECIFIC_RESERVATION 予約を使用するには、予約を所有するプロジェクトの Vertex AI サービス アカウントに Compute 閲覧者 IAM ロールを付与します(service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com。ここで、PROJECT_NUMBER は予約を使用するプロジェクトのプロジェクト番号です)。
  • Vertex AI バッチ推論で Compute Engine 予約を使用する場合、次のサービスと機能はサポートされていません。

    • 米国連邦政府によるリスクおよび認証管理プログラム(FedRAMP)への準拠

課金

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

  • 適用される確約利用割引(CUD)を含む、Compute Engine リソースの Compute Engine の料金。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 を使用している場合は、リクエスト本文に ALLOW_ALL に設定された serviceShareType フィールドを含めます。

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

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

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

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

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

予約を使用してバッチ推論を取得する

GPU VM の Compute Engine 予約を使用するバッチ推論リクエストを作成するには、REST API を使用して、ソースと宛先に Cloud Storage または BigQuery のいずれかを選択します。

Cloud Storage

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

  • LOCATION_ID: モデルが保存され、バッチ予測ジョブが実行されるリージョン。例: us-central1

  • PROJECT_ID: 予約が作成されたプロジェクト。別のプロジェクトの共有予約を使用するには、そのプロジェクトと予約を共有する必要があります。詳細については、 共有予約内のコンシューマ プロジェクトを変更するをご覧ください。

  • BATCH_JOB_NAME: バッチ予測ジョブの表示名。

  • MODEL_ID: 予測に使用するモデルの ID。

  • INPUT_FORMAT: 入力データの形式: jsonlcsvtf-recordtf-record-gzipfile-list のいずれかになります。

  • INPUT_URI: 入力データの Cloud Storage URI。ワイルドカードを含む可能性があります。

  • OUTPUT_DIRECTORY: Vertex AI が出力を保存するディレクトリの Cloud Storage URI。

  • MACHINE_TYPE: このバッチ予測ジョブに使用されるマシンリソース

  • ACCELERATOR_TYPE: マシンに接続するアクセラレータのタイプ。各マシンタイプがサポートする GPU の種類の詳細については、コンピューティング ワークロード用 GPU をご覧ください。

  • ACCELERATOR_COUNT: マシンに接続するアクセラレータの数。

  • RESERVATION_AFFINITY_TYPE: ANYSPECIFIC_RESERVATION、または NONE

    • ANY は、customJob の VM が、一致するプロパティを持つ予約を自動的に使用できることを意味します。
    • SPECIFIC_RESERVATION は、customJob の VM が、名前で明示的に指定された VM ターゲットの予約のみを使用できることを意味します。
    • NONE は、customJob の VM が予約を使用できないことを意味します。NONE を指定すると、予約アフィニティの指定を省略した場合と同じ効果があります。
  • BATCH_SIZE: 予測リクエストごとに送信するインスタンスの数。デフォルトは 64 です。バッチサイズを増やすとスループットは向上しますが、リクエストがタイムアウトする可能性もあります。

  • STARTING_REPLICA_COUNT: このバッチ予測ジョブのノード数。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

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

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "INPUT_FORMAT",
    "gcsSource": {
      "uris": ["INPUT_URI"],
    },
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY",
    },
  },
  "dedicatedResources" : {
    "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"
        ]
      }
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT
  },
  "manualBatchTuningParameters": {
    "batch_size": BATCH_SIZE,
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

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

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",
  "displayName": "BATCH_JOB_NAME 202005291958",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "jsonl",
    "gcsSource": {
      "uris": [
        "INPUT_URI"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "gcsDestination": {
      "outputUriPrefix": "OUTPUT_DIRECTORY"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
}

BigQuery

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

  • LOCATION_ID: モデルが保存され、バッチ予測ジョブが実行されるリージョン。例: us-central1

  • PROJECT_ID: 予約が作成されたプロジェクト。別のプロジェクトの共有予約を使用するには、そのプロジェクトと予約を共有する必要があります。詳細については、 共有予約内のコンシューマ プロジェクトを変更するをご覧ください。

  • BATCH_JOB_NAME: バッチ予測ジョブの表示名。

  • MODEL_ID: 予測に使用するモデルの ID。

  • INPUT_PROJECT_ID: データの取得元となる Google Cloud プロジェクトの ID。

  • INPUT_DATASET_NAME: データの取得元となる BigQuery データセットの名前。

  • INPUT_TABLE_NAME: データの取得元となる BigQuery テーブルの名前。

  • OUTPUT_PROJECT_ID: 出力を保存する Google Cloud プロジェクトの ID。

  • OUTPUT_DATASET_NAME: 出力を保存する出力先 BigQuery データセットの名前。

  • OUTPUT_TABLE_NAME: 出力を保存する BigQuery 出力先テーブルの名前。

  • MACHINE_TYPE: このバッチ予測ジョブに使用されるマシンリソース

  • ACCELERATOR_TYPE: マシンに接続するアクセラレータのタイプ。各マシンタイプがサポートする GPU の種類の詳細については、コンピューティング ワークロード用 GPU をご覧ください。

  • ACCELERATOR_COUNT: マシンに接続するアクセラレータの数。

  • RESERVATION_AFFINITY_TYPE: ANYSPECIFIC_RESERVATION、または NONE

    • ANY は、customJob の VM が、一致するプロパティを持つ予約を自動的に使用できることを意味します。
    • SPECIFIC_RESERVATION は、customJob の VM が、名前で明示的に指定された VM ターゲットの予約のみを使用できることを意味します。
    • NONE は、customJob の VM が予約を使用できないことを意味します。NONE を指定すると、予約アフィニティの指定を省略した場合と同じ効果があります。
  • BATCH_SIZE: 予測リクエストごとに送信するインスタンスの数。デフォルトは 64 です。バッチサイズを増やすとスループットは向上しますが、リクエストがタイムアウトする可能性もあります。

  • STARTING_REPLICA_COUNT: このバッチ予測ジョブのノード数。

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs

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

{
  "displayName": "BATCH_JOB_NAME",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "bigquery",
    "bigquerySource": {
      "inputUri": "bq://INPUT_PROJECT_ID.INPUT_DATASET_NAME.INPUT_TABLE_NAME"
    },
  },
  "outputConfig": {
    "predictionsFormat":"bigquery",
    "bigqueryDestination":{
      "outputUri": "bq://OUTPUT_PROJECT_ID.OUTPUT_DATASET_NAME.OUTPUT_TABLE_NAME"
    }
  },
  "dedicatedResources" : {
    "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"
        ]
      }
    },
    "startingReplicaCount": STARTING_REPLICA_COUNT
  },
  "manualBatchTuningParameters": {
    "batch_size": BATCH_SIZE,
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"

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

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID",
  "displayName": "BATCH_JOB_NAME 202005291958",
  "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
  "inputConfig": {
    "instancesFormat": "jsonl",
    "bigquerySource": {
      "uris": [
        "INPUT_URI"
      ]
    }
  },
  "outputConfig": {
    "predictionsFormat": "jsonl",
    "bigqueryDestination": {
      "outputUri": "OUTPUT_URI"
    }
  },
  "state": "JOB_STATE_PENDING",
  "createTime": "2020-05-30T02:58:44.341643Z",
  "updateTime": "2020-05-30T02:58:44.341643Z",
}

バッチ推論の結果を取得する

バッチ推論タスクが完了すると、リクエストで指定した Cloud Storage バケットまたは BigQuery のロケーションに推論の出力が保存されます。

次のステップ