予測で予約を使用する

予測ジョブで VM リソースが必要なときに利用できるようにするには、Compute Engine の予約を使用します。予約を使用すると、Compute Engine リソースのキャパシティを確実に確保できます。詳細については、Compute Engine ゾーンリソースの予約をご覧ください。

概要

Vertex AI のカスタム トレーニング ジョブと予測ジョブは、Compute Engine の予約を使用できます。予約では A2 または A3 マシンタイプを指定する必要があります。これらの予約のリソースが確約利用割引(CUD)の対象である場合、VM がこれらの予約を使用すると、割引価格でリソースが提供されます。予約済みリソースの CUD をご覧ください。

制限事項と要件

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

  • Vertex AI は、次のマシンシリーズの予約のみを使用できます。

    • A2
    • A3
  • Vertex AI での Compute Engine 予約の使用は、カスタム トレーニングと予測でのみサポートされています。
  • Vertex AI ジョブに十分な割り当てがあることを確認します。共有予約の追加の割り当て要件をご覧ください。
  • Vertex AI デプロイの定期的な更新をサポートするには、同時デプロイごとに VM 数を 1 つ以上増やすことをおすすめします。
  • 組織のポリシーの制約で共有予約が許可されていることを確認します。プロジェクトでの共有予約の作成と変更を許可または制限するをご覧ください。
  • 予約を使用するには、予約の VM インスタンス プロパティが Vertex AI ワークロードと完全に一致している必要があります。たとえば、Vertex AI ワークロードに a2-megagpu-16g マシンタイプがある場合、予約のマシンタイプはこれと一致する必要があります。要件をご覧ください。
  • Vertex AI 予測で Compute Engine 予約を使用する場合、次のサービスと機能はサポートされていません。

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

課金

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

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

始める前に

予約の使用を許可する

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

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

A2 VM または A3 VM の単一プロジェクトまたは共有予約を作成するときに、次のように Vertex AI が予約を使用できるように指定できます。

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

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

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

予約を使用して予測を取得する

モデルをデプロイして予測を取得するときに Compute Engine の予約を使用するには、REST API または Vertex AI SDK for Python を使用します。

REST

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

  • LOCATION_ID: Vertex AI を使用するリージョン。
  • PROJECT_ID: 実際のプロジェクト ID
  • ENDPOINT_ID: エンドポイントの ID。
  • MODEL_ID: デプロイするモデルの ID。
  • DEPLOYED_MODEL_NAME: DeployedModel の名前。DeployedModelModel の表示名を使用することもできます。
  • MACHINE_TYPE: 省略可。このデプロイの各ノードで使用するマシンリソース。デフォルトの設定は n1-standard-2 です。マシンタイプの詳細。
  • RESERVATION_AFFINITY_TYPE: ANYSPECIFIC_RESERVATION、または NONE
    • ANY は、customJob の VM が、一致するプロパティを持つ予約を自動的に使用できることを意味します。
    • SPECIFIC_RESERVATION は、customJob の VM が、名前で明示的に指定された VM ターゲットの予約のみを使用できることを意味します。
    • NONE は、customJob の VM が予約を使用できないことを意味します。NONE を指定すると、予約アフィニティの指定を省略した場合と同じ効果があります。
  • RESERVATION_NAME: 予約の名前。
  • 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/v1beta1/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",
        "reservationAffinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/reservations/RESERVATION_NAME"
          ]
        }
      },
      "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

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

特定の予約を使用するには:

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"],
    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
)

次のステップ