オンライン推論で予約を使用する

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

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

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

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

制限事項と要件

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

  • Agent Platform は、 CPUGPU VM、 または TPUプレビュー)の予約のみを使用できます。
  • Agent Platform は、ローカル SSD ディスクが手動でアタッチされている VM の予約を消費できません。
  • Agent Platform による Compute Engine の予約の使用は、Gemini Enterprise Agent Platform サーバーレス トレーニング、推論、Gemini Enterprise Agent Platform Workbench(プレビュー)でのみサポートされています。
  • 予約を消費するには、予約の VM プロパティが Agent Platform ワークロードと完全に一致している必要があります 。たとえば、予約で a2-ultragpu-8g マシンタイプを指定した場合、Agent Platform ワークロードも a2-ultragpu-8g マシンタイプを使用している場合にのみ予約を消費できます。要件をご覧ください。
  • GPU VM または TPU の共有予約を消費するには、オーナー プロジェクト、または予約を共有しているコンシューマ プロジェクトを使用する必要があります。 共有予約の仕組みをご覧ください。
    • Agent Platform デプロイの定期的な更新をサポートするには、`DeployedModel` で使用される予約タイプに応じて、次のようにレプリカの合計数よりも VM 数を増やすことをおすすめします。DeployedModel
    • SPECIFIC_RESERVATION: 少なくとも 1 つの追加 VM を指定する必要があります。we おすすめします 10%(ただし、少なくとも 1 つ)。SPECIFIC_RESERVATION を使用してデプロイされたモデルは、予約からの VM のみを消費することが保証されます。追加の VM がない場合、Agent Platform は 更新を実行できません。
    • ANY:
      • ANY 予約を使用するデプロイされたモデルは、予約容量が不足している場合、オンデマンド VM を使用するため、追加の VM は必要ありません。ただし、VM を追加しないと、アップグレード後に予約が十分に活用されない可能性があります。たとえば、40 個の VM を含む予約があり、その予約を使用して 40 個のレプリカを含むモデルをデプロイするとします。初回デプロイ時には、予約内の 40 個の VM がすべて DeployedModel によって使用されます。アップグレード後、予約から 36 個の VM、オンデマンドで 4 個の VM が使用されます。
      • 予約内の使用量を維持する場合は、予約を使用する DeployedModel または DeploymentResourcePool ごとに少なくとも 1 個の追加 VM を用意することをおすすめします。ANY 予約内の同じタイプの VM の合計数が 50 個未満の場合は、10%(ただし、少なくとも 1 個)増やすことをおすすめします。50 個を超える場合は、25% 増やすことをおすすめします。例:
        • 40 個の A3 VM を使用してモデルをデプロイする場合は、 44 個の VM を含む 1 つの A3 予約、または 2 つの A3 予約(30 個の VM を含む予約 X と 14 個の VM を含む予約 Y、合計 44 個の VM)を作成できます。他の数の予約についても、すべてが Agent Platform と共有され、これらの予約の VM の合計数が 44 個以上であれば、同様のことが当てはまります。
        • 100 個の A3 VM を使用してモデルをデプロイする場合は、Agent Platform と共有されているすべての A3 予約の VM の合計数が 125 個以上である必要があります。
        • 10 個の VM を使用して 2 つのモデルをデプロイする場合は、Agent Platform と共有されているすべての A3 予約の VM の合計数が 12 個以上である必要があります。VM の数は 50 個未満ですが、追加の VM の数は 2 (DeployedModel あたり 1 個)です。
  • SPECIFIC_RESERVATION 予約を消費するには、予約を所有するプロジェクトの Agent Platform サービス アカウントに Compute 閲覧者 IAM ロールを付与します(service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com。 ここで PROJECT_NUMBER は予約を消費するプロジェクトのプロジェクト番号です)。

課金

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

  • 適用される確約利用割引(CUD)を含む、Compute Engine リソースの Compute Engine の料金。 Compute Engine の料金をご覧ください。
  • インフラストラクチャの使用料に加えて、Agent Platform オンライン推論の管理手数料。予測の料金をご覧ください。

始める前に

予約の消費を許可する

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 が既存の予約を消費できるようにするには、次のいずれかの 方法を使用します。

複数の特定の予約の消費を許可する

予約アフィニティの指定の values フィールド の予約名のリストに、優先順位で 2 つ以上の 予約を指定することで、複数の特定の予約の消費を許可できます。優先順位順にリストする必要があります。

各予約は Vertex と共有する必要があり、予約のゾーンはエンドポイントの リージョン内にある必要があります。それ以外の場合は、ソース プロジェクトと複数の ゾーンにまたがって予約を混在させることができます。

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

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

予約を使用してオンライン推論を取得する

GPU VM の Compute Engine 予約を使用するモデルのデプロイを作成するには、REST API または Agent Platform SDK for Python を使用します。

REST

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

  • LOCATION_ID: Agent Platform を使用しているリージョン。
  • PROJECT_ID: 予約が作成されたプロジェクト。別のプロジェクトの共有予約を使用するには、そのプロジェクトと予約を共有する必要があります。詳細については、共有予約内のコンシューマ プロジェクトを変更するをご覧ください。
  • ENDPOINT_ID: エンドポイントの ID。
  • MODEL_ID: デプロイするモデルの ID。
  • DEPLOYED_MODEL_NAME: DeployedModel の名前。DeployedModelModel の表示名を使用することもできます。
  • 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 を指定すると、予約アフィニティの指定を省略した場合と同じ効果があります。
  • ZONE: 予約が作成されたゾーン。
  • RESERVATION_NAME_N:予約の名前(優先順)。 それぞれ、予約または予約ブロックの完全なリソース名である必要があります。
  • MIN_REPLICA_COUNT: このデプロイの最小ノード数。 ノード数は、推論負荷に応じてノードの最大数まで増減できますが、この数より少なくすることはできません。1 以上の値を指定してください。
  • MAX_REPLICA_COUNT: このデプロイの最大ノード数。ノード数は、推論負荷に応じてこのノード数まで増減に応じて増減できますが、最大値を超えることはできません。
  • TRAFFIC_SPLIT_THIS_MODEL: このオペレーションでデプロイするモデルにルーティングされる、このエンドポイントへの予測トラフィックの割合。デフォルトは 100 です。すべてのトラフィックの割合の合計は 100 になる必要があります。トラフィック分割の詳細
  • DEPLOYED_MODEL_ID_N: 省略可。他のモデルがこのエンドポイントにデプロイされている場合は、すべての割合の合計が 100 になるように、トラフィック分割の割合を更新する必要があります。
  • TRAFFIC_SPLIT_MODEL_N: デプロイされたモデル ID キーのトラフィック分割の割合値。
  • PROJECT_NUMBER: プロジェクトに自動生成されたプロジェクト番号

HTTP メソッドと URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

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

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_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_1",
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_2"
          ]
        }
      },
      "minReplicaCount": MIN_REPLICA_COUNT,
      "maxReplicaCount": MAX_REPLICA_COUNT
    },
  },
  "trafficSplit": {
    "0": TRAFFIC_SPLIT_THIS_MODEL,
    "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
    "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
  },
}

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

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-10-19T17:53:16.502088Z",
      "updateTime": "2020-10-19T17:53:16.502088Z"
    }
  }
}

Python

Agent Platform SDK for Python のインストールまたは更新の方法については、 Agent Platform SDK for Python をインストールするをご覧ください。 詳細については、 Agent Platform SDK for Python API のリファレンス ドキュメントをご覧ください

次のいずれかのスクリプトを実行する前に、次のように置き換えます。

  • DEPLOYED_NAME: デプロイされたモデルの名前。
  • TRAFFIC_SPLIT: デプロイされたモデル ID キーのトラフィック分割の割合値。
  • MACHINE_TYPE: このデプロイの各ノードで使用するマシン。デフォルトの設定は n1-standard-2 です。マシンタイプの詳細をご覧ください。
  • ACCELERATOR_TYPE: マシンに接続するアクセラレータのタイプ。各マシンタイプがサポートする GPU の種類の詳細については、コンピューティング ワークロード用 GPU をご覧ください。
  • ACCELERATOR_COUNT: マシンに接続するアクセラレータの数。
  • PROJECT_ID: 予約が作成されたプロジェクト。 別のプロジェクトの共有予約を消費するには、そのプロジェクトと予約を共有する必要があります。詳細については、共有予約内のコンシューマ プロジェクトを変更するをご覧ください。
  • ZONE: 予約が配置されているゾーン。
  • RESERVATION_NAME_N:予約の名前(優先順)。 それぞれ、予約または予約ブロックの完全なリソース名である必要があります。
  • MIN_REPLICA_COUNT: このデプロイの最小ノード数。 ノード数は、推論負荷に応じてノードの最大数まで増減できますが、この数より少なくすることはできません。1 以上の値を指定してください。
  • MAX_REPLICA_COUNT: このデプロイの最大ノード数。ノード数は、推論負荷に応じてこのノード数まで増減に応じて増減できますが、最大値を超えることはできません。

使用する予約のタイプに応じて、次のいずれかを行います。

  • 1 つ以上の特定の予約を消費するには:
    endpoint5.deploy(
        model = model,
        deployed_model_display_name=DEPLOYED_NAME,
        traffic_split=TRAFFIC_SPLIT,
        machine_type="MACHINE_TYPE",
        accelerator_type="ACCELERATOR_TYPE",
        accelerator_count=ACCELERATOR_COUNT,
        reservation_affinity_type="SPECIFIC_RESERVATION",
        reservation_affinity_key="compute.googleapis.com/reservation-name",
        reservation_affinity_values=[
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_1",
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_2"
            ],
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )
  • 自動的に使用される予約を使用するには:
    endpoint5.deploy(
        model = model,
        deployed_model_display_name=DEPLOYED_NAME,
        traffic_split=TRAFFIC_SPLIT,
        machine_type="MACHINE_TYPE",
        accelerator_type="ACCELERATOR_TYPE",
        accelerator_count=ACCELERATOR_COUNT,
        reservation_affinity_type="ANY_RESERVATION",
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )

次のステップ