Esecuzione di simulazioni di dinamiche molecolari di Gromacs con numerici fluidi' Slurm-GCP

1. Introduzione

Ultimo aggiornamento: 25-04-2022

Cosa creerai

In questo codelab, eseguirai il deployment di un cluster HPC (High Performance Computing) con scalabilità automatica su Google Cloud.Un deployment Terraform crea questo cluster con Gromacs installato tramite Spack. Il cluster verrà gestito con lo scheduler del job Slurm. Una volta creato il cluster, eseguirai i benchMEM, benchPEP o benchRIB benchmark.

Cosa imparerai a fare

  • Eseguire il deployment di un cluster HPC che supporta lo scheduler di Slurm
  • Come eseguire simulazioni di dinamiche molecolari con accelerazione GPU con Gromacs su Google Cloud utilizzando un job batch Slurm

Che cosa ti serve

2. Configurazione

Per completare questo codelab , devi abilitare le API Compute Engine e Cloud Build. Per abilitare le API Compute Engine e Cloud Build, apri Cloud Shell ed esegui questi comandi. Ricorda di sostituire il tuo project-id con di seguito.

gcloud config set project <PROJECT_ID>
gcloud services enable compute.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Attenzione:se prevedi di utilizzare SSH di terze parti (ad es. OpenSSH) per connetterti al cluster, assicurati di collegare una chiave SSH al tuo profilo Cloud Identity utilizzando OS Login. Scopri di più sull'aggiunta di chiavi SSH al profilo Cloud Identity.

3. [FACOLTATIVO] Crea un'immagine VM Google Cloud con Gromacs

Per questo codelab, ti abbiamo fornito un'immagine predefinita, poiché il processo di compilazione può richiedere fino a due ore per installare Gromacs e tutte le sue dipendenze. Se vuoi utilizzare questa immagine predefinita per risparmiare tempo, puoi passare alla sezione successiva.

Quando esegui applicazioni di ricerca su Google Cloud, esistono molte opzioni per l'installazione e il deployment dell'applicazione. In questa sezione del codelab creerai un'immagine di macchina virtuale che si basa sull'immagine VM slurm-gcp (CentOS7). Durante il processo di creazione, il compilatore, lo strumento delle dipendenze e Gromacs verrà installato.

La pipeline Gromacs Cloud Build nel repository delle app RCC contiene le istruzioni necessarie per l'installazione di Gromacs. Il processo di installazione utilizza Packer per eseguire il deployment di una VM che installa Spack, che a sua volta installa il compilatore GCC@9.2.0 e Gromacs@2021.2 con l'accelerazione GPU abilitata.

  1. Apri Cloud Shell in Google Cloud.
  2. Clona il repository FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Creare l'immagine con Google Cloud Build.
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

Puoi controllare lo stato del processo di compilazione nella dashboard di Google Cloud Build

Il processo di compilazione potrebbe richiedere fino a due ore. Per accelerare questo processo,ti consigliamo di modificare lo schema del file di configurazione di compilazione per cambiare il tipo di macchina e migliorare le prestazioni della build. Questa operazione può essere eseguita utilizzando la variabile di build _MACHINE_TYPE. Ad esempio:

gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64

Al termine della build, nel tuo progetto Google Cloud avrai a disposizione un'immagine VM che puoi utilizzare per eseguire il deployment del cluster.

4. Esegui il deployment di un cluster HPC a scalabilità automatica con Terraform

In questa sezione utilizzerai Terraform per eseguire il deployment di un cluster HPC a scalabilità automatica con lo scheduler di Slurm installato. Il deployment di questo cluster verrà eseguito con nodi di computing dotati di 8 vCPU ciascuno e 1 GPU Nvidia® Tesla V100.

  1. Apri Cloud Shell in Google Cloud.
  2. Clona il repository FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Passa alla directory di gromacs Terraform:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Crea e rivedi un piano Terraform. Imposta le variabili di ambiente GMX_NAME, GMX_PROJECT e GMX_ZONE per specificare il nome del cluster, del progetto Google Cloud e della zona in cui vuoi eseguire il deployment. In caso di dubbi, rileggere la nota riportata di seguito
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. Se hai creato la tua immagine VM nella sezione precedente di questo codelab, dovrai anche impostare la variabile di ambiente GMX_IMAGE

esporta GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"

  1. Crea il piano con il comando make, che eseguirà terraform init && terraform plan.
make plan
  1. Eseguire il deployment del cluster. Il processo di configurazione richiede solo pochi minuti perché Gromacs e le sue dipendenze sono preinstallate nel tuo cluster.
make apply
  1. Accedi tramite SSH al nodo di accesso creato nel passaggio precedente. Puoi vedere questo nodo nel passaggio precedente (probabilmente chiamato gromacs-login0). Per farlo, fai clic sul pulsante SSH accanto all'elenco di istanze VM nella voce di menu della console Compute Engine -> di un'istanza VM.

Opzione: questa coppia di comandi gcloud è in grado di determinare il nome del nodo di accesso e accedervi tramite SSH:

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. Dopo aver effettuato la connessione al nodo di accesso, per verificare la configurazione del cluster, controlla che Gromacs sia installato
$ 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. Verifica che /opt/share/gromacs includa i contenuti elencati di seguito.
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. Esegui il benchmark benchRIB

Gromacs è un software di ricerca utilizzato per simulare la dinamica molecolare e calcolare le strutture molecolari in presenza di vincoli di minimizzazione dell'energia. I benchmark forniti nell'immagine VM di questo codelab sono incentrati sulla dinamica molecolare, l'evoluzione dei sistemi di atomi.

In dinamica molecolare, le posizioni, velocità e accelerazioni degli atomi vengono simulate utilizzando le leggi del moto di Newton :

638fa1fba54c3874.png

dove, vettore di posizione è la posizione dell'atomo i, t è il tempo, 72a717ea69626d54.png è la massa dell'atomo i e b5e52e17becb80ec.png è la forza non legata sull'atomo i dovuta all'atomo j e 538199b3881cd305.png sono le forze dovute alle interazioni di legame. Date la temperatura, la pressione, le posizioni degli atomi e le velocità dell'atomo, le forze vengono calcolate e il sistema è numericamente integrato per ottenere nuove velocità e posizioni dell'atomo. Questo processo viene ripetuto per simulare la dinamica molecolare per un determinato periodo di tempo.

L'immagine Gromacs (quella creata da te o quella fornita) include tre benchmark

  1. benchMEM
  2. benchRIB
  3. benchPEP

Questi benchmark provengono dal Dott. il set di benchmark Free Gromacs Benchmarks di Kutzner , ovvero un set standard di simulazioni di dinamica molecolare transitoria. Ogni benchmark varia per il numero di atomi e la durata della simulazione. Le configurazioni pertinenti per ogni simulazione sono indicate nella seguente tabella.

Metrica / Benchmark

benchMEM

benchRIB

benchPEP

Numero di atomi

81.743

2.136.412

12.495.503

Dimensioni sistema / 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

Time Step / fs

2

4

2

Raggio di taglio / nm

1

1

1,2

Spaziatura griglia PME / nm

0,12

0,135

0,16

Per eseguire il benchmark, devi inviare un job batch di Slurm. Per impostazione predefinita, lo script batch fornito esegue il benchmark benchRIB. Le presentazioni di input che definiscono le configurazioni per i benchmark forniti sono incluse nell'immagine VM di Gromacs in /opt/share/gromacs. Inoltre, in /opt/share è disponibile un esempio di script bash per eseguire Gromacs.

Per questa sezione, devi utilizzare SSH per connetterti al nodo di login del cluster

  1. Inviare un job batch utilizzando il comando sbatch
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

Questo mette in coda il job per l'esecuzione e Slurm eseguirà il provisioning di un nodo di computing per te. Quando esegui sinfo, vedrai che un nodo di computing è nello stato alloc#, il che significa che è allocato per il tuo job, ma è in fase di provisioning. Quando il job è in esecuzione, il nodo viene impostato sullo stato alloc.

$ 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

Attendi il completamento del job. Il benchmark predefinito (benchRIB) simula circa 8 milioni di atomi ed è configurato per eseguire 5000 passi temporali (con 4 passi temporali/fs) e richiedere circa 6 minuti per il completamento. Puoi monitorare lo stato del job con questo comando:

watch squeue

Quando il job non è più in coda, puoi uscire con Ctrl+C.

  1. Al termine del job, dovresti vedere una directory denominata run/ che contiene l'output della simulazione (in run/MEM) e un file di log nella directory attuale denominata gromacs.out. La directory run/MEM contiene due file ener.edr e md.log. Il file ener.edr memorizza le energie, la temperatura, la pressione, le dimensioni della scatola, la densità e le virali del sistema in un formato binario portatile. Come suggerito dall'estensione, il file md.log contiene i log per la simulazione di Gromacs e include informazioni sulle prestazioni della simulazione, oltre alle informazioni di logging provenienti dai risolutori delle particelle e dei PME. I contenuti di gromacs.out contengono un output standard di gmx mdrun dovrebbe essere simile a quello mostrato di seguito.
$ 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. Complimenti

In questo codelab, hai creato un cluster HPC cloud-native con scalabilità automatica ed eseguito una simulazione di dinamiche molecolari con accelerazione GPU con Gromacs su Google Cloud.

esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo codelab:

CONSIGLIATO: elimina il cluster HPC con Terraform

  1. Apri Cloud Shell e vai alla directory di esempio gromacs/tf/slurm
cd ~/rcc-apps/gromacs/tf/slurm
  1. Esegui make destroy per eliminare tutte le risorse.
make destroy

OPPURE, elimina il progetto (metodo più efficace e distruttivo)

Il modo più semplice per eliminare la fatturazione è quello di eliminare il progetto che hai creato per il codelab.

Attenzione: l'eliminazione di un progetto ha i seguenti effetti:

  • L'intero contenuto del progetto viene eliminato. Se hai utilizzato un progetto esistente per questo codelab, quando lo elimini, eliminerai anche qualsiasi altro lavoro che hai svolto nel progetto.
  • Gli ID progetto personalizzati non sono più disponibili. Quando hai creato il progetto, potresti aver creato un ID progetto personalizzato che vuoi utilizzare in futuro. Per conservare gli URL che utilizzano l'ID progetto, ad esempio un URL appspot.com, elimina le risorse selezionate all'interno del progetto anziché eliminare l'intero progetto.

Se prevedi di esplorare più codelab e guide rapide, il riutilizzo dei progetti può aiutarti a evitare di superare i limiti di quota.

  1. Nella console Cloud, vai alla pagina Gestisci risorse. Vai alla pagina Gestisci risorse
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare e fai clic su Elimina c01e35138ac49503.png.
  3. Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.