In diesem Dokument wird erläutert, wie Sie einen Batchjob mit eng gekoppelten Aufgaben, die über verschiedene VMs miteinander kommunizieren über eine Message Passing Interface (MPI) Bibliothek.
Bei Batchjobs beschreibt die Kopplung die Abhängigkeiten zwischen Aufgaben. Dies wirkt sich darauf aus, wie Sie die Anzahl der Aufgaben konfigurieren, die parallel (anstelle von sequenziell) ausgeführt werden können, indem Sie das Feld parallelism
eines Jobs verwenden.
Aufgaben können mithilfe der folgenden Arten der Kopplung beschrieben werden:
- Lose gekoppelte Aufgaben: Aufgaben, die unabhängig voneinander ausgeführt werden können.
- Eng miteinander verbundene Aufgaben: Aufgaben, die für die Ausführung voneinander abhängig sind.
Optional können Sie einen Job erstellen, der eine MPI-Bibliothek verwendet, um eng gekoppelte Aufgaben über verschiedene VM-Instanzen miteinander kommunizieren. Häufig verwendet Ein gutes Argument für MPI sind eng gekoppelte HPC-Arbeitslasten (High Performance Computing, Hochleistungs-Computing).
Hinweise
- Wenn Sie Batch zum ersten Mal verwenden, lesen Sie Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie den Voraussetzungen für Projekte und Nutzer.
-
Um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen, bitten Sie Ihren Administrator, Ihnen folgenden IAM-Rollen:
-
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. Weitere Informationen zum Konfigurieren von VPC-Firewallregeln für gängige Anwendungsfälle
Job erstellen und ausführen, der MPI für eng gekoppelte Aufgaben verwendet
Dieser Abschnitt enthält Beispiele zum Erstellen eines Jobs, der MPI verwenden kann. Der Beispieljob hat drei Runnables:
- Das erste ausführbare Skript ist ein Skript, das den Job für MPI vorbereitet, indem es Deaktivieren des gleichzeitigen Multithreads und Intel MPI installieren.
- Das zweite ausführbare Element ist eine leere Barriere (formatiert als
{ "barrier": {} }
), die dafür sorgt, dass alle Aufgaben die Einrichtung von MPI abschließen, bevor mit zukünftigen ausführbaren Elementen fortgefahren wird. - Das dritte Runnable (und alle nachfolgenden Runnables) sind für die Arbeitslast des Jobs.
Sie können einen Job erstellen, der MPI für eng verbundene Aufgaben verwendet. Dazu können Sie die gcloud CLI oder die Batch API verwenden.
gcloud
So erstellen Sie mit der gcloud CLI einen Script-Job, der MPI für eng verbundene 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 ausführbar für eine Arbeitslast, die MPI verwendet.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. Um die MPI zu verwenden Bibliotheken bereitgestellt werden, ist dieses Feld erforderlich und muss auf2
oder höher festgelegt sein.TASK_COUNT_PER_NODE
: die Anzahl der Aufgaben, die ein Job gleichzeitig auf einer VM-Instanz ausgeführt werden 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 dieser Wert auftrue
gesetzt ist, wird der Job erstellt eine Datei mit den 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, gilt Folgendes: Batch konfiguriert SSH, um passwortfreies zuzulassen Kommunikation zwischen den VM-Instanzen, die in einer Aufgabengruppe ausgeführt werden. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „wahr“ gesetzt sein.
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 für eine JSON-Datei mit den Konfigurationsdetails des Jobs.
Optional können Sie die Leistung der von Batch bereitgestellten MPI-Bibliotheken so steigern:
- Job mit einer VM-Instanzvorlage erstellen und ausführen und geben Sie eine HPC-fähige VM-Instanzvorlage an. in Ihren Jobressourcen.
- Geben Sie Cloud Logging als Ziel für die Protokollierungsinformationen Ihres Jobs in den Ressourcen Ihres Jobs an.
So erstellen Sie beispielsweise einen Scriptjob aus einer Instanzvorlage, der MPI verwendet und bei einer 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
Um einen Skriptjob zu erstellen, der eine MPI für eng gekoppelte Aufgaben verwendet,
die Batch API verwenden, verwenden Sie
jobs.create
-Methode
und geben Sie permissiveSsh
, requireHostsFile
, taskCount
und
taskCountPerNode
-Feldern.
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
: den Standort der Stelle.JOB_NAME
: der Name des Jobs.SCRIPT
: das Skript ausführbar für eine Arbeitslast, die MPI verwendet.TASK_COUNT
: die Anzahl der Aufgaben für den Job. Die 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 sein.TASK_COUNT_PER_NODE
: die Anzahl der Aufgaben, die ein Job kann gleichzeitig auf einer VM-Instanz ausgeführt werden. 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 diese Option auftrue
festgelegt ist, erstellt der Job eine Datei mit den VM-Instanzen, 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 „wahr“ gesetzt sein.PERMISSIVE_SSH
: Wenn diese Option auftrue
festgelegt ist, konfiguriert Batch SSH so, dass die passwortlose Kommunikation zwischen den VM-Instanzen in einer Aufgabengruppe zulässig ist. Wenn Sie die von Batch bereitgestellten MPI-Bibliotheken verwenden möchten, muss dieses Feld auf „wahr“ gesetzt sein.
Optional können Sie die Leistung der bereitgestellten MPI-Bibliotheken erhöhen. nach Batch, indem Sie Folgendes tun:
- Erstellen und führen Sie einen Job mit einer VM-Instanzvorlage aus und geben Sie in den Ressourcen des Jobs eine HPC-fähige VM-Instanzvorlage an.
- Geben Sie Cloud Logging als Ziel für die Protokollierungsinformationen Ihres Jobs in den Ressourcen Ihres Jobs an.
Um beispielsweise einen Skriptjob aus einer Instanzvorlage zu erstellen, die MPI verwendet und macht 1 Task-Ausgabe den Hostnamen der 3 Aufgaben in der Aufgabengruppe, verwenden Sie die folgende Anfrage stellen:
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 verbundene Aufgaben verwendet wird, finden Sie unter Weather Research and Forecasting-Modell mit Batch ausführen.
- Weitere Informationen zum Verringern der Latenz bei Jobs mit eng gekoppelten Aufgaben
- Wenn beim Erstellen oder Ausführen eines Jobs Probleme auftreten, lesen Sie den Abschnitt Fehlerbehebung.
- Aufgaben und Jobs ansehen
- Weitere Informationen zu Optionen zum Erstellen von Jobs