1. Einführung
Zuletzt aktualisiert:25.04.2022
Überblick
In diesem Codelab stellen Sie einen automatisch skalierenden HPC-Cluster (High Performance Computing, Hochleistungs-Computing) in Google Cloud bereit.Bei einer Terraform-Bereitstellung wird dieser Cluster mit Gromacs erstellt, der über Spack installiert wurde. Der Cluster wird mit dem Slurm-Jobplaner verwaltet. Beim Erstellen des Clusters führen Sie die benchMEM-, benchPEP- oder benchRIB-Benchmarks aus.
Lerninhalte
- HPC-Cluster bereitstellen, das den Slurm-Jobplaner unterstützt
- GPU-beschleunigte Molekulardynamiksimulationen mit Gromacs in Google Cloud mithilfe eines Slurm-Batchjobs ausführen
Voraussetzungen
2. Einrichtung
Für dieses Codelab müssen Sie die Compute Engine API und die Cloud Build API aktivieren. Öffnen Sie Cloud Shell und führen Sie die folgenden Befehle aus, um die Compute Engine API und die Cloud Build API zu aktivieren. Denken Sie daran, die
unten durch Ihre project-id zu ersetzen.
gcloud config set project <PROJECT_ID> gcloud services enable compute.googleapis.com gcloud services enable cloudbuild.googleapis.com
Achtung:Wenn Sie die SSH-Verbindung eines Drittanbieters (z.B. OpenSSH) verwenden möchten, um eine Verbindung zum Cluster herzustellen, müssen Sie mit OS Login einen SSH-Schlüssel an Ihr Cloud Identity-Profil anhängen. Weitere Informationen zum Hinzufügen von SSH-Schlüsseln zu Ihrem Cloud Identity-Profil
3. [OPTIONAL] GCP-VM-Image mit Gromacs erstellen
Für dieses Codelab stellen wir Ihnen ein vordefiniertes Image zur Verfügung, da die Installation von Gromacs und allen zugehörigen Abhängigkeiten bis zu 2 Stunden dauern kann. Wenn Sie dieses vordefinierte Image verwenden möchten, um Zeit zu sparen, können Sie mit dem nächsten Abschnitt fortfahren.
Beim Ausführen von Forschungsanwendungen in Google Cloud gibt es viele Möglichkeiten, Ihre Anwendung zu installieren und bereitzustellen. In diesem Abschnitt des Codelabs erstellen Sie ein VM-Image, das auf dem VM-Image slurm-gcp (CentOS7) aufbaut. Während des Erstellungsprozesses hat der Compiler, und Gromacs wird installiert.
Die Gromacs Cloud Build-Pipeline im RCC Apps-Repository enthält die erforderlichen Anweisungen zur Installation von Gromacs. Der Installationsprozess verwendet Packer, um eine VM bereitzustellen, auf der Spack installiert wird. Diese installiert wiederum den GCC@9.2.0-Compiler und Gromacs@2021.2 mit aktivierter GPU-Beschleunigung.
- Öffnen Sie Cloud Shell auf der GCP.
- Repository „FluidNumerics/rcc-apps“ klonen
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- Image mit Google Cloud Build erstellen
cd rcc-apps gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async
Sie können den Status Ihres Build-Prozesses im Google Cloud Build-Dashboard überprüfen.
Der Build-Prozess kann bis zu zwei Stunden dauern. Um dies zu beschleunigen, können Sie das Schema der Build-Konfigurationsdatei ändern, um den Maschinentyp zu ändern und so die Build-Leistung zu verbessern. Dazu können Sie die Build-Variable _MACHINE_TYPE verwenden. Beispiel:
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64
Sobald der Build fertig ist, steht in Ihrem Google Cloud-Projekt ein VM-Image zur Verfügung, mit dem Sie den Cluster bereitstellen können.
4. Automatisch skalierenden HPC-Cluster mit Terraform bereitstellen
In diesem Abschnitt verwenden Sie Terraform, um einen automatisch skalierenden HPC-Cluster mit installiertem Slurm-Jobplaner bereitzustellen. Dieser Cluster wird mit Rechenknoten bereitgestellt, die jeweils 8 vCPUs und 1 Nvidia® Tesla V100-GPU haben.
- Öffnen Sie Cloud Shell auf der GCP.
- Repository „FluidNumerics/rcc-apps“ klonen
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- Wechseln Sie zum Verzeichnis gromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
- Erstellen und überprüfen Sie einen Terraform-Plan. Legen Sie die Umgebungsvariablen
GMX_NAME
,GMX_PROJECT
undGMX_ZONE
fest, um den Namen Ihres Clusters, Ihr GCP-Projekt und die Zone für die Bereitstellung anzugeben. Bitte lesen Sie den Hinweis unten, wenn Sie sich nicht sicher sind.
export GMX_PROJECT=<PROJECT_ID> export GMX_ZONE=<ZONE> export GMX_NAME="gromacs"
- Wenn Sie im vorherigen Abschnitt dieses Codelabs Ihr eigenes VM-Image erstellt haben, müssen Sie auch die Umgebungsvariable GMX_IMAGE festlegen.
GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest" exportieren
- Erstellen Sie den Plan mit dem Befehl „make“, der
terraform init && terraform plan
ausführt.
make plan
- Stellen Sie den Cluster bereit. Die Einrichtung dauert nur wenige Minuten, da Gromacs und die zugehörigen Abhängigkeiten auf Ihrem Cluster vorinstalliert sind.
make apply
- Stellen Sie eine SSH-Verbindung zum Knoten login her, der im vorherigen Schritt erstellt wurde. Sie können diesen Knoten im vorherigen Schritt sehen (wahrscheinlich gromacs-login0 genannt). Klicken Sie dazu im Menüpunkt Compute Engine -> in der Konsole neben der Liste der VM-Instanzen auf die Schaltfläche "SSH". VM-Instanz
Option:Mit diesem gcloud-Befehl wird der Name des Anmeldeknotens ermittelt und eine SSH-Verbindung zu diesem hergestellt:
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${GMX_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1) gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${GMX_ZONE}
- Sobald Sie mit dem Anmeldeknoten verbunden sind, prüfen Sie, ob Gromacs installiert ist, um die Clustereinrichtung zu prüfen
$ spack find gromacs ==> In environment /apps/spack-pkg-env ==> Root specs gromacs@2021.2 +cuda~mpi ==> 1 installed package -- linux-centos7-x86_64 / gcc@9.2.0 ----------------------------- gromacs@2021.2
/opt/share/gromacs
muss den unten aufgeführten Inhalt haben.
$ ls /opt/share/gromacs/ benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr
5. benchRIB-Benchmark ausführen
Gromacs ist eine Forschungssoftware, mit der Molekulardynamik simuliert und molekulare Strukturen unter Energieminimierungsbeschränkungen berechnet werden können. Die Benchmarks, die im VM-Image für dieses Codelab bereitgestellt werden, konzentrieren sich auf Molekulardynamik, die Entwicklung von Atomensystemen.
In der Molekulardynamik werden die Positionen, Geschwindigkeiten und Beschleunigungen von Atomen unter Verwendung der Newtonschen Bewegungsgesetze simuliert :
Dabei ist die Position des Atoms i, t die Zeit,
die Masse des Atoms i und
die nicht gebundene Kraft auf das Atom i, die durch das Atom j entsteht.
sind die Kräfte, die auf gebundene Wechselwirkungen zurückzuführen sind. Anhand von Temperatur, Druck, Atompositionen und Atomgeschwindigkeiten werden die Kräfte berechnet und das System numerisch integriert, um neue Atomargeschwindigkeiten und -positionen zu erhalten. Dieser Prozess wird wiederholt, um die Molekulardynamik für einen bestimmten Zeitraum zu simulieren.
Das Gromacs-Image (entweder das von dir erstellte oder das bereitgestellte) enthält drei Benchmarks.
- benchMEM
- benchRIB
- benchPEP
Diese Benchmarks stammen von Dr. Kutzners Free Gromacs Benchmarks sind eine Standardgruppe von Simulationen transienter Molekulardynamik. Jede Benchmark variiert in der Anzahl der Atome und der Dauer der Simulation. Die relevanten Konfigurationen für jede Simulation sind in der folgenden Tabelle aufgeführt.
Messwert / Benchmark | benchMEM | benchRIB | benchPEP |
Anzahl der Atome | 81.743 | 2.136.412 | 12.495.503 |
Systemgröße / nm | 10,8 x 10,2 x 9,6 | 31,2 x 31,2 x 31,2 | 50,0 x 50,0 x 50,0 |
Zeitschritt / fs | 2 | 4 | 2 |
Grenzradius / nm | 1 | 1 | 1.2 |
PME-Raster / nm | 0,12 | 0,135 | 0,16 |
Senden Sie einen Slurm-Batchjob, um die Benchmark auszuführen. Standardmäßig führt das angegebene Batch-Skript den benchRIB-Benchmark aus. Die Eingabepräsentationen, die die Konfigurationen für die bereitgestellten Benchmarks definieren, sind im Gromacs-VM-Image unter /opt/share/gromacs
enthalten. Außerdem finden Sie ein Bash-Skriptbeispiel zum Ausführen von Gromacs unter /opt/share
.
Für diesen Abschnitt müssen Sie eine SSH-Verbindung zum login-Knoten des Clusters herstellen
- Batchjob mit dem Befehl „sbatch“ senden
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh
Dadurch wird der Job zur Ausführung in die Warteschlange gestellt und Slurm stellt einen Rechenknoten für Sie bereit. Wenn Sie sinfo
ausführen, sehen Sie, dass ein Rechenknoten den Status alloc#
hat. Das bedeutet, dass der Compute-Knoten Ihrem Job zugewiesen wird, aber gerade bereitgestellt wird. Sobald der Job ausgeführt wird, wird der Knoten auf den Status alloc
gesetzt.
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST gromacs* up infinite 1 alloc# gromacs-compute-0-0 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 gromacs gromacs_ joe R 0:02 1 gromacs-compute-0-0 $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST gromacs* up infinite 1 alloc gromacs-compute-0-0
Warten Sie, bis der Job abgeschlossen ist. Die Standard-Benchmark (BenchRIB) simuliert etwa 8 Millionen Atome und ist so konfiguriert, dass 5.000 Zeitschritte (mit 4 Zeitschritten/fs) in etwa sechs Minuten ausgeführt werden. Sie können den Status Ihres Jobs mit diesem Befehl überwachen:
watch squeue
Wenn Ihr Job aus der Warteschlange entfernt wurde, können Sie ihn mit Strg+C beenden.
- Wenn der Job abgeschlossen ist, sollten Sie unter
run/MEM
ein Verzeichnis namensrun/
mit der Simulationsausgabe und eine Logdatei mit dem Namengromacs.out
in Ihrem aktuellen Verzeichnis sehen. Das Verzeichnisrun/MEM
enthält die beiden Dateienener.edr
undmd.log
. Die Dateiener.edr
speichert die Energien, Temperatur, Druck, Boxgröße, Dichte und Virials des Systems in einem portablen Binärformat. Wie aus der Erweiterung hervorgeht, enthält die Dateimd.log
Protokolle für die Gromacs-Simulation, Informationen zur Simulationsleistung sowie Informationen aus den Partikelpartikeln und PME-Lösern. Der Inhalt von gromacs.out enthält die Standardausgabe vongmx mdrun
, sollte in etwa so aussehen:
$ tail -n9 gromacs.out step 5000, remaining wall clock time: 0 s Core t (s) Wall t (s) (%) Time: 3085.342 385.683 800.0 (ns/day) (hour/ns) Performance: 4.481 5.356 GROMACS reminds you: "I never thought of stopping, and I just hated sleeping. I can't imagine having a better life." (Barbara McClintock) OK
6. Glückwunsch
In diesem Codelab haben Sie einen automatisch skalierenden, cloudnativen HPC-Cluster erstellt und eine GPU-beschleunigte Molekulardynamiksimulation mit Gromacs in Google Cloud ausgeführt.
Bereinigen
So vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Codelab verwendeten Ressourcen in Rechnung gestellt werden:
EMPFOHLEN:HPC-Cluster mit Terraform löschen
- Öffnen Sie Cloud Shell und rufen Sie das Beispielverzeichnis
gromacs/tf/slurm
auf.
cd ~/rcc-apps/gromacs/tf/slurm
- Führen Sie „Make Deletion“ aus, um alle Ressourcen zu löschen.
make destroy
ODER löschen Sie das Projekt (effektivste und destruktivste).
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das Projekt löschen, das Sie für das Codelab erstellt haben.
Achtung: Das Löschen von Projekten hat folgende Auswirkungen:
- Alle Inhalte des Projekts werden gelöscht. Wenn Sie für dieses Codelab ein vorhandenes Projekt verwendet haben, werden beim Löschen auch alle anderen in dem Projekt erstellten Projekte gelöscht.
- Benutzerdefinierte Projekt-IDs gehen verloren. Beim Erstellen dieses Projekts haben Sie möglicherweise eine benutzerdefinierte Projekt-ID erstellt, die Sie weiterhin verwenden möchten. Damit die URLs, die die Projekt-ID verwenden, z. B. eine appspot.com-URL, erhalten bleiben, sollten Sie ausgewählte Ressourcen innerhalb des Projekts löschen, anstatt das gesamte Projekt zu löschen.
Wenn Sie mehrere Codelabs und Kurzanleitungen ausprobieren möchten, können Sie die Überschreitung von Projektkontingenten verhindern, indem Sie Projekte wiederverwenden.
- Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten. Zur Seite „Ressourcen verwalten“
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen
.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.