ローリング デプロイでは、デプロイされたモデルが同じモデルの新しいバージョンに置き換えられます。新しいモデルは、以前のモデルのコンピューティング リソースを再利用します。
ローリング デプロイ リクエストでは、トラフィック分割と dedicatedResources
の値は、以前のデプロイと同じです。ローリング デプロイが完了すると、トラフィック分割が更新され、以前の DeployedModel
からのすべてのトラフィックが新しいデプロイに移行したことが示されます。
DeployedModel
の他の構成可能なフィールド(serviceAccount
、disableContainerLogging
、enableAccessLogging
など)は、デフォルトで以前の 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)と空のレスポンスが返されます。
必要に応じて、次の例に示すように、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
は、以前のモデルと同じである必要があります。 - ローリング デプロイは、モデルの共同ホスティングに対応していません。
- オンライン説明が必要なモデルには、ローリング デプロイを使用できません。