Partager des ressources entre plusieurs déploiements

Introduction

Par défaut, un modèle Vertex AI est déployé sur sa propre instance de machine virtuelle (VM). Vertex AI offre la possibilité de co-héberger des modèles sur la même VM, ce qui offre les avantages suivants :

  • Partage des ressources entre plusieurs déploiements
  • Coûts réduits de l'inférence des modèles
  • Utilisation améliorée de la mémoire et des ressources de calcul

Ce guide explique comment partager des ressources entre plusieurs déploiements sur Vertex AI.

Présentation

La gestion du co-hébergement de modèles introduit le concept de DeploymentResourcePool, qui regroupe au sein d'une VM unique les déploiements de modèles partageant des ressources. Plusieurs points de terminaison peuvent être déployés sur la même VM au sein d'un DeploymentResourcePool. Chaque point de terminaison possède un ou plusieurs modèles déployés. Les modèles déployés pour un point de terminaison donné peuvent être regroupés dans le même DeploymentResourcePool ou dans des regroupements différents.

Dans l'exemple suivant, vous avez quatre modèles et deux points de terminaison :

Co-héberger des modèles à partir de plusieurs points de terminaison

Model_A, Model_B et Model_C sont déployés sur Endpoint_1, et le trafic est acheminé vers l'ensemble. Model_D est déployé sur Endpoint_2, qui reçoit 100% du trafic pour ce point de terminaison. Au lieu d'attribuer chaque modèle à une VM distincte, vous pouvez les regrouper de l'une des manières suivantes :

  • Regroupez Model_A et Model_B pour qu'ils partagent une VM, ce qui les inclut alors dans DeploymentResourcePool_X.
  • Regroupez Model_C et Model_D (actuellement sur des points de terminaison différents) pour qu'ils partagent une VM, ce qui les inclut alors dans DeploymentResourcePool_Y.

Des pools de ressources de déploiement différents ne peuvent pas partager une VM.

Points à prendre en compte

Il n'y a pas de limite supérieure au nombre de modèles pouvant être déployés dans un même pool de ressources de déploiement. Cela dépend de la forme de VM choisie, de la taille des modèles et des modèles de trafic. Le co-hébergement fonctionne bien lorsque vous avez de nombreux modèles déployés avec un trafic épars, de sorte que l'attribution d'une machine dédiée à chaque modèle déployé ne représente pas une utilisation efficace des ressources.

Vous pouvez déployer des modèles simultanément sur le même pool de ressources de déploiement. Toutefois, le nombre de requêtes de déploiement simultanées est limité à tout moment à 20.

L'utilisation du processeur augmente lorsqu'un modèle est déployé. L'augmentation de l'utilisation du processeur peut entraîner une augmentation de la latence pour le trafic existant ou déclencher l'autoscaling. Pour une expérience optimale, il est recommandé d'éviter d'avoir un trafic élevé vers un pool de ressources lors du déploiement d'un nouveau modèle.

Le trafic existant vers un pool de ressources de déploiement n'est pas affecté lorsque vous annulez le déploiement d'un modèle de ce pool. L'annulation du déploiement d'un modèle ne devrait avoir aucun impact sur l'utilisation du processeur ni sur la latence du trafic existant.

Un pool de ressources de déploiement vide ne consomme pas votre quota de ressources. Les ressources sont provisionnées dans un pool de ressources de déploiement au déploiement du premier modèle, et elles sont libérées à l'annulation du déploiement du dernier modèle.

Les modèles d'un même pool de ressources de déploiement ne sont pas isolés les uns des autres en termes de ressources comme le processeur et la mémoire. Si un modèle utilise la plupart des ressources, cela déclenche l'autoscaling.

Limites

Les limites suivantes s'appliquent lors du déploiement de modèles pour lesquels le partage des ressources est activé :

Déployer un modèle

Pour déployer un modèle dans un DeploymentResourcePool, procédez comme suit :

  1. Créez un pool de ressources de déploiement si nécessaire.
  2. Créez un point de terminaison si nécessaire.
  3. Récupérez l'ID du point de terminaison.
  4. Déployez le modèle sur le point de terminaison dans le pool de ressources de déploiement.

Créer un pool de ressources de déploiement

Si vous déployez un modèle dans un DeploymentResourcePool existant, ignorez cette étape :

Utilisez CreateDeploymentResourcePool pour créer un pool de ressources.

Console Cloud

  1. Dans la console Google Cloud, accédez à la page Pools de ressources de déploiement de Vertex AI.

    Accéder aux pools de ressources de déploiement

  2. Cliquez sur Créer et remplissez le formulaire (affiché ci-dessous).

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.
  • MACHINE_TYPE : facultatif. Ressources machine utilisées pour chaque nœud de ce déploiement. Le paramètre par défaut est n1-standard-2. En savoir plus sur les types de machines.
  • ACCELERATOR_TYPE : type d'accélérateur à associer à la machine. Facultatif si ACCELERATOR_COUNT n'est pas spécifié ou est égal à zéro. Il n'est pas recommandé pour les modèles AutoML ni les modèles personnalisés qui utilisent des images non GPU. En savoir plus
  • ACCELERATOR_COUNT : nombre d'accélérateurs pour chaque instance dupliquée à utiliser. Facultatif. Doit être égal à zéro ou non spécifié pour les modèles AutoML ou les modèles personnalisés qui utilisent des images non GPU.
  • MIN_REPLICA_COUNT : nombre minimal de nœuds pour ce déploiement. Le nombre de nœuds peut être augmenté ou réduit selon les besoins de la charge de prédiction, dans la limite du nombre maximal de nœuds et jamais moins que ce nombre de nœuds. Cette valeur doit être supérieure ou égale à 1.
  • MAX_REPLICA_COUNT : nombre maximal de nœuds pour ce déploiement. Le nombre de nœuds peut être augmenté ou réduit selon les besoins de la charge de prédiction, dans la limite de ce nombre de nœuds et jamais moins que le nombre minimal de nœuds.
  • DEPLOYMENT_RESOURCE_POOL_ID : nom de votre DeploymentResourcePool. La longueur maximale est de 63 caractères, et les caractères valides sont /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.

Méthode HTTP et URL :

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/deploymentResourcePools

Corps JSON de la requête :

{
  "deploymentResourcePool":{
    "dedicatedResources":{
      "machineSpec":{
        "machineType":"MACHINE_TYPE",
        "acceleratorType":"ACCELERATOR_TYPE",
        "acceleratorCount":"ACCELERATOR_COUNT"
      },
      "minReplicaCount":MIN_REPLICA_COUNT,
      "maxReplicaCount":MAX_REPLICA_COUNT
    }
  },
  "deploymentResourcePoolId":"DEPLOYMENT_RESOURCE_POOL_ID"
}

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_NUMBER/locations/LOCATION_ID/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateDeploymentResourcePoolOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-15T05:48:06.383592Z",
      "updateTime": "2022-06-15T05:48:06.383592Z"
    }
  }
}

Vous pouvez interroger l'état de l'opération jusqu'à ce que la réponse indique "done": true.

Créer un point de terminaison

Suivez ces instructions pour créer un point de terminaison. Cette étape est identique au déploiement d'un modèle unique.

Récupérer l'ID de point de terminaison

Suivez ces instructions pour récupérer l'ID du point de terminaison. Cette étape est identique au déploiement d'un modèle unique.

Déployer un modèle dans un pool de ressources de déploiement

Après avoir créé un DeploymentResourcePool et un point de terminaison, vous êtes prêt à effectuer un déploiement à l'aide de la méthode API DeployModel. Ce processus est semblable au déploiement d'un modèle unique. S'il existe un DeploymentResourcePool, spécifiez shared_resources sur DeployModel avec le nom de ressource du DeploymentResourcePool que vous déployez.

Console Cloud

  1. Dans la console Google Cloud, accédez à la page Registre de modèles de Vertex AI.

    Accéder à la page Registre de modèles

  2. Recherchez votre modèle, puis cliquez sur Déployer sur un point de terminaison.

  3. Sous Paramètres du modèle (voir ci-dessous), sélectionnez Déployer dans un pool de ressources de déploiement partagé.

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 : l'ID de votre projet.
  • ENDPOINT_ID : ID du point de terminaison.
  • MODEL_ID : ID du modèle à déployer.
  • DEPLOYED_MODEL_NAME : nom de l'élément DeployedModel. Vous pouvez également utiliser le nom à afficher du Model pour le DeployedModel.
  • DEPLOYMENT_RESOURCE_POOL_ID : nom de votre DeploymentResourcePool. La longueur maximale est de 63 caractères, et les caractères valides sont /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.
  • TRAFFIC_SPLIT_THIS_MODEL : pourcentage du trafic de prédiction vers ce point de terminaison à acheminer vers le modèle déployé avec cette opération. La valeur par défaut est 100. La somme des pourcentages de trafic doit être égale à 100. En savoir plus sur la répartition du trafic.
  • DEPLOYED_MODEL_ID_N : facultatif. Si d'autres modèles sont déployés sur ce point de terminaison, vous devez mettre à jour les pourcentages de répartition du trafic pour que le pourcentage cumulé de tous les pourcentages soit égal à 100.
  • TRAFFIC_SPLIT_MODEL_N : valeur en pourcentage de la répartition du trafic pour la clé de l'ID de modèle déployé.
  • PROJECT_NUMBER : numéro de projet généré automatiquement pour votre projet

Méthode HTTP et URL :

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel

Corps JSON de la requête :

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "sharedResources":"projects/PROJECT/locations/us-central1/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID"
  },
  "trafficSplit": {
    "0": TRAFFIC_SPLIT_THIS_MODEL,
    "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
    "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
  },
}

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_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-19T17:53:16.502088Z",
      "updateTime": "2022-06-19T17:53:16.502088Z"
    }
  }
}

Répétez la requête ci-dessus avec différents modèles ayant les mêmes ressources partagées pour déployer plusieurs modèles dans le même pool de ressources de déploiement.

Obtenir des prédictions

Vous pouvez envoyer des requêtes de prédiction à un modèle d'un DeploymentResourcePool de la même façon que pour tout autre modèle déployé sur Vertex AI.