In diesem Dokument wird erläutert, wie Sie mithilfe einer MPI-Bibliothek (Message Passing Interface) einen Batchjob mit eng gekoppelten Aufgaben konfigurieren, die über verschiedene VMs miteinander kommunizieren.
Bei Batchjobs werden die Interdependenzaufgaben unter Kopplung beschrieben. Dies wirkt sich darauf aus, wie Sie die Anzahl der Aufgaben, die parallel (anstatt sequenziell) ausgeführt werden können, mithilfe des parallelism
-Felds eines Jobs konfigurieren.
Aufgaben können mithilfe der folgenden Kopplungstypen beschrieben werden:
- Lose gekoppelte Aufgaben:Aufgaben, die unabhängig voneinander ausgeführt werden können.
- Eng gekoppelte Aufgaben: Aufgaben, die voneinander abhängig sind, damit sie ausgeführt werden können.
Optional können Sie einen Job erstellen, der eine MPI-Bibliothek verwendet, damit eng gekoppelte Aufgaben über verschiedene VM-Instanzen miteinander kommunizieren können. Ein häufiger Anwendungsfall für MPI sind eng gekoppelte Arbeitslasten für Hochleistungs-Computing (HPC).
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie Erste Schritte mit Batch. Aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batchjob-Bearbeiter (
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 verwalten.
Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batchjob-Bearbeiter (
- Wenn Sie das Netzwerk für diesen Job angeben, muss das Netzwerk eine Firewallregel haben, die Verbindungen zwischen den VMs des Jobs zulässt. VPC-Firewallregeln für häufige Anwendungsfälle konfigurieren
Job mit MPI für eng gekoppelte Aufgaben erstellen und ausführen
Dieser Abschnitt enthält Beispiele zum Erstellen eines Jobs, der MPI verwenden kann. Beachten Sie, dass der Beispieljob drei Runnables hat:
- Das erste ausführbare Skript ist ein Skript, das den Job für MPI vorbereitet, indem das gleichzeitige Multithreading deaktiviert und Intel MPI installiert wird.
- Das zweite Runnable ist ein leeres Barrier Runnable im Format
{ "barrier": {} }
, das dafür sorgt, dass alle Tasks MPI eingerichtet haben, 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 mit der gcloud CLI oder Batch API einen Job erstellen, der MPI für eng gekoppelte Aufgaben verwendet.
gcloud
So erstellen Sie über die gcloud CLI einen Skriptjob, der MPI für eng gekoppelte Aufgaben verwendet:
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 ausgeführt werden kann, die MPI verwendetTASK_COUNT
: die Anzahl der Tasks für den Job Der Wert muss eine ganze Zahl zwischen1
und dem Limit für Aufgaben pro Aufgabengruppe sein. Dieses Feld ist erforderlich und muss auf2
oder höher gesetzt werden, um die von Batch bereitgestellten MPI-Bibliotheken zu verwenden.TASK_COUNT_PER_NODE
: die Anzahl der Tasks, 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. Dies entspricht der Ausführung einer VM-Instanz pro Task.REQUIRE_HOSTS_FILE
: Wenn dieser Wert auftrue
gesetzt ist, erstellt der Job eine Datei mit einer Liste der VM-Instanzen, die in einer Aufgabengruppe ausgeführt werden. Der Dateipfad wird in der UmgebungsvariablenBATCH_HOSTS_FILE
gespeichert. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „true“ gesetzt sein.PERMISSIVE_SSH
: Wenn dieser Wert auftrue
gesetzt ist, konfiguriert Batch SSH, um die passwortlose Kommunikation zwischen den VM-Instanzen, die in einer Aufgabengruppe ausgeführt werden, zu ermöglichen. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „true“ gesetzt sein.
Verwenden Sie zum Erstellen des Jobs den Befehl
gcloud batch jobs submit
.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 für eine JSON-Datei mit den Konfigurationsdetails des Jobs.
Optional können Sie die Leistung der von Batch bereitgestellten MPI-Bibliotheken erhöhen. Gehen Sie dazu so vor:
- Erstellen Sie einen Job mit einer VM-Instanzvorlage und führen Sie ihn aus. Geben Sie außerdem in den Ressourcen des Jobs eine HPC-fähige VM-Instanzvorlage an.
- Geben Sie Cloud Logging als Ziel für die Logging-Informationen des Jobs in den Ressourcen des Jobs an.
So erstellen Sie beispielsweise einen Skriptjob aus einer Instanzvorlage, die MPI verwendet und dafür sorgt, dass eine Aufgabe den Hostnamen der drei Aufgaben in der Aufgabengruppe ausgibt:
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 Skriptjob erstellen möchten, der eine MPI für eng gekoppelte Aufgaben verwendet, verwenden Sie die Methode jobs.create
und geben 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
: Skript, das für eine Arbeitslast ausgeführt werden kann, die MPI verwendetTASK_COUNT
: die Anzahl der Tasks für den Job Der Wert muss eine ganze Zahl zwischen1
und dem Limit für Aufgaben pro Aufgabengruppe sein. Dieses Feld ist erforderlich und muss auf2
oder höher gesetzt werden, um die von Batch bereitgestellten MPI-Bibliotheken zu verwenden.TASK_COUNT_PER_NODE
: die Anzahl der Tasks, die ein Job gleichzeitig auf einer VM-Instanz ausführen kann. Dieses Feld ist erforderlich und muss auf1
gesetzt werden, um die von Batch bereitgestellten MPI-Bibliotheken zu verwenden. Dies entspricht der Ausführung einer VM-Instanz pro Task.REQUIRE_HOSTS_FILE
: Wenn dieser Wert auftrue
gesetzt ist, erstellt der Job eine Datei mit einer Liste der VM-Instanzen, die in einer Aufgabengruppe ausgeführt werden. Der Dateipfad wird in der UmgebungsvariablenBATCH_HOSTS_FILE
gespeichert. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „true“ gesetzt sein.PERMISSIVE_SSH
: Wenn dieser Wert auftrue
gesetzt ist, konfiguriert Batch SSH so, dass eine passwortlose Kommunikation zwischen den VM-Instanzen möglich ist, die in einer Aufgabengruppe ausgeführt werden. 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 erhöhen. Gehen Sie dazu so vor:
- Erstellen Sie einen Job mit einer VM-Instanzvorlage und führen Sie ihn aus. Geben Sie außerdem in den Ressourcen des Jobs eine HPC-fähige VM-Instanzvorlage an.
- Geben Sie Cloud Logging als Ziel für die Logging-Informationen des Jobs in den Ressourcen des Jobs an.
Um beispielsweise einen Skriptjob aus einer Instanzvorlage zu erstellen, die MPI verwendet und dafür sorgt, dass 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, bei dem MPI für eng gekoppelte Aufgaben verwendet wird, finden Sie unter Modell für Wetterforschung und -prognose mit Batch ausführen.
- Latenz für Jobs mit eng gekoppelten Aufgaben reduzieren
- Informationen zu Problemen beim Erstellen oder Ausführen eines Jobs finden Sie unter Fehlerbehebung.
- Aufträge und Aufgaben ansehen
- Möglichkeiten zur Joberstellung