Ce document explique comment configurer une tâche par lot avec des tâches étroitement couplées qui communiquent entre elles sur différentes VM à l'aide d'une bibliothèque MPI (Message Passing Interface).
Pour les tâches par lot, le couplage décrit les tâches interdépendantes. Cela influence la façon dont vous configurez le nombre de tâches pouvant s'exécuter en parallèle (plutôt que de manière séquentielle) à l'aide du champ parallelism
d'une tâche.
Les tâches peuvent être décrites à l'aide des types de couplage suivants:
- Tâches faiblement couplées : tâches pouvant s'exécuter indépendamment.
- Tâches étroitement couplées:tâches interdépendantes pour s'exécuter.
Vous pouvez éventuellement créer une tâche qui utilise une bibliothèque MPI pour permettre aux tâches étroitement couplées de communiquer entre elles sur différentes instances de VM. Utilisation courante le cas de MPI est des charges de travail de calcul hautes performances (HPC) à couplage fort.
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 est par défaut le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez la page 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 par lot (
- Si vous spécifiez le réseau ce job, assurez-vous que le réseau dispose d'une règle de pare-feu qui autorise entre les VM de la tâche. Découvrez comment configurer des règles de pare-feu VPC pour les cas d'utilisation courants.
Créer et exécuter une tâche qui utilise MPI pour des tâches étroitement couplées
Cette section fournit des exemples de création d'une tâche pouvant utiliser MPI. Il est à noter que le job d'exemple comporte trois exécutables:
- Le premier exécutable est un script qui prépare le job pour MPI en Désactivation du multithreading simultané et installation d'Intel MPI.
- Le deuxième exécutable est un exécutable de barrière vide (au format
{ "barrier": {} }
), qui garantit que toutes les tâches terminent la configuration de MPI avant de passer aux futurs exécutables. - Le troisième exécutable (et tous les exécutables suivants) est disponible pour la charge de travail du job.
Vous pouvez créer une tâche qui utilise MPI pour des tâches fortement couplées à l'aide de la méthode gcloud CLI ou l'API Batch.
gcloud
Pour créer une tâche de script qui utilise MPI pour les tâches étroitement couplées à l'aide de la CLI gcloud, procédez comme suit :
Créez un fichier de configuration JSON contenant les éléments suivants :
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;" } }, { "barrier": {} }, { "script": { SCRIPT } } ] }, "taskCount": TASK_COUNT, "taskCountPerNode": TASK_COUNT_PER_NODE, "requireHostsFile": REQUIRE_HOSTS_FILE, "permissiveSsh": PERMISSIVE_SSH } ] }
Remplacez les éléments suivants :
SCRIPT
: un script exécutable pour une charge de travail qui utilise MPI.TASK_COUNT
: nombre de tâches de la tâche. Cette valeur doit être un nombre entier compris entre1
et la limite de tâches par groupe de tâches. Pour utiliser l'IMPI, procédez comme suit : bibliothèques fournies par Batch, ce champ est obligatoire et doit être défini sur2
ou plus.TASK_COUNT_PER_NODE
: le nombre de tâches un job peut s'exécuter simultanément sur une instance de VM. Pour utiliser les bibliothèques MPI fournies par Batch, ce champ est obligatoire et doit être défini sur1
, ce qui équivaut à exécuter une instance de VM par tâche.REQUIRE_HOSTS_FILE
: si défini surtrue
, le crée un fichier listant les instances de VM en cours d'exécution dans un groupe de tâches. Le chemin d'accès au fichier est stocké dans la variable d'environnementBATCH_HOSTS_FILE
. À utilisez les bibliothèques MPI fournies par Batch, ce champ doit être défini sur "true".PERMISSIVE_SSH
: lorsque la valeur est définie surtrue
, Batch configure SSH pour autoriser la communication sans mot de passe entre les instances de VM exécutées dans un groupe de tâches. Pour utiliser la Bibliothèques MPI fournies par Batch, ce champ doit être défini sur "true".
Pour créer la tâche, utilisez la méthode Commande
gcloud batch jobs submit
gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom de la tâche.LOCATION
: emplacement de la tâche.JSON_CONFIGURATION_FILE
: chemin d'accès d'un fichier JSON contenant les détails de configuration du job.
Vous pouvez éventuellement améliorer les performances des bibliothèques MPI fournies par Batch en procédant comme suit :
- Créez et exécutez une tâche à l'aide d'un modèle d'instance de VM et spécifiez un modèle d'instance de VM compatible avec HPC dans les ressources de votre tâche.
- Spécifiez Cloud Logging comme destination des informations de journalisation de votre tâche dans les ressources de votre tâche.
Par exemple, pour créer une tâche de script à partir d'un modèle d'instance qui utilise MPI, et fait qu'une tâche génère le nom d'hôte des trois tâches de la tâche groupe:
Dans le répertoire actuel, créez un fichier JSON nommé
example-job-uses-mpi.json
avec le contenu suivant:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;" } }, { "barrier": {} }, { "script": { "text": "if [ $BATCH_TASK_INDEX = 0 ]; then mpirun -hostfile $BATCH_HOSTS_FILE -np 3 hostname; fi" } }, { "barrier": {} } ] }, "taskCount": 3, "taskCountPerNode": 1, "requireHostsFile": true, "permissiveSsh": true } ], "allocationPolicy": { "instances": [ { "instanceTemplate": "example-template-job-uses-mpi" } ] }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Exécutez la commande suivante :
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Pour créer un job de script qui utilise un MPI pour des tâches étroitement couplées à l'aide de l'API Batch, utilisez la méthode jobs.create
et spécifiez les champs permissiveSsh
, requireHostsFile
, taskCount
et taskCountPerNode
.
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_ID
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
}
},
{ "barrier": {} },
{
"script": {
SCRIPT
}
}
]
},
"taskCount": TASK_COUNT,
"taskCountPerNode": TASK_COUNT_PER_NODE,
"requireHostsFile": REQUIRE_HOSTS_FILE,
"permissiveSsh": PERMISSIVE_SSH
}
]
}
Remplacez les éléments suivants :
PROJECT_ID
: ID de projet de votre projet.LOCATION
: emplacement du travail.JOB_NAME
: nom de la tâche.SCRIPT
: le script exécutable pour une charge de travail qui utilise MPI.TASK_COUNT
: nombre de tâches associées à la tâche. La doit être un nombre entier compris entre1
et la limite de tâches par groupe de tâches. Pour utiliser l'IMPI, procédez comme suit : bibliothèques fournies par Batch, ce champ est obligatoire et doit être défini sur2
ou plus.TASK_COUNT_PER_NODE
: nombre de tâches qu'une tâche peut exécuter simultanément sur une instance de VM. Pour utiliser les bibliothèques MPI, fourni par Batch, ce champ est obligatoire et doit être défini à1
, ce qui équivaut à exécuter une instance de VM par tâche.REQUIRE_HOSTS_FILE
: si défini surtrue
, le job crée un fichier listant les instances de VM en cours d'exécution dans un groupe de tâches. Fichier chemin d'accès est stocké dans la variable d'environnementBATCH_HOSTS_FILE
. Pour utiliser la Bibliothèques MPI fournies par Batch, ce champ doit être défini sur "true".PERMISSIVE_SSH
: si défini surtrue
, Configuration SSH par lot pour autoriser la communication sans mot de passe entre les instances de VM exécutées dans un groupe de tâches. Pour utiliser les bibliothèques MPI, fournie par Batch, ce champ doit être défini sur "true".
Vous pouvez éventuellement améliorer les performances des bibliothèques MPI fournies par Batch en procédant comme suit :
- Créez et exécutez une tâche à l'aide d'un modèle d'instance de VM et spécifiez un modèle d'instance de VM compatible avec HPC dans les ressources de votre tâche.
- Spécifiez Cloud Logging comme destination pour les informations de journalisation de votre job dans les ressources de votre job.
Par exemple, pour créer une tâche de script à partir d'un modèle d'instance qui utilise MPI et qui génère une sortie de tâche avec le nom d'hôte des trois tâches du groupe de tâches, utilisez la requête suivante :
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-template-job-uses-mpi
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
}
},
{ "barrier": {} },
{
"script": {
"text":
"if [ $BATCH_TASK_INDEX = 0 ]; then
mpirun -hostfile $BATCH_HOSTS_FILE -np 3 hostname;
fi"
}
},
{ "barrier": {} }
]
},
"taskCount": 3,
"taskCountPerNode": 1,
"requireHostsFile": true,
"permissiveSsh": true
}
],
"allocationPolicy": {
"instances": [
{
"instanceTemplate": "example-template-job-uses-mpi"
}
]
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
où PROJECT_ID
correspond à l'ID de projet de votre projet.
Étape suivante
- Pour un exemple plus détaillé d'une tâche qui utilise le MPI pour des tâches fortement couplées, consultez la page Exécuter le modèle de recherche et de prévision météorologique avec Batch.
- Découvrez comment réduire la latence des tâches associées à un couplage fort.
- Si vous rencontrez des difficultés pour créer ou exécuter une tâche, consultez la section Dépannage.
- Afficher les jobs et les tâches
- Découvrez d'autres options de création de tâches.