Gromacs-Molekulardynamik-Simulationen mit Fluid Numerics durchführen' Slurm-GCP

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.

  1. Öffnen Sie Cloud Shell auf der GCP.
  2. Repository „FluidNumerics/rcc-apps“ klonen
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. 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.

  1. Öffnen Sie Cloud Shell auf der GCP.
  2. Repository „FluidNumerics/rcc-apps“ klonen
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Wechseln Sie zum Verzeichnis gromacs terraform:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Erstellen und überprüfen Sie einen Terraform-Plan. Legen Sie die Umgebungsvariablen GMX_NAME, GMX_PROJECT und GMX_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" 
  1. 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

  1. Erstellen Sie den Plan mit dem Befehl „make“, der terraform init && terraform plan ausführt.
make plan
  1. 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
  1. 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}
  1. 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
  1. /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 :

638fa1fba54c3874.png

Dabei ist Positionsvektor die Position des Atoms i, t die Zeit, 72a717ea69626d54.png die Masse des Atoms i und b5e52e17becb80ec.png die nicht gebundene Kraft auf das Atom i, die durch das Atom j entsteht. 538199b3881cd305.png 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.

  1. benchMEM
  2. benchRIB
  3. 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

  1. 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.

  1. Wenn der Job abgeschlossen ist, sollten Sie unter run/MEM ein Verzeichnis namens run/ mit der Simulationsausgabe und eine Logdatei mit dem Namen gromacs.out in Ihrem aktuellen Verzeichnis sehen. Das Verzeichnis run/MEM enthält die beiden Dateien ener.edr und md.log. Die Datei ener.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 Datei md.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 von gmx 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

  1. Öffnen Sie Cloud Shell und rufen Sie das Beispielverzeichnis gromacs/tf/slurm auf.
cd ~/rcc-apps/gromacs/tf/slurm
  1. 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.

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten. Zur Seite „Ressourcen verwalten“
  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen c01e35138ac49503.png.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.