ローリング デプロイを使用してデプロイ済みモデルを置き換える

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

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

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

ローリング デプロイを使用してモデルをデプロイすると、新しい DeployedModel が作成されます。新しい DeployedModel は、以前の ID とは異なる新しい 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 は、以前のモデルと同じである必要があります。
  • ローリング デプロイは、モデルの共同ホスティングに対応していません。
  • オンライン説明が必要なモデルには、ローリング デプロイを使用できません。