Utiliser des VM Spot avec la prédiction

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 la prédiction 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 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. Par conséquent, votre tâche de prédiction doit être tolérante aux pannes pour tirer le meilleur parti des VM Spot. Lorsque les VM Spot sont préemptées, le job de prédiction échoue avec une erreur STOCKOUT, et Compute Engine tente de redémarrer e job jusqu'à six fois. Pour découvrir comment tirer le meilleur parti de vos VM Spot, consultez les bonnes pratiques concernant les VM Spot.

Voici quelques-unes des méthodes que vous pouvez utiliser pour rendre votre job de prédiction tolérante aux pannes :

  • Créer des points de contrôle pour enregistrer la progression. En stockant régulièrement la progression de votre modèle, vous pouvez vous assurer qu'un job de prédiction arrêté peut reprendre à partir du dernier point de contrôle stocké, au lieu de recommencer depuis le début.
  • Utilisez un script d'arrêt. Lorsque Compute Engine préempte une VM Spot, vous pouvez utiliser un script d'arrêt qui tente d'effectuer des actions de nettoyage avant que la VM ne soit préemptée. Pour en savoir plus, consultez Gérer la préemption avec un script d'arrêt.

Obtenir des prédictions à l'aide de VM Spot

Pour utiliser des VM Spot lorsque vous déployez un modèle afin d'obtenir des prédictions, 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 : 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.
  • 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 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 diminué selon les besoins de la charge de prédiction, jusqu'à atteindre ce nombre de nœuds mais jamais moins que le nombre minimal de nœuds.
  • 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_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