Ce document explique comment créer et exécuter une tâche Batch qui utilise la flexibilité des instances. La flexibilité des instances vous permet d'autoriser une tâche à 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 une tâche, vous pouvez utiliser la flexibilité des instances pour améliorer la disponibilité, qui correspond à la probabilité que des ressources soient disponibles pour exécuter votre tâche. Pour en savoir plus sur le choix des 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éduire la probabilité de erreurs de disponibilité des ressources et les retards de planification associés.
- Sélectionner des ressources avec une disponibilité plus élevée pour aider les tâches à se terminer plus rapidement, par exemple :
- Augmenter la probabilité d'obtenir davantage d'instances pour les tâches qui prennent en charge le traitement parallèle.
- Obtenir 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 prérequis pour les projets et les utilisateurs.
-
Pour obtenir les autorisations nécessaires pour créer une tâche, demandez à votre administrateur de vous accorder les rôles IAM suivants :
- Éditeur de tâches Batch (
roles/batch.jobsEditor) sur le projet - Utilisateur du compte de service (
roles/iam.serviceAccountUser) sur le compte de service de la tâche, qui est par défaut 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 via des rôles personnalisés ou d'autres rôles prédéfinis.
- Éditeur de tâches Batch (
Restrictions
Lorsqu'une tâche 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 qu'une tâche est autorisée à utiliser.
La tâche ne peut pas spécifier le modèle de provisionnement
FLEX_STARTni le modèle de provisionnementRESERVATION_BOUND.La tâche ne peut pas utiliser une réservation spécifiquement ciblée. (Le
reservationchamp doit être non dé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'instance ne peut réussir que pour le type de machine de la réservation.Chaque tâche peut comporter jusqu'à 50 sélections d'instances.
Chaque sélection d'instance dans une tâche doit avoir un nom unique, un classement unique et un ou plusieurs types de machines uniques.
Les types de machines ne peuvent pas être répétés. Incluez chaque type de machine dans une seule sélection d'instance par tâche.
Chaque tâche peut comporter jusqu'à 200 types de machines uniques dans ses sélections d'instances.
Bien que la spécification de plusieurs types de machines dans la même sélection d'instance soit facultative, elle est obligatoire si vous souhaitez 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'instance pour un classement comporte plusieurs types de machines. Par exemple, cette sélection est importante si vous souhaitez que votre tâche comporte des VM Spot moins susceptibles d'être préemptées ou davantage d'instances pour une tâche pouvant exécuter des tâches en parallèle.
- Sinon, lorsque la sélection d'instance pour un classement ne comporte qu'un seul type de machine, la flexibilité des instances permet uniquement d'éviter les erreurs de disponibilité des ressources.
La tâche ne peut pas inclure le
machineTypechamp, et le type de machine pour tout modèle d'instance spécifié par la tâche est ignoré.Vous devez vérifier que chaque propriété que vous spécifiez pour la tâche est compatible avec chaque type de machine autorisé. Sinon, la tâche peut échouer après avoir été envoyée, car elle ne peut pas créer d'instances. Par exemple, nous vous recommandons de vérifier qu'au moins les propriétés suivantes d'une tâche sont compatibles avec tous les types de machines :
- emplacement (champ
allowedLocations[]s'il est 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 d'instance (sous-champs
instances[]) :- configuration minimale de la plate-forme du CPU (champ
minCpuPlatform) - modèle de provisionnement (champ
provisioningModel) - GPU (champ
accelerators[])
- configuration minimale de la plate-forme du CPU (champ
- emplacement (champ
Vous ne pouvez pas remplacer les disques ni les configurations minimales de la plate-forme du CPU pour les tâches Batch. Tous les types de machines utilisent soit les valeurs que vous avez spécifiées (dans les sous-champs
policyou un modèle d'instance), soit, si elles ne sont pas spécifiées, les valeurs par défaut d'un type de machine dans la sélection d'instance la plus prioritaire. Par conséquent, nous vous recommandons de procéder comme suit :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 la plate-forme du CPU ni de disques facultatifs, sauf si vous avez vérifié qu'ils sont compatibles avec chaque type de machine autorisé.
Créer une tâche autorisée à utiliser plusieurs types de machines
Pour créer une tâche autorisée à 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 une tâche, procédez comme suit :
Incluez le
instanceFlexibilityPolicychamp et les sous-champs dans le champallocationPolicydu fichier JSON qui spécifie les détails de configuration de votre tâche. Le champinstanceFlexibilityPolicyest compatible avec une ou plusieurs sélections d'instances, chacune ayant un nom unique, un classement unique et une liste d'un ou de 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 la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque nom de cette tâche est unique.RANK(facultatif) : entier supérieur ou égal à zéro représentant la priorité de cette sélection d'instances, la valeur la plus basse étant la priorité la plus élevée. Si elle n'est pas spécifiée, la valeur par défaut est0(priorité la plus élevée). Si la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque classement de cette tâche 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'instance par tâche. 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 exemplee2-micro,e2-smalletn1-standard-2.
Pour en savoir plus, consultez également l'exemple de tâche.
Tant que cette fonctionnalité est en version bêta, vous devez utiliser la
gcloud alpha batch jobs submitcommande pour créer et envoyer la tâche.gcloud alpha batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILERemplacez les éléments suivants :
JOB_NAME: nom de la tâche.LOCATION: l'emplacement de la tâche.JSON_CONFIGURATION_FILE: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.
REST
Pour utiliser l'API Batch afin de créer une tâche qui utilise plusieurs
types de machines, utilisez la
méthode v1alpha jobs.create
tant que cette fonctionnalité est en
version bêta.
Pour spécifier plusieurs types de machines pour une tâche, incluez le
instanceFlexibilityPolicy champ
et sous-champs
dans le allocationPolicy champ du corps principal du fichier JSON.
Le champ instanceFlexibilityPolicy est compatible avec une ou plusieurs sélections d'instances, chacune ayant un nom unique, un classement unique et une liste d'un ou de 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 la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque nom de cette tâche est unique.RANK(facultatif) : entier supérieur ou égal à zéro représentant la priorité de cette sélection d'instances, la valeur la plus basse étant la priorité la plus élevée. Si elle n'est pas spécifiée, la valeur par défaut est0(priorité la plus élevée). Si la tâche comporte plusieurs sélections d'instances, assurez-vous que chaque classement de cette tâche 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'instance par tâche. 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 exemplee2-micro,e2-smalletn1-standard-2.
Pour en savoir plus, consultez également l'exemple de tâche.
Exemple de fichier de configuration JSON pour une tâche
Par exemple, lorsque vous utilisez la gcloud CLI ou l'API Batch, vous pouvez utiliser le fichier de configuration JSON suivant pour créer une tâche 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-small, etn1-standard-2). - La sélection d'instances 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"]
}
}
}
}
}
Étape suivante
- Si vous rencontrez des problèmes lors de la création ou de l'exécution d'une tâche, consultez la section Dépannage.
- Afficher les tâches.
- En savoir plus sur les options de création de tâches.