En una implementación gradual, un modelo implementado se sustituye por una nueva versión del mismo modelo. El nuevo modelo reutiliza los recursos de computación del anterior.
En la solicitud de lanzamiento gradual, los valores de división del tráfico y dedicatedResources
son los mismos que en el lanzamiento anterior. Una vez que se haya completado la implementación gradual, se actualizará la división del tráfico para mostrar que todo el tráfico del DeployedModel
anterior se ha migrado a la nueva implementación.
Otros campos configurables de DeployedModel
(como serviceAccount
,
disableContainerLogging
y enableAccessLogging
) tienen los mismos valores que el DeployedModel
anterior de forma predeterminada. Sin embargo, puede especificar nuevos valores para estos campos.
Cuando se implementa un modelo mediante una implementación gradual, se crea un nuevo DeployedModel
. El nuevo DeployedModel
recibe un ID diferente al del anterior. También recibe un nuevo valor revisionNumber
en el campo rolloutOptions
.
Si hay varias implementaciones continuas dirigidas a los mismos recursos de respaldo, se considera que la DeployedModel
con el revisionNumber
más alto es el estado final previsto.
A medida que avanza la implementación gradual, todas las réplicas de la versión anterior de DeployedModel
se sustituyen por réplicas de la nueva versión de DeployedModel
. Esto ocurre rápidamente y las réplicas se actualizan cuando la implementación tiene suficientes réplicas disponibles o suficiente capacidad de aumento para crear réplicas adicionales.
Además, a medida que avanza la implementación gradual, el tráfico de la versión antigua DeployedModel
se migra gradualmente a la nueva DeployedModel
. El tráfico se equilibra en proporción al número de réplicas listas para servir de cada DeployedModel
.
Si las nuevas réplicas de la implementación continua nunca están listas porque su ruta de comprobación de estado devuelve constantemente un código de respuesta distinto de 200, el tráfico no se envía a esas réplicas no listas. En este caso, la implementación continua acabará fallando y las réplicas volverán al DeployedModel
anterior.
Iniciar un despliegue continuo
Para iniciar una implementación continua, incluya el campo rolloutOptions
en la solicitud de implementación del modelo, como se muestra en el siguiente ejemplo.
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- LOCATION_ID: la región en la que usas Vertex AI.
- PROJECT_ID: tu ID de proyecto.
- ENDPOINT_ID: ID del endpoint.
- MODEL_ID: ID del modelo que se va a implementar.
-
PREVIOUS_DEPLOYED_MODEL: el ID
DeployedModel
de un modelo en el mismo endpoint. Especifica elDeployedModel
cuyos recursos subyacentes se van a reutilizar. Puedes llamar aGetEndpoint
para obtener una lista de los modelos implementados en un endpoint junto con sus IDs numéricos. - MAX_UNAVAILABLE_REPLICAS: número de réplicas del modelo que se pueden retirar durante la implementación gradual.
- MAX_SURGE_REPLICAS: número de réplicas de modelo adicionales que se pueden poner en marcha durante la implementación gradual. Si se asigna el valor cero, solo se usará la capacidad actual.
Método HTTP y URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
Cuerpo JSON de la solicitud:
{ "deployedModel": { "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "rolloutOptions": { "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL", "maxUnavailableReplicas": "MAX_UNAVAILABLE_REPLICAS", "maxSurgeReplicas": "MAX_SURGE_REPLICAS" } } }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.
Si quieres, puedes sustituir maxSurgeReplicas
y maxUnavailableReplicas
, o ambos, por valores porcentuales, como se muestra en el siguiente ejemplo.
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- MAX_UNAVAILABLE_PERCENTAGE: porcentaje de réplicas del modelo que se pueden retirar durante la implementación continua.
- MAX_SURGE_PERCENTAGE: porcentaje de réplicas de modelos adicionales que se pueden poner en marcha durante la implementación continua. Si se asigna el valor cero, solo se usará la capacidad actual.
Método HTTP y URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
Cuerpo JSON de la solicitud:
{ "deployedModel": { "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID", "rolloutOptions": { "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL", "maxUnavailablePercentage": "MAX_UNAVAILABLE_PERCENTAGE", "maxSurgePercentage": "MAX_SURGE_PERCENTAGE" } } }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir un código de estado que indique que la operación se ha realizado correctamente (2xx) y una respuesta vacía.
Revertir un despliegue continuo
Para revertir una implementación progresiva, inicia una nueva implementación progresiva del modelo anterior usando el ID DeployedModel
de la implementación progresiva en curso como previousDeployedModel
.
Para obtener el ID de DeployedModel
de una implementación en curso, define el parámetro allDeploymentStates=true
en la llamada a GetEndpoint
, tal como se muestra en el siguiente ejemplo.
REST
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- LOCATION_ID: la región en la que usas Vertex AI.
- PROJECT_ID: tu ID de proyecto.
- ENDPOINT_ID: ID del endpoint.
Método HTTP y URL:
GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID?allDeploymentStates=true
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "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" }
Restricciones y limitaciones
- El
DeployedModel
anterior debe estar en el mismo endpoint que el nuevoDeployedModel
. - No puedes crear varias implementaciones continuas con el mismo
previousDeployedModel
. - No puedes crear implementaciones continuas sobre un
DeployedModel
que no esté totalmente implementado. Excepción: SipreviousDeployedModel
es un despliegue continuo en curso, se puede crear un nuevo despliegue continuo sobre él. Esto permite revertir las implementaciones que empiezan a fallar. - Los modelos anteriores no se retiran automáticamente después de que se complete correctamente una implementación gradual. Puedes desplegar el modelo manualmente.
- En las implementaciones continuas en endpoints públicos compartidos, los valores de
predictRoute
yhealthRoute
del nuevo modelo deben ser los mismos que los del modelo anterior. - Las implementaciones continuas no son compatibles con el alojamiento compartido de modelos.
- Las implementaciones continuas no se pueden usar en modelos que requieran explicaciones online.