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

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

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

Par défaut, 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. 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 progressif, un nouveau DeployedModel est créé. Le nouveau DeployedModel reçoit un nouvel ID différent de celui du précédent. Il reçoit également une nouvelle valeur revisionNumber dans le champ rolloutOptions.

S'il existe plusieurs déploiements progressifs 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 progressif, toutes les instances dupliquées existantes pour le DeployedModel précédent sont remplacées par des instances dupliquées du nouveau DeployedModel. Cela se produit rapidement, et les instances dupliquées sont mises à jour chaque fois 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, au fur et à mesure du déploiement progressif, le trafic de l'ancien DeployedModel est progressivement migré vers le nouveau DeployedModel. Le trafic est équilibré en fonction du nombre d'instances dupliquées prêtes à diffuser de chaque DeployedModel.

Si les nouvelles instances dupliquées du déploiement progressif 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 instances dupliquées non prêtes. Dans ce cas, le déploiement progressif finit par échouer et les instances dupliquées sont rétablies dans le DeployedModel précédent.

Démarrer un déploiement progressif

Pour démarrer 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 ci-dessous, effectuez les remplacements suivants :

  • LOCATION_ID : région dans laquelle vous utilisez Agent Platform.
  • PROJECT_ID : votre [ID du projet](/resource-manager/docs/creating-managing-projects#identifiers). .
  • 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 backend 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 d'instances dupliquées de modèle qui peuvent être supprimées lors du déploiement progressif.
  • MAX_SURGE_REPLICAS : nombre d'instances dupliquées de modèle supplémentaires qui peuvent être créées lors du déploiement progressif. 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 en pourcentage, comme illustré dans l'exemple suivant.

REST

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

  • MAX_UNAVAILABLE_PERCENTAGE : pourcentage d'instances dupliquées de modèle qui peuvent être supprimées lors du déploiement progressif.
  • MAX_SURGE_PERCENTAGE : pourcentage d'instances dupliquées de modèle supplémentaires qui peuvent être créées lors du déploiement progressif. 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 progressif

Pour effectuer le rollback d'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 à GetEndpoint, comme illustré dans l'exemple suivant.

REST

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

  • LOCATION_ID : région dans laquelle vous utilisez Agent Platform.
  • PROJECT_ID : votre [ID du projet](/resource-manager/docs/creating-managing-projects#identifiers). .
  • 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 progressifs avec le même previousDeployedModel.
  • Vous ne pouvez pas créer de déploiements progressifs 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 d'effectuer le rollback des déploiements qui commencent à échouer.
  • Les modèles précédents ne sont pas automatiquement annulés après la réussite d'un déploiement progressif. Vous pouvez annuler le déploiement du modèle manuellement.
  • Pour les déploiements progressifs sur des points de terminaison publics partagés, les predictRoute et healthRoute du nouveau modèle doivent être identiques à ceux du modèle précédent.
  • Les déploiements progressifs ne sont pas compatibles avec le co-hébergement de modèles.
  • Les déploiements progressifs ne peuvent pas être utilisés pour les modèles qui nécessitent des explications en ligne.