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 machine virtuelle (VM) nécessaires pour s'exécuter.
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, crée la réservation et les événements suivants se produisent :
- Vous pouvez immédiatement utiliser les ressources réservées, qui 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 utilise 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 que les réservations pour les processeurs, les VM avec GPU, ou les TPU (bêta).
- 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 sans serveur, l'inférence et Vertex AI Workbench (bêta).
- 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
pour consommer la réservation. 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 la section Exigences. - Pour utiliser une réservation partagée de VM avec 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 propriétaire des 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 infrastructure usage. Consultez les 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 d'utiliser une réservation de processeurs, de VM avec GPU ou de TPU, vous devez définir sa règle de partage pour autoriser Vertex AI à utiliser 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 Google Cloud console, sélectionnez Partager la réservation dans la section Services Google Cloud.
- Si vous utilisez Google Cloud CLI, incluez le
--reservation-sharing-policyflag défini surALLOW_ALL. - Si vous utilisez l'API REST, incluez le champ
serviceShareTypedéfini surALLOW_ALLdans le corps de la requête.
Autoriser la consommation d'une réservation existante
Vous ne pouvez modifier une réservation de VM avec GPU ou de TPU créée automatiquement 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 utilise une réservation Compute Engine de VM avec 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 ci-dessous, effectuez les remplacements suivants :
-
LOCATION_ID : région dans laquelle le modèle est stocké et le job de prédiction par lot est exécuté. Exemple :
us-central1. -
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 partager la réservation avec ce projet. Pour en savoir plus, consultez la section Modifier les projets clients dans une réservation partagée.
-
BATCH_JOB_NAME : nom à afficher pour le job de prédiction par lot.
-
MODEL_ID : ID du modèle à utiliser pour effectuer des prédictions.
-
INPUT_FORMAT : format de vos 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 : les ressources de la machine à utiliser pour ce job de prédiction par lot.
-
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 section GPU pour les charges de travail de calcul.
ACCELERATOR_COUNT : nombre d'accélérateurs à associer à la machine.
-
RESERVATION_AFFINITY_TYPE : doit être
ANY,SPECIFIC_RESERVATIONouNONE.ANYsignifie que les VM de votrecustomJobpeuvent automatiquement utiliser n'importe quelle réservation avec des propriétés correspondantes.SPECIFIC_RESERVATIONsignifie que les VM de votrecustomJobne peuvent utiliser qu'une réservation que les VM ciblent spécifiquement par nom.NONEsignifie que les VM de votrecustomJobne peuvent utiliser aucune réservation. SpécifierNONEa 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 des délais d'attente des requêtes.
-
STARTING_REPLICA_COUNT : nombre de nœuds pour ce job 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 ci-dessous, effectuez les remplacements suivants :
-
LOCATION_ID : région dans laquelle le modèle est stocké et le job de prédiction par lot est exécuté. Exemple :
us-central1. -
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 partager la réservation avec ce projet. Pour en savoir plus, consultez la section Modifier les projets clients dans une réservation partagée.
-
BATCH_JOB_NAME : nom à afficher pour le job de prédiction par lot.
-
MODEL_ID : ID du modèle à utiliser pour effectuer des prédictions.
-
INPUT_PROJECT_ID : ID du projet à partir duquel vous souhaitez obtenir les données. Google Cloud
-
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 obtenir les données.
-
OUTPUT_PROJECT_ID : ID du projet dans lequel vous souhaitez enregistrer la sortie. Google Cloud
-
OUTPUT_DATASET_NAME : nom de l'ensemble de données BigQuery de destination dans lequel vous souhaitez enregistrer la sortie.
-
OUTPUT_TABLE_NAME : nom de la table BigQuery de destination dans laquelle vous souhaitez enregistrer la sortie.
-
MACHINE_TYPE : les ressources de la machine à utiliser pour ce job de prédiction par lot.
-
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 section GPU pour les charges de travail de calcul.
ACCELERATOR_COUNT : nombre d'accélérateurs à associer à la machine.
-
RESERVATION_AFFINITY_TYPE : doit être
ANY,SPECIFIC_RESERVATIONouNONE.ANYsignifie que les VM de votrecustomJobpeuvent automatiquement utiliser n'importe quelle réservation avec des propriétés correspondantes.SPECIFIC_RESERVATIONsignifie que les VM de votrecustomJobne peuvent utiliser qu'une réservation que les VM ciblent spécifiquement par nom.NONEsignifie que les VM de votrecustomJobne peuvent utiliser aucune réservation. SpécifierNONEa 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 des délais d'attente des requêtes.
-
STARTING_REPLICA_COUNT : nombre de nœuds pour ce job 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 d'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.
Étape suivante
- Découvrir les réservations de ressources zonales Compute Engine .
- Découvrez comment utiliser les réservations avec Vertex AI inférence en ligne.
- Découvrez comment utiliser les réservations avec Vertex AI entraînement.
- Découvrez comment afficher les réservations.
- Découvrez comment surveiller la consommation des réservations.