Ce document explique comment utiliser les réservations Compute Engine pour vous assurer que vos jobs d'entraînement sans serveur 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 tel est le cas, Compute Engine réserve les ressources, crée la réservation et les événements suivants se produisent :
- Vous pouvez consommer immédiatement les ressources réservées, et 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 qui ne font pas partie de la réservation, comme les disques ou les adresses IP. Pour en savoir plus, consultez la section Tarifs des réservations.
Limites et exigences
Tenez compte des limites et des exigences suivantes lorsque vous utilisez des réservations Compute Engine avec Agent Platform :
- Agent Platform ne peut utiliser que des réservations pour des processeurs, des VM GPU ou des TPU (preview).
- Agent Platform 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 Agent Platform n'est possible que pour l'entraînement sans serveur, l'inférence et Gemini Enterprise Agent Platform Workbench (preview).
- Pour utiliser la réservation, les propriétés de VM de la réservation doivent correspondre exactement à celles de votre charge de travail Agent Platform. Par exemple, si une réservation spécifie un type de machine
a2-ultragpu-8g, la charge de travail Agent Platform 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 à l'aide de son projet propriétaire ou d'un projet consommateur 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 Agent Platform, nous vous recommandons d'augmenter le nombre de VM d'au moins une VM pour chaque déploiement simultané.
-
Le démarrage flexible pour Dynamic Workload Scheduler et l'exécution de jobs d'entraînement sur une ressource persistante sont tous deux compatibles, sauf lorsque vous utilisez des réservations Compute Engine avec l'entraînement Agent Platform.
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'entraînement sans serveur Agent Platform s'ajoutent à votre utilisation de l'infrastructure. Consultez les tarifs des modèles entraînés personnalisés.
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 processeurs, de VM GPU ou de TPU, vous devez définir sa règle de partage pour autoriser Agent Platform à 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 Agent Platform à utiliser la réservation comme suit :
- Si vous utilisez la console Cloud de Confiance , sélectionnez Partager la réservation dans la section Services Google Cloud.
- Si vous utilisez Google Cloud CLI, incluez le flag
--reservation-sharing-policydéfinie 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 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 Agent Platform à consommer 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 consommée, consultez Vérifier la consommation des réservations dans la documentation Compute Engine.Créer un job d'entraînement sans serveur avec une réservation
Utilisez l'API REST pour créer un job d'entraînement sans serveur qui utilise une réservation Compute Engine de VM GPU.
Fonctionnement de l'affinité et de la validation des réservations
Lorsque vous envoyez un job d'entraînement personnalisé qui spécifie une configuration reservationAffinity, Agent Platform valide votre configuration de réservation avant de mettre le job en file d'attente :
- Pour
ANY_RESERVATION:- Au moins une réservation consommée automatiquement doit exister dans la région de votre job et être partagée avec Agent Platform (et partagée avec votre projet, si la réservation se trouve dans un projet hôte différent).
- Les champs
keyetvaluesdereservationAffinitydoivent être omis ou vides.
- Pour
SPECIFIC_RESERVATION:- Le champ
keydoit être défini surcompute.googleapis.com/reservation-name, et le champvaluesdoit spécifier une seule réservation existante dans une zone de la région du job. - La réservation spécifiée doit être configurée pour un ciblage spécifique (et non une consommation automatique) et doit être partagée avec Agent Platform (et avec votre projet, si la réservation se trouve dans un autre projet hôte).
- Le champ
Si l'une de ces vérifications échoue, l'API rejette immédiatement la requête avec une erreur INVALID_ARGUMENT. La validation initiale ne vérifie pas la compatibilité du type de machine ni la capacité de réservation disponible au moment de l'envoi du job.
Le tableau suivant récapitule la façon dont Agent Platform gère un job d'entraînement en fonction de l'état de la réservation et de reservationAffinityType :
| Scénario | Comportement avec ANY_RESERVATION |
Comportement avec SPECIFIC_RESERVATION |
|---|---|---|
| La réservation existe, correspond aux propriétés de la machine et dispose d'une capacité disponible | Le job est accepté, acheminé vers la zone de la réservation et consomme la réservation. | Le job est accepté et utilise la réservation spécifiée. |
| La réservation existe et correspond aux propriétés de la machine, mais elle est pleine | Le job est accepté et acheminé vers la zone où se trouve votre réservation correspondante. La capacité réservée étant épuisée, Agent Platform tente de provisionner de la capacité à la demande. | Le job est accepté, mais si la capacité ne devient pas disponible dans la réservation ciblée, Agent Platform. Il ne bascule pas vers la capacité à la demande. |
| La réservation existe, mais n'est pas partagée avec Agent Platform ni avec le projet client |
Le job échoue immédiatement lors de l'envoi avec une erreur INVALID_ARGUMENT (sauf s'il existe une autre réservation accessible automatiquement consommée dans la région).
|
Le job échoue immédiatement lors de l'envoi avec une erreur INVALID_ARGUMENT.
|
| Aucune réservation accessible n'existe dans la région du job |
Le job échoue immédiatement lors de l'envoi avec une erreur INVALID_ARGUMENT. Il ne revient pas à la capacité à la demande.
|
Le job échoue immédiatement lors de l'envoi avec une erreur INVALID_ARGUMENT.
|
REST
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- LOCATION : région où le conteneur ou le package Python sera exécuté.
- PROJECT_ID : projet dans lequel la réservation a été créée. Pour utiliser une réservation partagée d'un autre projet, vous devez partager la réservation avec ce projet. Pour en savoir plus, consultez Modifier les projets clients d'une réservation partagée.
-
JOB_NAME : valeur obligatoire. nom à afficher pour
CustomJob. - MACHINE_TYPE : type de machine à utiliser pour le job. Le paramètre par défaut est
n1-standard-2. Pour en savoir plus sur les types de machines compatibles, consultez Configurer des ressources de calcul pour l'entraînement personnalisé. - 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.
- Définissez le job d'entraînement personnalisé :
RESERVATION_AFFINITY_TYPE : La valeur doit être
ANY_RESERVATION,SPECIFIC_RESERVATIONouNO_RESERVATION.ANY_RESERVATIONsignifie que les VM de votrecustomJobpeuvent automatiquement utiliser toute réservation avec des propriétés correspondantes.SPECIFIC_RESERVATIONsignifie que les VM de votrecustomJobne peuvent consommer qu'une réservation que les VM ciblent spécifiquement par son nom.NO_RESERVATIONsignifie que les VM de votrecustomJobne peuvent utiliser aucune réservation. SpécifierNO_RESERVATIONa le même effet que d'omettre une spécification d'affinité de réservation.
- ZONE : zone dans laquelle la réservation a été créée.
- RESERVATION_NAME : nom de votre réservation.
- DISK_TYPE : facultatif. Type de disque de démarrage à utiliser pour la tâche (
pd-standardpar défaut) oupd-ssd. En savoir plus sur les types de disques - DISK_SIZE : facultatif. Taille en Go du disque de démarrage à utiliser pour la tâche. La valeur par défaut est 100.
- REPLICA_COUNT : nombre d'instances dupliquées de nœuds de calcul à utiliser. Dans la plupart des cas, définissez cette valeur sur
1pour votre premier pool de nœuds de calcul. - Si votre application d'entraînement s'exécute dans un conteneur personnalisé, spécifiez les éléments suivants :
- CUSTOM_CONTAINER_IMAGE_URI : URI d'une image de conteneur dans Artifact Registry ou Docker Hub à exécuter sur chaque instance répliquée de nœud de calcul.
- CUSTOM_CONTAINER_COMMAND : facultatif. Commande à appeler au démarrage du conteneur. Cette commande ignore le point d'entrée par défaut du conteneur.
- CUSTOM_CONTAINER_ARGS : facultatif. Arguments à transmettre lors du démarrage du conteneur.
- Si votre application d'entraînement est un package Python qui s'exécute dans un conteneur prédéfini, spécifiez les éléments suivants :
- EXECUTOR_IMAGE_URI : URI de l'image de conteneur qui exécute le code fourni. Pour en savoir plus, consultez la liste des conteneurs prédéfinis disponibles pour l'entraînement.
- PYTHON_PACKAGE_URIS : liste d'URI Cloud Storage séparés par une virgule spécifiant les fichiers de package Python correspondant au programme d'entraînement et ses packages dépendants. Le nombre maximal d'URI de package est de 100.
- PYTHON_MODULE : nom du module Python à exécuter après l'installation des packages.
- PYTHON_PACKAGE_ARGS : facultatif. Arguments de ligne de commande à transmettre au module Python.
- TIMEOUT : facultatif. Durée d'exécution maximale pour la tâche.
- Spécifiez les éléments LABEL_NAME et LABEL_VALUE pour tous les libellés que vous souhaitez appliquer à ce job personnalisé.
Méthode HTTP et URL :
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs
Corps JSON de la requête :
{
"displayName": "JOB_NAME",
"jobSpec": {
"workerPoolSpecs": [
{
"machineSpec": {
"machineType": "MACHINE_TYPE",
"acceleratorType": "ACCELERATOR_TYPE",
"acceleratorCount": ACCELERATOR_COUNT,
"reservationAffinity": {
"reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
// Use the following key and values only if
// the reservationAffinityType is SPECIFIC_RESERVATION.
"key": "compute.googleapis.com/reservation-name",
"values": [
"projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
]
},
},
"replicaCount": REPLICA_COUNT,
"diskSpec": {
"bootDiskType": DISK_TYPE,
"bootDiskSizeGb": DISK_SIZE
},
// Union field task can be only one of the following:
"containerSpec": {
"imageUri": CUSTOM_CONTAINER_IMAGE_URI,
"command": [
CUSTOM_CONTAINER_COMMAND
],
"args": [
CUSTOM_CONTAINER_ARGS
]
},
"pythonPackageSpec": {
"executorImageUri": EXECUTOR_IMAGE_URI,
"packageUris": [
PYTHON_PACKAGE_URIS
],
"pythonModule": PYTHON_MODULE,
"args": [
PYTHON_PACKAGE_ARGS
]
}
// End of list of possible types for union field task.
}
// Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
// for distributed training.
],
"scheduling": {
"timeout": TIMEOUT
}
},
"labels": {
LABEL_NAME_1": LABEL_VALUE_1,
LABEL_NAME_2": LABEL_VALUE_2
}
}
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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"
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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
La réponse contient des informations sur les spécifications, ainsi que sur TRAININGPIPELINE_ID.
Étape suivante
- Découvrir les réservations de ressources zonales Compute Engine.
- Découvrez comment utiliser des réservations avec l'inférence en ligne Agent Platform.
- Découvrez comment utiliser des réservations avec l'inférence par lot Agent Platform.
- Découvrez comment afficher les réservations.
- Découvrez comment surveiller la consommation des réservations.