ローリング デプロイでは、デプロイされたモデルが同じモデルの新しいバージョンに置き換えられます。新しいモデルは、以前のモデルのコンピューティング リソースを再利用します。
ローリング デプロイ リクエストでは、トラフィック分割と dedicatedResources
の値は前のデプロイと同じです。ローリング デプロイが完了すると、トラフィック分割が更新され、以前の DeployedModel
からのすべてのトラフィックが新しいデプロイに移行されたことが示されます。
DeployedModel
の他の構成可能なフィールド(serviceAccount
、disableContainerLogging
、enableAccessLogging
など)は、デフォルトで前の 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)と空のレスポンスが返されます。
必要に応じて、次の例に示すように、maxSurgeReplicas
と maxUnavailableReplicas
のいずれかまたは両方をパーセンテージ値に置き換えることができます。
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
が進行中のローリング デプロイ自体である場合は、その上に新しいローリング デプロイを作成できます。これにより、失敗し始めたデプロイをロールバックできます。 - ローリング デプロイが正常に完了しても、以前のモデルは自動的にデプロイ解除されません。モデルを手動でデプロイ解除できます。
- 共有パブリック エンドポイントでのローリング デプロイの場合、新しいモデルの
predictRoute
とhealthRoute
は、以前のモデルと同じである必要があります。 - ローリング デプロイは、モデルの共同ホスティングに対応していません。
- ローリング デプロイは、オンライン説明が必要なモデルには使用できません。