Usa una implementación continua para reemplazar un modelo implementado

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 progresiva, 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 continua, se actualiza la división del tráfico para mostrar que todo el tráfico del DeployedModel anterior se migró a la nueva implementación.

Otros campos configurables en DeployedModel (como serviceAccount, disableContainerLogging y enableAccessLogging) se establecen en los mismos valores que para el DeployedModel anterior de forma predeterminada. Sin embargo, puedes especificar valores nuevos para estos campos de forma opcional.

Cuando se implementa un modelo con una implementación continua, se crea un nuevo DeployedModel. El nuevo DeployedModel recibe un ID nuevo que es diferente del anterior. También recibe un nuevo valor de revisionNumber en el campo rolloutOptions.

Si hay varias implementaciones continuas segmentadas para los mismos recursos de respaldo, el DeployedModel con el revisionNumber más alto se considera el estado final previsto.

A medida que avanza la implementación progresiva, todas las réplicas existentes del DeployedModel anterior se reemplazan por réplicas del nuevo DeployedModel. Esto sucede rápidamente, y las réplicas se actualizan siempre que la implementación tiene suficientes réplicas disponibles o capacidad de aumento suficiente para iniciar réplicas adicionales.

Además, a medida que avanza la implementación continua, el tráfico del DeployedModel anterior se migra gradualmente al DeployedModel nuevo. El tráfico se balancea en proporción a la cantidad de réplicas listas para publicar de cada DeployedModel.

Si las nuevas réplicas de la implementación continua nunca se preparan porque su ruta de verificación de estado devuelve de forma constante un código de respuesta que no es 200, no se envía tráfico a esas réplicas no preparadas. En este caso, la implementación continua finalmente 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.

REST

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: Es el ID de DeployedModel de un modelo en el mismo extremo. Especifica el DeployedModel cuyos recursos de respaldo se reutilizarán. Puedes llamar a GetEndpoint 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 del modelo que se pueden quitar durante la implementación continua.
  • MAX_SURGE_REPLICAS: Es la cantidad de réplicas adicionales del modelo que se pueden iniciar durante la implementación continua. Si se establece en cero, solo se usará 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:

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.

REST

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 del modelo que se pueden detener 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 usará 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:

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 de DeployedModel de la implementación progresiva en curso como previousDeployedModel.

Para obtener el ID de 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.

REST

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:

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 el nuevo DeployedModel.
  • No puedes crear varias implementaciones continuas con el mismo previousDeployedModel.
  • No puedes crear implementaciones continuas sobre un DeployedModel que no esté completamente implementado. Excepción: Si previousDeployedModel 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 continua. Puedes quitar la implementación del modelo de forma manual.
  • Para las implementaciones progresivas en extremos públicos compartidos, los parámetros predictRoute y healthRoute 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 los modelos que requieren explicaciones en línea.