Utiliser un déploiement continu pour remplacer un modèle déployé

Dans un déploiement continu, 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 de l'ancien.

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 continu terminé, la répartition du trafic est mise à jour pour indiquer que tout le trafic de l'ancienne DeployedModel a migré vers le nouveau déploiement.

Les autres champs configurables de DeployedModel (tels que serviceAccount, disableContainerLogging et enableAccessLogging) sont définis par défaut sur les mêmes valeurs que pour le DeployedModel précédent. 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 continu, un DeployedModel est créé. La nouvelle DeployedModel reçoit un nouvel ID différent de celui de la précédente. Il reçoit également une nouvelle valeur revisionNumber dans le champ rolloutOptions.

S'il existe plusieurs déploiements continus ciblant les mêmes ressources de backend, le DeployedModel avec le revisionNumber le plus élevé est traité comme l'état final prévu.

Au fur et à mesure du déploiement continu, toutes les répliques existantes de l'ancien DeployedModel sont remplacées par des répliques du nouveau DeployedModel. Cette opération est rapide. Les instances dupliquées sont mises à jour dès que le déploiement dispose de suffisamment d'instances dupliquées disponibles ou d'une capacité de pointe suffisante pour créer des instances dupliquées supplémentaires.

De plus, à mesure que le déploiement continu progresse, le trafic de l'ancien DeployedModel est progressivement migré vers le nouveau DeployedModel. Le trafic est équilibré en fonction du nombre d'instances répliquées prêtes à diffuser de chaque DeployedModel.

Si les nouvelles répliques du déploiement continu ne sont jamais prêtes, car leur route d'état renvoie systématiquement un code de réponse autre que 200, le trafic n'est pas envoyé à ces répliques non prêtes. Dans ce cas, le déploiement continu finit par échouer et les répliques sont rétablies à l'ancienne DeployedModel.

Démarrer un déploiement progressif

Pour démarrer un déploiement continu, incluez le champ rolloutOptions dans la requête de déploiement du modèle, comme indiqué 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 Agent Platform.
  • PROJECT_ID : 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 continu.
  • MAX_SURGE_REPLICAS : nombre d'instances répliquées supplémentaires du modèle qui peuvent être créées lors du déploiement continu. 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/ou maxUnavailableReplicas par des valeurs en pourcentage, comme indiqué dans l'exemple suivant.

REST

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

  • MAX_UNAVAILABLE_PERCENTAGE : pourcentage de répliques de modèle qui peuvent être arrêtées lors du déploiement continu.
  • MAX_SURGE_PERCENTAGE : pourcentage de répliques de modèle supplémentaires pouvant être créées lors du déploiement continu. 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 continu

Pour annuler un déploiement progressif, lancez 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 à GetEndpoint, comme indiqué 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 Agent Platform.
  • PROJECT_ID : 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 continus avec le même previousDeployedModel.
  • Vous ne pouvez pas créer de déploiements continus sur un DeployedModel qui n'est pas entièrement déployé. Exception : Si previousDeployedModel est lui-même un déploiement continu en cours, un nouveau déploiement continu peut être créé par-dessus. Cela permet de rétablir les déploiements qui commencent à échouer.
  • Les modèles précédents ne sont pas automatiquement non déployés une fois qu'un déploiement continu est terminé. Vous pouvez annuler manuellement le déploiement du modèle. Lorsque vous supprimez le déploiement du modèle précédent, attendez au moins 10 à 15 minutes après la fin de la migration du trafic avant de lancer la requête de suppression du déploiement. Cela permet aux connexions en cours de se vider et aux mises à jour du routage de se synchroniser complètement.
  • Pour les déploiements progressifs sur des points de terminaison publics partagés, les valeurs predictRoute et healthRoute du nouveau modèle doivent être identiques à celles du modèle précédent.
  • Les déploiements continus ne sont pas compatibles avec le cohébergement de modèles.
  • Les déploiements continus ne peuvent pas être utilisés pour les modèles qui nécessitent des explications en ligne.