Ce document explique comment créer et exécuter un job par lot qui utilise la flexibilité des instances. La flexibilité des instances vous permet d'autoriser un job à s'exécuter sur plusieurs types de machines que vous spécifiez et que vous pouvez éventuellement classer.
En autorisant davantage de types de machines pour un job, vous pouvez utiliser la flexibilité des instances pour améliorer la disponibilité, c'est-à-dire la probabilité que des ressources soient disponibles pour exécuter votre job. Pour savoir quelles fonctionnalités de disponibilité utiliser pour votre charge de travail, consultez Améliorer la disponibilité des ressources. Par exemple, la flexibilité des instances peut vous aider à effectuer les opérations suivantes :
- Réduisez la probabilité d'erreurs de disponibilité des ressources et des retards de planification associés.
- Sélectionnez des ressources avec une disponibilité plus élevée pour aider les jobs à se terminer plus rapidement. Par exemple :
- Augmente la probabilité d'obtenir plus d'instances pour les jobs qui prennent en charge le traitement parallèle.
- Obtenez des VM Spot moins susceptibles d'être préemptées.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez Premiers pas avec Batch et activez Batch en remplissant les conditions préalables pour les projets et les utilisateurs.
-
Pour obtenir les autorisations nécessaires pour créer un job, demandez à votre administrateur de vous accorder les rôles IAM suivants :
- Éditeur de tâches par lot (
roles/batch.jobsEditor) sur le projet - Utilisateur du compte de service (
roles/iam.serviceAccountUser) sur le compte de service du job, qui par défaut est le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
- Éditeur de tâches par lot (
Restrictions
Lorsqu'un job utilise la flexibilité des instances, toutes les restrictions suivantes s'appliquent :
L'amélioration de la disponibilité augmente avec le nombre de types de machines que vous autorisez un job à utiliser.
Le job ne peut pas spécifier le modèle de provisionnement
FLEX_STARTni le modèle de provisionnementRESERVATION_BOUND.Le job ne peut pas consommer de réservation spécifiquement ciblée. (Le champ
reservationdoit être indéfini ou défini surNO_RESERVATION.)Une réservation spécifiquement ciblée inclut toutes les réservations pour le modèle de provisionnement
RESERVATION_BOUNDet certaines réservations pour le modèle de provisionnementSTANDARD. Ces fonctionnalités sont intrinsèquement incompatibles, car la création d'instances ne peut réussir que pour le type de machine de la réservation.Chaque job peut comporter jusqu'à 50 sélections d'instances.
Chaque sélection d'instance dans un job doit avoir un nom unique, un classement unique et un ou plusieurs types de machines uniques.
Les types de machines ne peuvent pas se répéter. N'incluez chaque type de machine que dans une seule sélection d'instance par job.
Chaque job peut comporter jusqu'à 200 types de machines uniques dans ses sélections d'instances.
Bien qu'il soit facultatif de spécifier plusieurs types de machines dans la même sélection d'instances, cela est obligatoire si vous souhaitez obtenir des ressources avec une disponibilité plus élevée.
- Batch tente de sélectionner un ou plusieurs types de machines avec la disponibilité la plus élevée uniquement lorsque la sélection d'instances pour un rang comporte plusieurs types de machines. Par exemple, cette sélection est importante si vous souhaitez que votre job dispose de VM Spot moins susceptibles d'être préemptées ou de plus d'instances pour un job pouvant exécuter des tâches en parallèle.
- Sinon, lorsque la sélection d'instances pour un rang ne comporte qu'un seul type de machine, la flexibilité des instances ne permet que d'éviter les erreurs de disponibilité des ressources.
Le champ
machineTypene peut pas être inclus dans le job, et le type de machine pour tout modèle d'instance spécifié par le job est ignoré.Vous devez vérifier que chaque propriété que vous spécifiez pour le job est compatible avec chaque type de machine autorisé. Sinon, le job risque d'échouer après son envoi, car il ne peut pas créer d'instances. Par exemple, nous vous recommandons de vérifier qu'au moins les propriétés suivantes d'un job sont compatibles avec tous les types de machines :
- Emplacement (champ
allowedLocations[]si spécifié, sinonlocation) - Ressources de calcul par tâche (champ
computeResource) - Disques et images (champs
volumes[],disk[]etbootDisk) - réseau (champ
network) toutes les autres propriétés de l'instance (sous-champs
instances[]) :- plate-forme CPU minimale (champ
minCpuPlatform) - Modèle de provisionnement (champ
provisioningModel) - GPU (champ
accelerators[])
- plate-forme CPU minimale (champ
- Emplacement (champ
Vous ne pouvez pas remplacer les disques et les plates-formes de processeur minimales pour les jobs Batch. Tous les types de machines utilisent soit les valeurs que vous avez spécifiées (dans les sous-champs
policyou dans un modèle d'instance), soit, si aucune valeur n'est spécifiée, les valeurs par défaut d'un type de machine dans la sélection d'instance de priorité la plus élevée. Par conséquent, nous vous recommandons d'effectuer les opérations suivantes :Vérifiez que le type de disque de démarrage est compatible avec chaque type de machine autorisé. En résumé, les types de machines de 4e génération et ultérieurs ne sont pas compatibles avec les disques persistants, les types de machines de 2e génération et antérieurs ne sont pas compatibles avec Hyperdisk, et les types de machines de 3e génération et antérieurs utilisent des disques de démarrage persistants par défaut.
Ne spécifiez pas de configuration minimale de plate-forme de processeur ni de disques optionnels, sauf si vous avez vérifié qu'ils sont compatibles avec chaque type de machine autorisé.
Créer un job autorisé à utiliser plusieurs types de machines
Pour créer un job autorisé à utiliser plusieurs types de machines, sélectionnez l'une des méthodes suivantes.
gcloud
Pour configurer plusieurs types de machines lorsque vous utilisez la Google Cloud CLI pour créer un job, procédez comme suit :
Incluez le champ
instanceFlexibilityPolicyet les sous-champs dans le champallocationPolicydu fichier JSON qui spécifie les détails de configuration de votre job. Le champinstanceFlexibilityPolicyaccepte une ou plusieurs sélections d'instances, qui ont chacune un nom unique, un classement unique et une liste d'un ou plusieurs types de machines."allocationPolicy":{ "instanceFlexibilityPolicy":{ "instanceSelections":{ "INSTANCE_SELECTION_NAME":{ "rank": RANK, "machineTypes": [MACHINE_TYPES] } } } }Remplacez les éléments suivants :
INSTANCE_SELECTION_NAME: nom de la sélection d'instances. Si le job comporte plusieurs sélections d'instances, assurez-vous que chaque nom de ce job est unique.RANK(facultatif) : entier supérieur ou égal à zéro qui représente la priorité de cette sélection d'instance. La valeur la plus basse correspond à la priorité la plus élevée. Si aucune valeur n'est spécifiée, la valeur par défaut est0(priorité la plus élevée). Si le job comporte plusieurs sélections d'instances, assurez-vous que chaque classement de ce job est unique.MACHINE_TYPES: liste d'un ou de plusieurs types de machines, écrits sous forme de chaînes, pour cette sélection d'instances, séparés par des virgules. Vous ne pouvez inclure chaque type de machine que dans une seule sélection d'instances par job. Par exemple, une liste de trois types de machines peut être écrite comme suit :"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"Remplacez
MACHINE_TYPE_1,MACHINE_TYPE_2etMACHINE_TYPE_3par un type de machine (par exemple,e2-micro,e2-smalletn1-standard-2).
Pour en savoir plus, consultez également l'exemple de job.
Tant que cette fonctionnalité est disponible en preview, vous devez utiliser la commande
gcloud alpha batch jobs submitpour créer et envoyer le job.gcloud alpha batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILERemplacez les éléments suivants :
JOB_NAME: nom du job.LOCATION: emplacement du job.JSON_CONFIGURATION_FILE: chemin d'accès à un fichier JSON contenant les détails de configuration du job.
REST
Pour utiliser l'API Batch afin de créer un job qui utilise plusieurs types de machines, utilisez la méthode v1alpha jobs.create tant que cette fonctionnalité est en preview.
Pour spécifier plusieurs types de machines pour un job, incluez le champ instanceFlexibilityPolicy et les sous-champs dans le champ allocationPolicy du corps principal du fichier JSON.
Le champ instanceFlexibilityPolicy accepte une ou plusieurs sélections d'instances, chacune ayant un nom unique, un rang unique et une liste d'un ou plusieurs types de machines.
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"INSTANCE_SELECTION_NAME":{
"rank": RANK,
"machineTypes": [MACHINE_TYPES]
}
}
}
}
Remplacez les éléments suivants :
INSTANCE_SELECTION_NAME: nom de la sélection d'instances. Si le job comporte plusieurs sélections d'instances, assurez-vous que chaque nom de ce job est unique.RANK: entier égal ou supérieur à zéro représentant la priorité de cette sélection d'instance, où la valeur la plus basse correspond à la priorité la plus élevée (facultatif). Si aucune valeur n'est spécifiée, la valeur par défaut est0(priorité la plus élevée). Si le job comporte plusieurs sélections d'instances, assurez-vous que chaque rang de ce job est unique.MACHINE_TYPES: liste d'un ou de plusieurs types de machines, écrits sous forme de chaînes, pour cette sélection d'instances, séparés par des virgules. Vous ne pouvez inclure chaque type de machine que dans une seule sélection d'instances par job. Par exemple, une liste de trois types de machines peut être écrite comme suit :"MACHINE_TYPE_1", "MACHINE_TYPE_2", "MACHINE_TYPE_3"Remplacez
MACHINE_TYPE_1,MACHINE_TYPE_2etMACHINE_TYPE_3par un type de machine (par exemple,e2-micro,e2-smalletn1-standard-2).
Pour en savoir plus, consultez également l'exemple de job.
Exemple de fichier de configuration JSON pour un job
Par exemple, lorsque vous utilisez gcloud CLI ou l'API Batch, vous pouvez utiliser le fichier de configuration JSON suivant pour créer un job de script de base comportant deux sélections d'instances :
- La sélection d'instances nommée
first-choicea la priorité la plus élevée ("rank": 0) et trois types de machines (e2-micro,e2-smalletn1-standard-2). - La sélection d'instance nommée
second-choicea la deuxième priorité ("rank": 1) et un type de machine (e2-medium).
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello World! This is task $BATCH_TASK_INDEX."
}
}
]
},
"taskCount": 3
}
],
"allocationPolicy":{
"instanceFlexibilityPolicy":{
"instanceSelections":{
"first-choice":{
"rank": 0,
"machineTypes": ["e2-micro", "e2-small", "n1-standard-2"]
},
"second-choice":{
"rank": 1,
"machineTypes": ["e2-medium"]
}
}
}
}
}
Étapes suivantes
- Si vous rencontrez des problèmes pour créer ou exécuter un job, consultez la section Dépannage.
- Afficher les jobs et les tâches
- En savoir plus sur les options de création de jobs