Utiliser des VM Spot avec l'inférence

Présentation

Vous pouvez réduire le coût d'exécution de vos jobs de prédiction à l'aide de VM Spot. Les VM spot sont des instances de machine virtuelle (VM) qui dépassent la capacité de Compute Engine. Des remises importantes sont accordées sur les VM Spot. Toutefois, Compute Engine peut à tout moment arrêter ou supprimer (de manière préemptive) des VM Spot, afin de récupérer de la capacité.

Pour en savoir plus, consultez VM Spot.

Limites et exigences

Tenez compte des limites et des exigences suivantes lorsque vous utilisez des VM Spot avec Vertex AI :

  • Toutes les limites des VM Spot s'appliquent lorsque vous utilisez des VM Spot avec Vertex AI.
  • L'utilisation de VM Spot avec Vertex AI n'est possible que pour l'entraînement et l'inférence personnalisés.
  • L'utilisation de VM Spot avec des pods TPU n'est pas possible.
  • L'envoi de votre job via la console Google Cloud n'est pas possible.

Facturation

Si vos charges de travail sont tolérantes aux pannes et peuvent résister à de possibles préemptions de VM, les VM Spot peuvent réduire considérablement les coûts liés aux coûts de calcul. Si certaines de vos VM s'arrêtent pendant le traitement, le job se poursuit malgré tout, mais plus lentement. Les VM Spot effectuent vos tâches de traitement par lot sans imposer de charge supplémentaire à vos VM existantes et sans vous obliger à payer le prix fort pour des VM standards supplémentaires. Consultez Gestion de la préemption.

Lorsque vous utilisez des VM Spot, vous êtes facturé en fonction de la durée du job et du type de machine. Vous ne payez pas pour le temps pendant lequel le job est en attente ou préempté.

Gestion de la préemption

Compute Engine peut récupérer des VM Spot à tout moment. Pour découvrir comment exploiter vos VM Spot de manière optimale, consultez les bonnes pratiques concernant les VM Spot.

Obtenir des inférences à l'aide de VM Spot

Pour utiliser des VM Spot lorsque vous déployez un modèle afin d'obtenir des inférences, vous pouvez utiliser l'API REST ou le SDK Vertex AI pour Python.

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 : 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.
  • 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 : facultatif. Type d'accélérateur à associer à la machine. En savoir plus
  • ACCELERATOR_COUNT : facultatif. Nombre d'accélérateurs pour chaque instance dupliquée à utiliser.
  • 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 d'inférence, dans la limite du nombre maximal de nœuds et sans jamais être inférieur à ce nombre minimal 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 d'inférence, dans la limite de ce nombre de nœuds et jamais moins que le nombre minimal de nœuds.
  • TRAFFIC_SPLIT_THIS_MODEL : pourcentage du trafic de prédiction dirigé 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 modifier les pourcentages de répartition du trafic pour que le total des 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_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Corps JSON de la requête :

{


"acceleratorCount": 1}, "spot": true, "minReplicaCount": 1, "maxReplicaCount": 1}}, "trafficSplit": {"0": 100}}' \
  "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel"

  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "enableContainerLogging": true,
    "dedicatedResources": {
      "machineSpec": {
        "machineType": "MACHINE_TYPE",
        "acceleratorType": "ACCELERATOR_TYPE",
        "acceleratorCount": ACCELERATOR_COUNT
      },
      "spot": true,
      "minReplicaCount": MIN_REPLICA_COUNT,
      "maxReplicaCount": MAX_REPLICA_COUNT
    },
  },
  "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_ID/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-10-19T17:53:16.502088Z",
      "updateTime": "2020-10-19T17:53:16.502088Z"
    }
  }
}

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API SDK Vertex AI pour Python.

endpoint5.deploy(
    model = model,
    deployed_model_display_name=DEPLOYED_NAME,
    traffic_split=TRAFFIC_SPLIT,
    machine_type="MACHINE_TYPE",
    accelerator_type="ACCELERATOR_TYPE",
    accelerator_count=ACCELERATOR_COUNT,
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    spot=True,
    sync=True
)

Étape suivante