In diesem Dokument wird beschrieben, wie Sie einen Batchjob mit eng gekoppelten Aufgaben konfigurieren, die über eine Message Passing Interface (MPI)-Bibliothek auf verschiedenen VMs miteinander kommunizieren.
Bei Batchjobs beschreibt die Kopplung die Abhängigkeit von Aufgaben. Dies wirkt sich darauf aus, wie Sie die Anzahl der Aufgaben konfigurieren, die parallel (statt sequenziell) ausgeführt werden können, indem Sie das Feld parallelism
eines Jobs verwenden.
Aufgaben können mit den folgenden Arten der Kopplung beschrieben werden:
- Lose gekoppelte Aufgaben:Aufgaben, die unabhängig voneinander ausgeführt werden können.
- Eng gekoppelte Aufgaben:Aufgaben, die voneinander abhängig sind.
Optional können Sie einen Job erstellen, der eine MPI-Bibliothek verwendet, damit eng gekoppelte Aufgaben über verschiedene VM-Instanzen hinweg miteinander kommunizieren können. Ein häufiger Anwendungsfall für MPI sind eng gekoppelte HPC-Arbeitslasten (High Performance Computing, Hochleistungs-Computing).
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Abschnitt Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batch-Job-Editor (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für das Dienstkonto des Jobs, das standardmäßig das Compute Engine-Standarddienstkonto ist
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batch-Job-Editor (
- Wenn Sie das Netzwerk für diesen Job angeben, muss es eine Firewallregel haben, die Verbindungen zwischen den VMs des Jobs zulässt. VPC-Firewallregeln für gängige Anwendungsfälle konfigurieren
Job erstellen und ausführen, der MPI für eng gekoppelte Aufgaben verwendet
In diesem Abschnitt finden Sie Beispiele für das Erstellen eines Jobs, der MPI verwenden kann. Der Beispieljob hat drei ausführbare Elemente:
- Das erste Runnable ist ein Skript, das den Job für MPI vorbereitet, indem es gleichzeitiges Multithreading deaktiviert und Intel MPI installiert.
- Das zweite Runnable ist ein leeres Barrier-Runnable (als
{ "barrier": {} }
formatiert), das dafür sorgt, dass alle Aufgaben zum Einrichten von MPI abgeschlossen werden, bevor mit zukünftigen Runnables fortgefahren wird. - Das dritte Runnable (und alle nachfolgenden Runnables) ist für die Arbeitslast des Jobs verfügbar.
Sie können einen Job erstellen, in dem MPI für eng gekoppelte Aufgaben verwendet wird, indem Sie die gcloud CLI oder die Batch API verwenden.
gcloud
So erstellen Sie einen Scriptjob, der MPI für eng gekoppelte Aufgaben verwendet, mit der gcloud CLI:
Erstellen Sie eine JSON-Konfigurationsdatei mit folgendem Inhalt:
{ "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 } ] }
Ersetzen Sie Folgendes:
SCRIPT
: Ein Skript, das für eine Arbeitslast mit MPI ausgeführt werden kann.TASK_COUNT
: Die Anzahl der Aufgaben für den Job. Der Wert muss eine ganze Zahl zwischen1
und dem Limit für Aufgaben pro Aufgabengruppe sein. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, ist dieses Feld erforderlich und muss auf2
oder höher festgelegt werden.TASK_COUNT_PER_NODE
: Die Anzahl der Aufgaben, die ein Job gleichzeitig auf einer VM-Instanz ausführen kann. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, ist dieses Feld erforderlich und muss auf1
gesetzt werden. Das entspricht der Ausführung einer VM-Instanz pro Aufgabe.REQUIRE_HOSTS_FILE
: Wenn auftrue
gesetzt, wird mit dem Job eine Datei erstellt, in der die VM-Instanzen aufgeführt sind, die in einer Aufgabengruppe ausgeführt werden. Der Dateipfad wird in der UmgebungsvariableBATCH_HOSTS_FILE
gespeichert. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „true“ gesetzt werden.PERMISSIVE_SSH
: Wenn auftrue
festgelegt, konfiguriert Batch SSH so, dass die Kommunikation zwischen den VM-Instanzen, die in einer Aufgabengruppe ausgeführt werden, ohne Passwort möglich ist. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „true“ gesetzt werden.
Verwenden Sie den Befehl
gcloud batch jobs submit
, um den Job zu erstellen.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ersetzen Sie Folgendes:
JOB_NAME
: Der Name des Jobs.LOCATION
: Der Standort des Jobs.JSON_CONFIGURATION_FILE
: der Pfad zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.
Optional können Sie die Leistung der von Batch bereitgestellten MPI-Bibliotheken verbessern, indem Sie Folgendes tun:
- Erstellen und Ausführen eines Jobs mit einer VM-Instanzvorlage und Angeben einer HPC-fähigen VM-Instanzvorlage in den Ressourcen des Jobs.
- Geben Sie Cloud Logging als Ziel für die Logging-Informationen Ihres Jobs in den Ressourcen des Jobs an.
So erstellen Sie beispielsweise einen Skriptjob aus einer Instanzvorlage, die MPI verwendet und bei dem in einer Aufgabe der Hostname der drei Aufgaben in der Aufgabengruppe ausgegeben wird:
Erstellen Sie im aktuellen Verzeichnis eine JSON-Datei mit dem Namen
example-job-uses-mpi.json
und folgendem Inhalt:{ "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" } }
Führen Sie dazu diesen Befehl aus:
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Wenn Sie mit der Batch API einen Script-Job erstellen möchten, der ein MPI für eng gekoppelte Aufgaben verwendet, verwenden Sie die Methode jobs.create
und geben Sie die Felder permissiveSsh
, requireHostsFile
, taskCount
und taskCountPerNode
an.
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
}
]
}
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID Ihres Projekts.LOCATION
: Der Standort des Jobs.JOB_NAME
: Der Name des Jobs.SCRIPT
: Das Skript, das für eine Arbeitslast mit MPI ausgeführt werden kann.TASK_COUNT
: Die Anzahl der Aufgaben für den Job. Der Wert muss eine ganze Zahl zwischen1
und dem Limit für Aufgaben pro Aufgabengruppe sein. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, ist dieses Feld erforderlich und muss auf2
oder höher festgelegt werden.TASK_COUNT_PER_NODE
: Die Anzahl der Aufgaben, die ein Job gleichzeitig auf einer VM-Instanz ausführen kann. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, ist dieses Feld erforderlich und muss auf1
gesetzt werden. Das entspricht der Ausführung einer VM-Instanz pro Aufgabe.REQUIRE_HOSTS_FILE
: Wenn auftrue
festgelegt, wird mit dem Job eine Datei erstellt, in der die VM-Instanzen aufgeführt sind, die in einer Aufgabengruppe ausgeführt werden. Der Dateipfad wird in der UmgebungsvariableBATCH_HOSTS_FILE
gespeichert. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „true“ gesetzt werden.PERMISSIVE_SSH
: Wenn auftrue
festgelegt, konfiguriert Batch SSH so, dass die Kommunikation zwischen den VM-Instanzen, die in einer Aufgabengruppe ausgeführt werden, ohne Passwort möglich ist. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „true“ gesetzt sein.
Optional können Sie die Leistung der von Batch bereitgestellten MPI-Bibliotheken verbessern, indem Sie Folgendes tun:
- Erstellen und Ausführen eines Jobs mit einer VM-Instanzvorlage und Angeben einer HPC-fähigen VM-Instanzvorlage in den Ressourcen des Jobs.
- Geben Sie Cloud Logging als Ziel für die Logging-Informationen Ihres Jobs in den Ressourcen des Jobs an.
Wenn Sie beispielsweise einen Skriptjob aus einer Instanzvorlage erstellen möchten, die MPI verwendet und bei dem eine Aufgabe den Hostnamen der drei Aufgaben in der Aufgabengruppe ausgibt, verwenden Sie die folgende Anfrage:
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"
}
}
Dabei ist PROJECT_ID
die Projekt-ID Ihres Projekts.
Nächste Schritte
- Ein ausführlicheres Beispiel für einen Job, der MPI für eng gekoppelte Aufgaben verwendet, finden Sie unter Das Weather Research and Forecasting-Modell mit Batch ausführen.
- Latenz für Jobs mit eng gekoppelten Aufgaben reduzieren
- Wenn Probleme beim Erstellen oder Ausführen eines Jobs auftreten, finden Sie weitere Informationen unter Fehlerbehebung.
- Jobs und Aufgaben ansehen
- Weitere Optionen zum Erstellen von Jobs