Usar un despliegue continuo para sustituir un modelo desplegado

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 el DeployedModel cuyos recursos subyacentes se van a reutilizar. Puedes llamar a GetEndpoint 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 nuevo DeployedModel.
  • 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: Si previousDeployedModel 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 y healthRoute 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.