Ce document explique comment utiliser les réservations Compute Engine pour vous assurer que vos jobs de prédiction disposent des ressources de machine virtuelle (VM) nécessaires pour s'exécuter.
Les réservations sont une fonctionnalité de Compute Engine. Ils vous permettent de vous assurer que les ressources nécessaires sont disponibles pour créer des VM avec le même matériel (mémoire et processeurs virtuels) et les ressources facultatives (GPU et disques SSD locaux) chaque fois que vous en avez besoin.
Lorsque vous créez une réservation, Compute Engine vérifie que la capacité demandée est disponible dans la zone spécifiée. Si tel est le cas, Compute Engine réserve les ressources, crée la réservation et les événements suivants se produisent:
- Vous pouvez immédiatement utiliser les ressources réservées. Elles restent disponibles jusqu'à ce que vous supprimiez la réservation.
- Les ressources réservées vous sont facturées au même tarif à la demande que les VM en cours d'exécution, y compris les remises applicables, jusqu'à ce que la réservation soit supprimée. Une VM qui consomme une réservation n'entraîne pas de frais distincts. Pour en savoir plus, consultez la section Réservations de ressources zonales Compute Engine.
Limites et exigences
Lorsque vous utilisez des réservations Compute Engine avec Vertex AI, tenez compte des limites et des exigences suivantes:
- Vertex AI ne peut utiliser que les réservations de VM auxquelles sont associés des GPU.
- Vertex AI ne peut pas utiliser les réservations de VM auxquelles des disques SSD locaux sont associés manuellement.
- L'utilisation de réservations Compute Engine avec Vertex AI n'est possible que pour l'entraînement et la prédiction personnalisés.
- Pour utiliser la réservation, les propriétés de la VM de la réservation doivent correspondre exactement à celles de votre charge de travail Vertex AI. Par exemple, si une réservation spécifie un type de machine
a2-ultragpu-8g
, la charge de travail Vertex AI ne peut utiliser la réservation que si elle utilise également un type de machinea2-ultragpu-8g
. Consultez les conditions requises. - Pour utiliser une réservation partagée de VM GPU, vous devez l'utiliser à l'aide de son projet propriétaire ou d'un projet client avec lequel la réservation est partagée. Consultez la section Fonctionnement des réservations partagées.
- Pour permettre la mise à jour régulière de vos déploiements Vertex AI, nous vous recommandons d'augmenter le nombre de VM de plus que le nombre total de réplicas comme suit, en fonction du type de réservation utilisé par votre
DeployedModel
:SPECIFIC_RESERVATION
: vous devez spécifier au moins une VM supplémentaire. Nous vous recommandons d'en ajouter 10% (mais au moins une). Les modèles déployés à l'aide deSPECIFIC_RESERVATION
ne consomment que des VM de la réservation. Vertex AI ne peut pas effectuer de mises à jour s'il n'y a pas de VM supplémentaire.ANY
:- Il n'est pas nécessaire d'avoir des VM supplémentaires, car les modèles déployés à l'aide de la réservation
ANY
utilisent des VM à la demande si la capacité de réservation n'est pas suffisante. Toutefois, sans VM supplémentaires, votre réservation risque de ne pas être entièrement utilisée après une mise à niveau. Par exemple, supposons que vous disposiez d'une réservation de 40 VM et que vous déployiez un modèle avec 40 répliques à l'aide de cette réservation. Lors du premier déploiement, toutes les 40 VM de la réservation sont utilisées par leDeployedModel
. Après la migration, seules 36 VM proviennent de la réservation et 4 VM sont à la demande. - Si vous souhaitez que l'utilisation reste dans la limite de la réservation, nous vous recommandons d'avoir au moins une VM supplémentaire pour chaque
DeployedModel
ouDeploymentResourcePool
utilisant la réservation. Si le nombre total de VM du même type dans vos réservationsANY
est inférieur à 50, nous vous recommandons d'en ajouter 10% (mais au moins une). Si le nombre est supérieur à 50, nous vous recommandons d'augmenter le nombre de 25 %. Par exemple :- Si vous prévoyez de déployer des modèles à l'aide de 40 VM A3, vous pouvez avoir une réservation A3 avec 44 VM ou deux réservations A3: la réservation X avec 30 VM et la réservation Y avec 14 VM (44 VM au total). Il en va de même pour d'autres nombres de réservations, à condition qu'elles soient toutes partagées avec Vertex AI et que le nombre total de VM de ces réservations soit d'au moins 44.
- Si vous prévoyez de déployer des modèles à l'aide de 100 VM A3, le nombre total de VM dans toutes les réservations A3 partagées avec Vertex AI doit être d'au moins 125.
- Si vous prévoyez de déployer deux modèles à l'aide de 10 VM, le nombre total de VM dans toutes les réservations A3 partagées avec Vertex AI doit être d'au moins 12. Le nombre de VM est inférieur à 50, mais le nombre de VM supplémentaires est de deux (une par
DeployedModel
).
- Pour utiliser une réservation
SPECIFIC_RESERVATION
, attribuez le rôle IAM Lecteur de Compute au compte de service Vertex AI du projet auquel appartiennent les réservations (service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com
, où PROJECT_NUMBER est le numéro du projet qui utilise la réservation). -
Les services et fonctionnalités suivants ne sont pas compatibles avec l'utilisation de réservations Compute Engine avec la prédiction Vertex AI:
- Conformité avec le programme FedRAMP (Federal Risk and Authorization Management Program)
Facturation
Lorsque vous utilisez des réservations Compute Engine, vous êtes facturé pour les éléments suivants:
- Tarifs Compute Engine pour les ressources Compute Engine, y compris les remises sur engagement d'utilisation applicables. Consultez la page Tarifs de Compute Engine.
- Des frais de gestion des prédictions Vertex AI s'ajoutent à votre utilisation de l'infrastructure. Consultez la page Tarifs des prédictions.
Avant de commencer
- Consultez les exigences et restrictions applicables aux réservations.
- Consultez les exigences relatives aux quotas et les restrictions applicables aux réservations partagées.
Autoriser l'utilisation d'une réservation
Avant de consommer une réservation de VM GPU, vous devez définir sa règle de partage pour autoriser Vertex AI à consommer la réservation. Pour ce faire, utilisez l'une des méthodes suivantes:
- Autoriser la consommation lors de la création d'une réservation
- Autoriser la consommation dans une réservation existante
Autoriser la consommation lors de la création d'une réservation
Lorsque vous créez une réservation à projet unique ou partagée de VM avec GPU, vous pouvez autoriser Vertex AI à utiliser la réservation comme suit:
- Si vous utilisez la console Google Cloud, sélectionnez Partager la réservation dans la section Services Google Cloud.
- Si vous utilisez Google Cloud CLI, incluez l'option
--reservation-sharing-policy
définie surALLOW_ALL
. - Si vous utilisez l'API REST, incluez le champ
serviceShareType
défini surALLOW_ALL
dans le corps de la requête.
Autoriser la consommation dans une réservation existante
Pour autoriser Vertex AI à consommer une réservation existante de VM GPU, consultez la section Modifier la règle de partage d'une réservation.Vérifier qu'une réservation est consommée
Pour vérifier que la réservation est utilisée, consultez la section Vérifier la consommation des réservations dans la documentation Compute Engine.Obtenir des prédictions à l'aide d'une réservation
Pour créer un déploiement de modèle qui consomme une réservation Compute Engine de VM GPU, utilisez 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: projet dans lequel la réservation a été créée. Pour utiliser une réservation partagée à partir d'un autre projet, vous devez la partager avec ce projet. Pour en savoir plus, consultez la section Modifier les projets clients d'une réservation partagée.
- 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 duModel
pour leDeployedModel
. - MACHINE_TYPE: type de machine à utiliser pour chaque nœud de ce déploiement. Le paramètre par défaut est
n1-standard-2
. Pour en savoir plus sur les types de machines compatibles, consultez la section Configurer des ressources de calcul pour la prédiction. - ACCELERATOR_TYPE: type d'accélérateur à associer à la machine. Pour en savoir plus sur le type de GPU compatible avec chaque type de machine, consultez la page GPU pour les charges de travail de calcul.
- ACCELERATOR_COUNT: nombre d'accélérateurs à associer à la machine.
- RESERVATION_AFFINITY_TYPE : La valeur doit être
ANY
,SPECIFIC_RESERVATION
ouNONE
.ANY
signifie que les VM de votrecustomJob
peuvent automatiquement utiliser toute réservation avec des propriétés correspondantes.SPECIFIC_RESERVATION
signifie que les VM de votrecustomJob
ne peuvent consommer qu'une réservation que les VM ciblent spécifiquement par son nom.NONE
signifie que les VM de votrecustomJob
ne peuvent utiliser aucune réservation. SpécifierNONE
a le même effet que d'omettre une spécification d'affinité de réservation.
- RESERVATION_NAME: nom de votre réservation.
- 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.
- 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/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", "displayName": "DEPLOYED_MODEL_NAME", "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorType": "ACCELERATOR_TYPE", "acceleratorCount": ACCELERATOR_COUNT, "reservationAffinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "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_ID/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.
Avant d'exécuter l'un des scripts suivants, effectuez les remplacements suivants:
- DEPLOYED_NAME: nom du modèle déployé.
- TRAFFIC_SPLIT: valeur en pourcentage de la répartition du trafic pour la clé de l'ID de modèle déployé.
- MACHINE_TYPE: machine utilisée 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. Pour en savoir plus sur le type de GPU compatible avec chaque type de machine, consultez la page GPU pour les charges de travail de calcul.
- ACCELERATOR_COUNT: nombre d'accélérateurs à associer à la machine.
- PROJECT_ID: projet dans lequel la réservation a été créée. Pour utiliser une réservation partagée à partir d'un autre projet, vous devez la partager avec ce projet. Pour en savoir plus, consultez la section Modifier les projets clients d'une réservation partagée.
- ZONE : zone où se trouve la réservation.
- RESERVATION_NAME: nom de votre réservation.
- 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.
Selon le type de réservation que vous souhaitez consommer, procédez de l'une des manières suivantes:
- Pour consommer une réservation spécifique:
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, reservation_affinity_type="SPECIFIC_RESERVATION", reservation_affinity_key="compute.googleapis.com/reservation-name", reservation_affinity_values=["projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"], min_replica_count=MIN_REPLICA_COUNT, max_replica_count=MAX_REPLICA_COUNT, sync=True )
- Pour consommer une réservation consommée automatiquement:
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, reservation_affinity_type="ANY_RESERVATION", min_replica_count=MIN_REPLICA_COUNT, max_replica_count=MAX_REPLICA_COUNT, sync=True )
Étape suivante
- Découvrir les réservations de ressources zonales Compute Engine.
- Découvrez comment utiliser des réservations avec l'entraînement Vertex AI.