在滚动部署中,已部署的模型会被同一模型的新版本替换。新模型会重复使用上一个模型的计算资源。
在滚动部署请求中,流量分配和 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 方法和网址:
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 方法和网址:
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 方法和网址:
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
必须与之前的模型相同。 - 滚动部署与模型共享托管不兼容。
- 滚动部署不适用于需要在线说明的模型。