Ce document explique comment utiliser les réservations Compute Engine pour vous assurer que vos jobs d'inférence par lot disposent des ressources de machines virtuelles (VM) nécessaires à leur exécution.
Les réservations sont une fonctionnalité de Compute Engine. Elles vous permettent de vous assurer que vous disposez des ressources nécessaires pour créer des VM avec le même matériel (mémoire et processeurs virtuels) et les mêmes ressources facultatives (processeurs, GPU, TPU 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 c'est le cas, Compute Engine réserve les ressources et crée la réservation. Les événements suivants se produisent alors :
- Vous pouvez consommer immédiatement 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. Vous n'êtes facturé que pour les ressources en dehors de la réservation, telles que les disques ou les adresses IP. Pour en savoir plus, consultez les tarifs des réservations.
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 les réservations que pour les CPU, les VM GPU ou les TPU (preview).
- 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 l'inférence personnalisés, ainsi que pour Vertex AI Workbench (preview).
- Pour utiliser une réservation, les propriétés de 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 ou de TPU, vous devez l'utiliser avec son projet propriétaire ou un projet client avec lequel la réservation est partagée. Consultez la section Fonctionnement des réservations partagées.
- Pour utiliser une réservation
SPECIFIC_RESERVATION
, accordez le rôle IAM Lecteur Compute au compte de service Vertex AI dans le projet qui possède 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 l'inférence par lot Vertex AI :
- Conformité au Federal Risk and Authorization Management Program (FedRAMP)
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 de l'inférence par lot 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 CPU, de VM avec GPU ou de TPU, 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
Vous ne pouvez modifier une réservation créée automatiquement de VM avec GPU ou de TPU pour une réservation future qu'après l'heure de début de la réservation.
Pour autoriser Vertex AI à utiliser une réservation existante, utilisez l'une des méthodes suivantes :
Vérifier qu'une réservation est utilisé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 inférences par lot à l'aide d'une réservation
Pour créer une requête d'inférence par lot qui consomme une réservation Compute Engine de VM GPU, vous pouvez utiliser l'API REST et choisir Cloud Storage ou BigQuery pour la source et la destination.
Cloud Storage
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
-
LOCATION_ID : région où le modèle est stocké et où la tâche de prédiction par lot est exécutée. Exemple :
us-central1
-
PROJECT_ID : projet dans lequel la réservation a été créée. Pour utiliser une réservation partagée provenant d'un autre projet, vous devez partager la réservation avec ce projet. Pour en savoir plus, consultez Modifier les projets clients dans une réservation partagée.
-
BATCH_JOB_NAME : nom à afficher du job de prédiction par lot.
-
MODEL_ID : ID du modèle à utiliser pour effectuer des prédictions.
-
INPUT_FORMAT : format des données d'entrée :
jsonl
,csv
,tf-record
,tf-record-gzip
oufile-list
. -
INPUT_URI : URI Cloud Storage de vos données d'entrée. Peut contenir des caractères génériques.
-
OUTPUT_DIRECTORY : URI Cloud Storage d'un répertoire dans lequel vous souhaitez que Vertex AI enregistre la sortie.
-
MACHINE_TYPE : ressources de machine à utiliser pour ce job de prédiction par lots.
-
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 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.
-
BATCH_SIZE : nombre d'instances à envoyer dans chaque requête de prédiction. La valeur par défaut est 64. L'augmentation de la taille du lot peut entraîner un débit plus élevé, mais elle peut également provoquer l'expiration des requêtes.
-
STARTING_REPLICA_COUNT : nombre de nœuds pour cette tâche de prédiction par lot.
Méthode HTTP et URL :
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corps JSON de la requête :
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "INPUT_FORMAT", "gcsSource": { "uris": ["INPUT_URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY", }, }, "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" ] } }, "startingReplicaCount": STARTING_REPLICA_COUNT }, "manualBatchTuningParameters": { "batch_size": BATCH_SIZE, } }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME 202005291958", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "INPUT_URI" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", }
BigQuery
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
-
LOCATION_ID : région où le modèle est stocké et où la tâche de prédiction par lot est exécutée. Exemple :
us-central1
-
PROJECT_ID : projet dans lequel la réservation a été créée. Pour utiliser une réservation partagée provenant d'un autre projet, vous devez partager la réservation avec ce projet. Pour en savoir plus, consultez Modifier les projets clients dans une réservation partagée.
-
BATCH_JOB_NAME : nom à afficher du job de prédiction par lot.
-
MODEL_ID : ID du modèle à utiliser pour effectuer des prédictions.
-
INPUT_PROJECT_ID : ID du projet Google Cloud à partir duquel vous souhaitez obtenir les données.
-
INPUT_DATASET_NAME : nom de l'ensemble de données BigQuery à partir duquel vous souhaitez obtenir les données.
-
INPUT_TABLE_NAME : nom de la table BigQuery à partir de laquelle vous souhaitez récupérer les données.
-
OUTPUT_PROJECT_ID : ID du projet Google Cloud dans lequel vous souhaitez enregistrer le résultat.
-
OUTPUT_DATASET_NAME : nom de l'ensemble de données BigQuery de destination dans lequel vous souhaitez enregistrer le résultat.
-
OUTPUT_TABLE_NAME : nom de la table BigQuery de destination dans laquelle vous souhaitez enregistrer la sortie.
-
MACHINE_TYPE : ressources de machine à utiliser pour ce job de prédiction par lots.
-
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 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.
-
BATCH_SIZE : nombre d'instances à envoyer dans chaque requête de prédiction. La valeur par défaut est 64. L'augmentation de la taille du lot peut entraîner un débit plus élevé, mais elle peut également provoquer l'expiration des requêtes.
-
STARTING_REPLICA_COUNT : nombre de nœuds pour cette tâche de prédiction par lot.
Méthode HTTP et URL :
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corps JSON de la requête :
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "bq://INPUT_PROJECT_ID.INPUT_DATASET_NAME.INPUT_TABLE_NAME" }, }, "outputConfig": { "predictionsFormat":"bigquery", "bigqueryDestination":{ "outputUri": "bq://OUTPUT_PROJECT_ID.OUTPUT_DATASET_NAME.OUTPUT_TABLE_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" ] } }, "startingReplicaCount": STARTING_REPLICA_COUNT }, "manualBatchTuningParameters": { "batch_size": BATCH_SIZE, } }
Pour envoyer votre requête, choisissez l'une des options suivantes :
curl
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Enregistrez le corps de la requête dans un fichier nommé request.json
, puis exécutez la commande suivante :
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME 202005291958", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "bigquerySource": { "uris": [ "INPUT_URI" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "bigqueryDestination": { "outputUri": "OUTPUT_URI" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", }
Récupérer les résultats de l'inférence par lot
Lorsqu'une tâche d'inférence par lot est terminée, le résultat de l'inférence est stocké dans le bucket Cloud Storage ou l'emplacement BigQuery que vous avez spécifié dans votre requête.
Étapes suivantes
- Découvrir les réservations de ressources zonales Compute Engine.
- Découvrez comment utiliser des réservations avec l'inférence en ligne Vertex AI.
- Découvrez comment utiliser des réservations avec Vertex AI Training.
- Découvrez comment afficher les réservations.
- Découvrez comment surveiller la consommation des réservations.