Ce document explique comment configurer un job par lot avec des tâches étroitement couplées qui communiquent entre elles sur différentes VM à l'aide d'une bibliothèque d'interface de transmission de messages (MPI, Message Passing Interface).
Pour les tâches par lot, le couplage décrit les tâches d'interdépendance. Cela a une incidence sur la configuration du 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 qui peuvent s'exécuter indépendamment.
- Tâches étroitement couplées:tâches qui dépendent les unes des autres pour s'exécuter.
Vous pouvez éventuellement créer une tâche qui utilise une bibliothèque MPI pour permettre aux tâches à couplage fort de communiquer entre elles sur différentes instances de VM. Un cas d'utilisation courant de MPI est l'utilisation de charges de travail de calcul hautes performances (HPC, High-Performance Computing) à couplage fort.
Avant de commencer
- Si vous n'avez jamais utilisé Batch, consultez la page 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 une tâche, demandez à votre administrateur de vous attribuer 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 section Gérer les accès.
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 pour cette tâche, assurez-vous qu'il dispose d'une règle de pare-feu autorisant les connexions 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 un job qui utilise l'indicateur MPI pour les tâches à couplage fort
Cette section fournit des exemples de création d'une tâche pouvant utiliser MPI. L'exemple de job comporte notamment trois exécutables:
- Le premier exécutable est un script qui prépare la tâche pour MPI en désactivant le multithreading simultané et en installant 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 l'élément 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 un job qui utilise MPI pour les tâches à couplage fort à l'aide de gcloud CLI ou de l'API Batch.
gcloud
Pour créer une tâche de script utilisant MPI pour les tâches à couplage fort à l'aide de gcloud CLI, procédez comme suit:
Créez un fichier de configuration JSON avec le contenu suivant:
{ "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
: script exécutable pour une charge de travail qui utilise MPI.TASK_COUNT
: nombre de tâches du job. La valeur doit être un nombre entier compris entre1
et la limite de tâches par groupe de tâches. Pour utiliser les bibliothèques MPI fournies par Batch, ce champ est obligatoire et doit être défini sur2
ou une valeur supérieure.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 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
: lorsque la valeur esttrue
, la tâche crée un fichier répertoriant 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
. Pour utiliser les bibliothèques MPI fournies par Batch, ce champ doit être défini sur "true".PERMISSIVE_SSH
: lorsque la valeur esttrue
, Batch configure SSH pour permettre une 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 fournies par Batch, ce champ doit être défini sur "true".
Pour créer la tâche, utilisez la 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
: lieu de la tâche.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.
Vous pouvez éventuellement augmenter 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 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 celle-ci.
Par exemple, pour créer une tâche de script à partir d'un modèle d'instance qui utilise MPI et génère une tâche qui génère le nom d'hôte des trois tâches dans le groupe de tâches:
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 ci-dessous.
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Pour créer une tâche de script qui utilise un MPI pour les tâches à couplage fort à 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 votre projet.LOCATION
: lieu de la tâche.JOB_NAME
: nom de la tâche.SCRIPT
: script exécutable pour une charge de travail utilisant MPI.TASK_COUNT
: nombre de tâches du job. La valeur doit être un nombre entier compris entre1
et la limite de tâches par groupe de tâches. Pour utiliser les bibliothèques MPI fournies par Batch, ce champ est obligatoire et doit être défini sur2
ou une valeur supérieure.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 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
: lorsque la valeur esttrue
, la tâche crée un fichier répertoriant les instances de VM exécutées dans un groupe de tâches. Le chemin d'accès au fichier est stocké dans la variable d'environnementBATCH_HOSTS_FILE
. Pour utiliser les bibliothèques MPI fournies par Batch, ce champ doit être défini sur "true".PERMISSIVE_SSH
: lorsque la valeur esttrue
, 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 les bibliothèques MPI fournies par Batch, ce champ doit être défini sur "true".
Vous pouvez éventuellement augmenter 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 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 celle-ci.
Par exemple, pour créer une tâche de script à partir d'un modèle d'instance qui utilise MPI et génère pour une tâche le nom d'hôte des trois tâches du groupe, 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
est l'ID de votre projet.
Étapes suivantes
- Pour obtenir un exemple plus détaillé de tâche qui utilise MPI pour des tâches à couplage fort, consultez la section Exécuter le modèle de recherche et de prévision météorologique avec Batch.
- Découvrez comment réduire la latence pour les jobs comportant des tâches à couplage fort.
- 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
- Apprenez-en plus sur les options de création de tâches.