ローリング デプロイを使用して、デプロイされたモデルを置き換える

ローリング デプロイでは、デプロイされたモデルが同じモデルの新しいバージョンに置き換えられます。新しいモデルは、以前のモデルのコンピューティング リソースを再利用します。

ローリング デプロイ リクエストでは、トラフィック分割と dedicatedResources の値は前のデプロイと同じです。ローリング デプロイが完了すると、トラフィック分割が更新され、以前の DeployedModel からのすべてのトラフィックが新しいデプロイに移行されたことが示されます。

DeployedModel の他の構成可能なフィールド(serviceAccountdisableContainerLoggingenableAccessLogging など)は、デフォルトで前の DeployedModel と同じ値に設定されます。ただし、これらのフィールドに新しい値を指定することもできます。

ローリング デプロイを使用してモデルをデプロイすると、新しい DeployedModel が作成されます。新しい DeployedModel は、以前のものとは異なる新しい ID を受け取ります。また、rolloutOptions フィールドで新しい revisionNumber 値も受け取ります。

同じバッキング リソースをターゲットとするローリング デプロイが複数ある場合、revisionNumber が最も高い DeployedModel が最終状態として扱われます。

ローリング デプロイが進行すると、以前の DeployedModel の既存のすべてのレプリカが新しい DeployedModel のレプリカに置き換えられます。この処理は迅速に行われ、デプロイに十分なレプリカがある場合や、追加のレプリカを起動するのに十分なサージ容量がある場合は、レプリカが更新されます。

また、ローリング デプロイが進行するにつれて、古い DeployedModel のトラフィックが新しい DeployedModel に段階的に移行されます。トラフィックは、各 DeployedModel のサービング準備完了レプリカの数に比例してロードバランスされます。

ローリング デプロイの新しいレプリカのヘルスルートが常に 200 以外のレスポンス コードを返すため、新しいレプリカが準備完了にならない場合、トラフィックは準備完了になっていないレプリカに送信されません。この場合、ローリング デプロイは最終的に失敗し、レプリカは以前の DeployedModel に戻ります。

ローリング デプロイを開始する

ローリング デプロイを開始するには、次の例に示すように、モデル デプロイ リクエストに rolloutOptions フィールドを含めます。

REST

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

  • LOCATION_ID: Vertex AI を使用するリージョン。
  • PROJECT_ID: 実際のプロジェクト ID
  • ENDPOINT_ID: エンドポイントの ID。
  • MODEL_ID: デプロイするモデルの ID。
  • PREVIOUS_DEPLOYED_MODEL: 同じエンドポイントにあるモデルの DeployedModel ID。これは、バッキング リソースを再利用する DeployedModel を指定します。GetEndpoint を呼び出すと、エンドポイントにデプロイされたモデルのリストと、その数値 ID を取得できます。
  • MAX_UNAVAILABLE_REPLICAS: ローリング デプロイ中に停止できるモデルレプリカの数。
  • MAX_SURGE_REPLICAS: ローリング デプロイ中に起動できる追加のモデルレプリカの数。ゼロに設定すると、既存の容量のみが使用されます。

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_ID/locations/LOCATION_ID/models/MODEL_ID",
    "rolloutOptions": {
      "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
      "maxUnavailableReplicas": "MAX_UNAVAILABLE_REPLICAS",
      "maxSurgeReplicas": "MAX_SURGE_REPLICAS"
    }
  }
}

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

成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。

必要に応じて、次の例に示すように、maxSurgeReplicasmaxUnavailableReplicas のいずれかまたは両方をパーセンテージ値に置き換えることができます。

REST

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

  • MAX_UNAVAILABLE_PERCENTAGE: ローリング デプロイ中に停止できるモデルレプリカの割合。
  • MAX_SURGE_PERCENTAGE: ローリング デプロイ中に起動できる追加のモデル レプリカの割合。ゼロに設定すると、既存の容量のみが使用されます。

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",
    "rolloutOptions": {
      "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
      "maxUnavailablePercentage": "MAX_UNAVAILABLE_PERCENTAGE",
      "maxSurgePercentage": "MAX_SURGE_PERCENTAGE"
    }
  }
}

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

成功したことを示すステータス コード(2xx)と空のレスポンスが返されます。

ローリング デプロイをロールバックする

ローリング デプロイをロールバックするには、進行中のローリング デプロイの DeployedModel ID を previousDeployedModel として使用して、以前のモデルの新しいローリング デプロイを開始します。

進行中のデプロイの DeployedModel ID を取得するには、次の例に示すように、GetEndpoint の呼び出しでパラメータ allDeploymentStates=true を設定します。

REST

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

  • LOCATION_ID: Vertex AI を使用するリージョン。
  • PROJECT_ID: 実際のプロジェクト ID
  • ENDPOINT_ID: エンドポイントの ID。

HTTP メソッドと URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID?allDeploymentStates=true

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

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID",
  "displayName": "rolling-deployments-endpoint",
  "deployedModels": [
    {
      "id": "2718281828459045",
      "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID@1",
      "displayName": "rd-test-model",
      "createTime": "2024-09-11T21:37:48.522692Z",
      "dedicatedResources": {
        "machineSpec": {
          "machineType": "e2-standard-2"
        },
        "minReplicaCount": 5,
        "maxReplicaCount": 5
      },
      "modelVersionId": "1",
      "state": "BEING_DEPLOYED"
    }
  ],
  "etag": "AMEw9yMs3TdZMn8CUg-3DY3wS74bkIaTDQhqJ7-Ld_Zp7wgT8gsEfJlrCOyg67lr9dwn",
  "createTime": "2024-09-11T21:22:36.588538Z",
  "updateTime": "2024-09-11T21:27:28.563579Z",
  "dedicatedEndpointEnabled": true,
  "dedicatedEndpointDns": "ENDPOINT_ID.LOCATION_ID-PROJECT_ID.prediction.vertexai.goog"
}

制約と制限

  • 以前の DeployedModel は、新しい DeployedModel と同じエンドポイントにある必要があります。
  • 同じ previousDeployedModel を使用して複数のローリング デプロイを作成することはできません。
  • 完全にデプロイされていない DeployedModel の上にローリング デプロイを作成することはできません。例外: previousDeployedModel が進行中のローリング デプロイ自体である場合は、その上に新しいローリング デプロイを作成できます。これにより、失敗し始めたデプロイをロールバックできます。
  • ローリング デプロイが正常に完了しても、以前のモデルは自動的にデプロイ解除されません。モデルを手動でデプロイ解除できます。
  • 共有パブリック エンドポイントでのローリング デプロイの場合、新しいモデルの predictRoutehealthRoute は、以前のモデルと同じである必要があります。
  • ローリング デプロイは、モデルの共同ホスティングに対応していません。
  • ローリング デプロイは、オンライン説明が必要なモデルには使用できません。