En una implementación continua, un modelo implementado se reemplaza por una versión nueva del mismo modelo. El modelo nuevo reutiliza los recursos de procesamiento del anterior.
En la solicitud de implementación continua, la división del tráfico y los valores de dedicatedResources
son los mismos que para la implementación anterior. Una vez que se completa la implementación gradual, se actualiza la división del tráfico para mostrar que todo el tráfico de la DeployedModel
anterior se migró a la nueva implementación.
De forma predeterminada, otros campos configurables en DeployedModel
(como serviceAccount
, disableContainerLogging
y enableAccessLogging
) se establecen en los mismos valores que para el DeployedModel
anterior. Sin embargo, puedes especificar valores nuevos para estos campos de manera opcional.
Cuando se implementa un modelo con una implementación continua, se crea un DeployedModel
nuevo. El nuevo DeployedModel
recibe un ID nuevo que es diferente del anterior. También recibe un nuevo valor revisionNumber
en el campo rolloutOptions
.
Si hay varias implementaciones continuas segmentadas para los mismos recursos de copia de seguridad, el DeployedModel
con el revisionNumber
más alto se considera el estado final previsto.
A medida que avanza la implementación continua, todas las réplicas existentes del DeployedModel
anterior se reemplazan por réplicas del DeployedModel
nuevo. Esto ocurre con rapidez, y las réplicas se actualizan cada vez que la implementación tiene suficientes réplicas disponibles o suficiente capacidad de aumento para mostrar réplicas adicionales.
Además, a medida que avanza la implementación continua, el tráfico de la DeployedModel
anterior se migra gradualmente a la DeployedModel
nueva. El tráfico se balancea en proporción a la cantidad de réplicas listas para servir de cada DeployedModel
.
Si las réplicas nuevas de la implementación continua nunca están listas porque su ruta de estado muestra constantemente un código de respuesta que no es 200, el tráfico no se envía a esas réplicas que no están listas. En este caso, la implementación continua falla y las réplicas se revierten al DeployedModel
anterior.
Cómo iniciar una implementación progresiva
Para iniciar una implementación continua, incluye el campo rolloutOptions
en la solicitud de implementación del modelo, como se muestra en el siguiente ejemplo.
Antes de usar cualquiera de los datos de solicitud a continuación, haz los siguientes reemplazos:
- LOCATION_ID: la región en la que usas Vertex AI.
- PROJECT_ID: El ID del proyecto.
- ENDPOINT_ID: Es el ID del extremo.
- MODEL_ID: El ID del modelo que se implementará.
-
PREVIOUS_DEPLOYED_MODEL: El ID
DeployedModel
de un modelo en el mismo extremo. Esto especifica elDeployedModel
cuyos recursos de respaldo se volverán a usar. Puedes llamar aGetEndpoint
para obtener una lista de los modelos implementados en un extremo junto con sus IDs numéricos. - MAX_UNAVAILABLE_REPLICAS: Es la cantidad de réplicas de modelos que se pueden quitar durante la implementación gradual.
- MAX_SURGE_REPLICAS: Es la cantidad de réplicas de modelos adicionales que se pueden activar durante la implementación continua. Si se establece en cero, solo se usa la capacidad existente.
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, expande una de estas opciones:
curl (Linux, macOS o Cloud Shell)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID -aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID /locations/LOCATION_ID /endpoints/ENDPOINT_ID :deployModel"
PowerShell (Windows)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$headers = @{ }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID -aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID /locations/LOCATION_ID /endpoints/ENDPOINT_ID :deployModel" | Select-Object -Expand Content
Deberías recibir un código de estado exitoso (2xx) y una respuesta vacía.
Si lo deseas, puedes reemplazar maxSurgeReplicas
y maxUnavailableReplicas
, o ambos, por valores de porcentaje, como se muestra en el siguiente ejemplo.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- MAX_UNAVAILABLE_PERCENTAGE: Es el porcentaje de réplicas de modelos que se pueden inhabilitar durante la implementación continua.
- MAX_SURGE_PERCENTAGE: Es el porcentaje de réplicas de modelos adicionales que se pueden activar durante la implementación continua. Si se establece en cero, solo se usa la capacidad existente.
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, expande una de estas opciones:
curl (Linux, macOS o Cloud Shell)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID -aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID /locations/LOCATION_ID /endpoints/ENDPOINT_ID :deployModel"
PowerShell (Windows)
Guarda el cuerpo de la solicitud en un archivo llamado request.json
y ejecuta el siguiente comando:
$headers = @{ }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID -aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID /locations/LOCATION_ID /endpoints/ENDPOINT_ID :deployModel" | Select-Object -Expand Content
Deberías recibir un código de estado exitoso (2xx) y una respuesta vacía.
Cómo revertir una implementación continua
Para revertir una implementación progresiva, inicia una nueva implementación progresiva del
modelo anterior con el ID DeployedModel
de la implementación progresiva en curso como el
previousDeployedModel
.
Para obtener el ID DeployedModel
de una implementación en curso, establece el parámetro allDeploymentStates=true
en la llamada a GetEndpoint
, como se muestra en el siguiente ejemplo.
Antes de usar cualquiera de los datos de solicitud a continuación, haz los siguientes reemplazos:
- LOCATION_ID: la región en la que usas Vertex AI.
- PROJECT_ID: El ID del proyecto.
- ENDPOINT_ID: Es el ID del extremo.
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, expande una de estas opciones:
curl (Linux, macOS o Cloud Shell)
Ejecuta el siguiente comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION_ID -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION_ID /endpoints/ENDPOINT_ID ?allDeploymentStates=true"
PowerShell (Windows)
Ejecuta el siguiente comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION_ID -aiplatform.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION_ID /endpoints/ENDPOINT_ID ?allDeploymentStates=true" | Select-Object -Expand Content
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
{ "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 extremo que elDeployedModel
nuevo. - No puedes crear varias implementaciones continuas con la misma
previousDeployedModel
. - No puedes crear implementaciones continuas sobre un
DeployedModel
que no se haya implementado por completo. Excepción: SipreviousDeployedModel
es una implementación progresiva en curso, se puede crear una nueva implementación progresiva sobre ella. Esto permite revertir las implementaciones que comienzan a fallar. - Los modelos anteriores no se desimplementan automáticamente después de que se completa correctamente una implementación gradual. Puedes desimplementar el modelo de forma manual.
- Para las implementaciones continuas en extremos públicos compartidos,
predictRoute
yhealthRoute
del modelo nuevo deben ser los mismos que los del modelo anterior. - Las implementaciones continuas no son compatibles con el hosting compartido de modelos.
- Las implementaciones continuas no se pueden usar para modelos que requieran explicaciones en línea.