Utiliser un déploiement par vagues pour remplacer un modèle déployé

Dans un déploiement progressif, un modèle déployé est remplacé par une nouvelle version du même modèle. Le nouveau modèle réutilise les ressources de calcul du modèle précédent.

Dans la requête de déploiement progressif, la répartition du trafic et les valeurs dedicatedResources sont les mêmes que pour le déploiement précédent. Une fois le déploiement par vagues terminé, la répartition du trafic est mise à jour pour indiquer que tout le trafic de l'DeployedModel précédent a été migré vers le nouveau déploiement.

Les autres champs configurables de DeployedModel (tels que serviceAccount, disableContainerLogging et enableAccessLogging) sont définis sur les mêmes valeurs que pour le DeployedModel précédent par défaut. Toutefois, vous pouvez éventuellement spécifier de nouvelles valeurs pour ces champs.

Lorsqu'un modèle est déployé à l'aide d'un déploiement par vagues, un nouvel élément DeployedModel est créé. Le nouvel DeployedModel reçoit un nouvel ID qui est différent de celui de l'ancien. Il reçoit également une nouvelle valeur revisionNumber dans le champ rolloutOptions.

Si plusieurs déploiements par vague ciblent les mêmes ressources de sauvegarde, l'DeployedModel avec le revisionNumber le plus élevé est traité comme l'état final souhaité.

À mesure que le déploiement progresse, tous les réplicas existants de l'DeployedModel précédente sont remplacés par des réplicas de la nouvelle DeployedModel. Cela se produit rapidement, et les réplicas sont mis à jour chaque fois que le déploiement dispose de suffisamment de réplicas disponibles ou de suffisamment de capacité de pointe pour mettre en service des réplicas supplémentaires.

De plus, à mesure que le déploiement progresse, le trafic de l'ancienne DeployedModel est progressivement migré vers la nouvelle DeployedModel. Le trafic est équilibré en fonction du nombre de réplicas prêts à servir de chaque DeployedModel.

Si les nouveaux réplicas du déploiement par vague ne deviennent jamais prêts, car leur route de vérification de l'état renvoie systématiquement un code de réponse autre que 200, le trafic n'est pas envoyé à ces réplicas non prêts. Dans ce cas, le déploiement par vague échoue à terme, et les réplicas sont rétablis à l'DeployedModel précédente.

Démarrer un déploiement progressif

Pour lancer un déploiement progressif, incluez le champ rolloutOptions dans la requête de déploiement du modèle, comme illustré dans l'exemple suivant.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • LOCATION_ID : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : l'ID de votre projet.
  • ENDPOINT_ID : ID du point de terminaison.
  • MODEL_ID : ID du modèle à déployer.
  • PREVIOUS_DEPLOYED_MODEL: ID DeployedModel d'un modèle sur le même point de terminaison. Cela spécifie le DeployedModel dont les ressources de sauvegarde doivent être réutilisées. Vous pouvez appeler GetEndpoint pour obtenir la liste des modèles déployés sur un point de terminaison, ainsi que leurs ID numériques.
  • MAX_UNAVAILABLE_REPLICAS: nombre de répliques de modèle pouvant être arrêtées lors du déploiement par étapes.
  • MAX_SURGE_REPLICAS: nombre de réplicas de modèle supplémentaires pouvant être mis en service lors du déploiement par vague. Si cette valeur est définie sur zéro, seule la capacité existante est utilisée.

Méthode HTTP et URL :

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Corps JSON de la requête :

{
  "deployedModel": {
    "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
    "rolloutOptions": {
      "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
      "maxUnavailableReplicas": "MAX_UNAVAILABLE_REPLICAS",
      "maxSurgeReplicas": "MAX_SURGE_REPLICAS"
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.

Si vous le souhaitez, vous pouvez remplacer maxSurgeReplicas et maxUnavailableReplicas, ou les deux, par des valeurs de pourcentage, comme indiqué dans l'exemple suivant.

REST

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • MAX_UNAVAILABLE_PERCENTAGE: pourcentage de réplications de modèle pouvant être arrêtées lors du déploiement par vague.
  • MAX_SURGE_PERCENTAGE: pourcentage de réplications de modèle supplémentaires pouvant être démarrées lors du déploiement par vague. Si cette valeur est définie sur zéro, seule la capacité existante est utilisée.

Méthode HTTP et URL :

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Corps JSON de la requête :

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "rolloutOptions": {
      "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
      "maxUnavailablePercentage": "MAX_UNAVAILABLE_PERCENTAGE",
      "maxSurgePercentage": "MAX_SURGE_PERCENTAGE"
    }
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir un code d'état indiquant le succès de l'opération (2xx), ainsi qu'une réponse vide.

Effectuer le rollback d'un déploiement par vague

Pour annuler un déploiement progressif, démarrez un nouveau déploiement progressif du modèle précédent, en utilisant l'ID DeployedModel du déploiement progressif en cours comme previousDeployedModel.

Pour obtenir l'ID DeployedModel d'un déploiement en cours, définissez le paramètre allDeploymentStates=true dans l'appel de GetEndpoint, comme illustré dans l'exemple suivant.

REST

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • LOCATION_ID : région dans laquelle vous utilisez Vertex AI.
  • PROJECT_ID : l'ID de votre projet.
  • ENDPOINT_ID : ID du point de terminaison.

Méthode HTTP et URL :

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID?allDeploymentStates=true

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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"
}

Contraintes et limites

  • Le DeployedModel précédent doit se trouver sur le même point de terminaison que le nouveau DeployedModel.
  • Vous ne pouvez pas créer plusieurs déploiements par vague avec le même previousDeployedModel.
  • Vous ne pouvez pas créer de déploiements par vagues sur un DeployedModel qui n'est pas entièrement déployé. Exception: Si previousDeployedModel est lui-même un déploiement progressif en cours, un nouveau déploiement progressif peut être créé par-dessus. Cela permet de revenir en arrière sur les déploiements qui commencent à échouer.
  • Les modèles précédents ne sont pas automatiquement désinstallés une fois le déploiement par vague terminé. Vous pouvez désinstaller manuellement le modèle.
  • Pour les déploiements par vagues sur des points de terminaison publics partagés, les predictRoute et healthRoute du nouveau modèle doivent être les mêmes que pour le modèle précédent.
  • Les déploiements progressifs ne sont pas compatibles avec le co-hébergement de modèles.
  • Les déploiements par vagues ne peuvent pas être utilisés pour les modèles qui nécessitent des explications en ligne.