Exécuter des simulations de dynamique moléculaire Gromacs avec des fluides numériques Slurm-GCP

1. Introduction

Dernière mise à jour:25/04/2022

Objectif de cet atelier

Dans cet atelier de programmation, vous allez déployer un cluster de calcul hautes performances (HPC) avec autoscaling sur Google Cloud.Un déploiement Terraform crée ce cluster avec Gromacs installé via Spack. Le cluster sera géré avec le planificateur de jobs Slurm. Une fois le cluster créé, vous exécuterez les analyses comparatives benchMEM, benchPEP ou benchRIB.

Points abordés

  • Déployer un cluster HPC compatible avec le planificateur de jobs Slurm
  • Exécuter des simulations de dynamique moléculaire accélérée par GPU avec Gromacs sur Google Cloud à l'aide d'un job par lot Slurm

Ce dont vous avez besoin

2. Configuration

Pour suivre cet atelier de programmation , vous devez activer les API Compute Engine et Cloud Build. Pour activer les API Compute Engine et Cloud Build, ouvrez Cloud Shell et exécutez les commandes suivantes. N'oubliez pas de remplacer votre project-id par le ci-dessous.

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

Attention:Si vous envisagez d'utiliser un protocole SSH tiers (par exemple, OpenSSH) pour vous connecter à votre cluster, veillez à associer une clé SSH à votre profil Cloud Identity à l'aide d'OS Login. En savoir plus sur l'ajout de clés SSH à votre profil Cloud Identity

3. [FACULTATIF] Créer une image de VM GCP avec Gromacs

Pour cet atelier de programmation, nous vous avons fourni une image prédéfinie, car le processus de compilation peut prendre jusqu'à deux heures pour installer Gromacs et toutes ses dépendances. Si vous souhaitez utiliser cette image prédéfinie pour gagner du temps, vous pouvez passer à la section suivante.

Lorsque vous exécutez des applications de recherche sur Google Cloud, il existe de nombreuses options pour installer et déployer votre application. Dans cette section de l'atelier de programmation, vous allez créer une image de machine virtuelle basée sur l'image de VM slurm-gcp (CentOS7). Pendant le processus de création, le compilateur, les dépendances, et Gromacs sera installé.

Le pipeline Gromacs Cloud Build dans le dépôt d'applications RCC encapsule les instructions nécessaires à l'installation de Gromacs. Le processus d'installation utilise Packer pour déployer une VM qui installe Spack, qui à son tour installe le compilateur GCC@9.2.0 et Gromacs@2021.2 avec l'accélération GPU activée.

  1. Ouvrez Cloud Shell sur GCP.
  2. Cloner le dépôt Fluidnumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Créer l'image à l'aide de Google Cloud Build
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

Vous pouvez vérifier l'état de votre processus de compilation dans le tableau de bord Google Cloud Build.

Le processus de compilation peut prendre jusqu'à deux heures. Pour accélérer ce processus,vous pouvez envisager de modifier le schéma de votre fichier de configuration de compilation afin de changer le type de machine. Cela permettra d'améliorer les performances de compilation. Pour ce faire, utilisez la variable de compilation _MACHINE_TYPE. Exemple :

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

Une fois la compilation terminée, vous disposerez d'une image de VM dans votre projet Google Cloud pour déployer votre cluster.

4. Déployer un cluster HPC d'autoscaling avec Terraform

Dans cette section, vous allez utiliser Terraform pour déployer un cluster HPC d'autoscaling sur lequel le planificateur de jobs Slurm est installé. Ce cluster sera déployé avec des nœuds de calcul comportant chacun huit vCPU et un GPU Nvidia® Tesla V100.

  1. Ouvrez Cloud Shell sur GCP.
  2. Cloner le dépôt Fluidnumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Accédez au répertoire gromacs de Terraform:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Créez et examinez un plan "terraform plan". Définissez les variables d'environnement GMX_NAME, GMX_PROJECT et GMX_ZONE pour spécifier le nom de votre cluster, votre projet GCP et la zone dans laquelle vous souhaitez effectuer le déploiement. Veuillez lire la remarque ci-dessous en cas de doute.
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. Si vous avez créé votre propre image de VM dans la section précédente de cet atelier de programmation, vous devez également définir la variable d'environnement GMX_IMAGE.

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

  1. Créez le plan à l'aide de la commande "make", qui exécutera terraform init && terraform plan.
make plan
  1. Déployez le cluster. Le processus de configuration ne prend que quelques minutes, puisque Gromacs et ses dépendances sont préinstallés sur votre cluster.
make apply
  1. Connectez-vous en SSH au nœud login créé à l'étape précédente. Vous avez pu voir ce nœud à l'étape précédente (probablement appelé gromacs-login0). Pour ce faire, cliquez sur le bouton SSH à côté de la liste des instances de VM dans l'élément de menu de la console Compute Engine -> Instance de VM.

Option:La paire de commandes gcloud ci-dessous permet de déterminer le nom du nœud de connexion et de s'y connecter en 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. Une fois que vous êtes connecté au nœud de connexion, vérifiez que Gromacs est installé pour vérifier la configuration de votre cluster
$ 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. Vérifiez que /opt/share/gromacs comporte le contenu indiqué ci-dessous.
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. Exécuter le benchmark de benchRIB

Gromacs est un logiciel de recherche utilisé pour simuler la dynamique moléculaire et calculer les structures moléculaires sous des contraintes de minimisation de l'énergie. Les benchmarks présentés dans l'image de VM pour cet atelier de programmation se concentrent sur la dynamique moléculaire, l'évolution des systèmes des atomes.

En dynamique moléculaire, les positions, les vitesses et les accélérations des atomes sont simulées à l'aide des lois du mouvement de Newton :

638fa1fba54c3874.png

vecteur de position est la position de l'atome i, t le temps, 72a717ea69626d54.png est la masse de l'atome i et b5e52e17becb80ec.png est la force non liée sur l'atome i due à l'atome j et 538199b3881cd305.png sont les forces dues aux interactions liées. Compte tenu de la température, de la pression, de la position et de la vitesse des atomes, les forces sont calculées, et le système est intégré numériquement pour obtenir de nouvelles vitesses et positions d'atomes. Ce processus est répété pour simuler la dynamique moléculaire sur une période donnée.

L'image Gromacs (celle que vous avez créée ou celle que vous avez fournie) est fournie avec trois benchmarks

  1. benchMEM
  2. benchRIB
  3. benchPEP

Ces benchmarks proviennent du Dr. Ensemble de benchmarks sans frais Gromacs de Kutzner : ensemble standard de simulations de dynamique moléculaire transitoire. Chaque benchmark varie en termes de nombre d'atomes et de durée de la simulation. Les configurations pertinentes pour chaque simulation sont indiquées dans le tableau ci-dessous.

Métrique / Benchmark

benchMEM

benchRIB

benchPEP

Nombre d'atomes

81 743

2 136 412

12 495 503

Taille du système / nm

10,8 x 10,2 x 9,6

31,2 x 31,2 x 31,2

50 x 50 x 50

Pas de temps / fs

2

4

2

Rayon de coupure / nm

1

1

1.2

Espacement de la grille du PME / nm

0,12

0,135

0,16

Pour exécuter le benchmark, vous allez envoyer un job par lot Slurm. Par défaut, le script de traitement par lot fourni exécute le benchmark benchRIB. Les decks d'entrée qui définissent les configurations pour les benchmarks fournis sont inclus dans l'image de VM Gromacs sous /opt/share/gromacs. De plus, un exemple de script bash pour exécuter Gromacs est disponible sous /opt/share.

Pour cette section, vous devez vous connecter en SSH au nœud login du cluster.

  1. Envoyer un job par lot à l'aide de la commande sbatch
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

La tâche est alors mise en file d'attente pour exécution et Slurm provisionne un nœud de calcul pour vous. Lorsque vous exécutez sinfo, vous constatez qu'un nœud de calcul est à l'état alloc#, ce qui signifie qu'il est alloué à votre tâche, mais qu'il est en cours de provisionnement. Une fois le job en cours d'exécution, le nœud est défini sur l'état 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

Attendez que la tâche soit terminée. Le benchmark par défaut (benchRIB) simule environ 8 millions d'atomes et est configuré pour exécuter 5 000 pas de temps (avec 4 pas/fs) et prendre environ 6 minutes. Vous pouvez surveiller l'état de votre tâche à l'aide de cette commande:

watch squeue

Lorsque votre job a été supprimé de la file d'attente, vous pouvez le quitter en appuyant sur Ctrl+C.

  1. Une fois la tâche terminée, vous devriez voir un répertoire nommé run/ contenant la sortie de la simulation (sous run/MEM) et un fichier journal dans votre répertoire actuel appelé gromacs.out. Le répertoire run/MEM contient deux fichiers : ener.edr et md.log. Le fichier ener.edr stocke les énergies, la température, la pression, la taille de boîte, la densité et les virus du système dans un format binaire portable. Comme le suggère l'extension, le fichier md.log contient les journaux de la simulation Gromacs, et inclut des informations sur les performances de la simulation en plus des informations de journalisation issues des solutionneurs de particules et de PME. Le contenu de gromacs.out, qui contient une sortie standard de gmx mdrun, doit ressembler à ce qui suit.
$ 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. Félicitations

Dans cet atelier de programmation, vous avez créé un cluster HPC cloud natif avec autoscaling et exécuté une simulation de dynamique moléculaire accélérée par GPU avec Gromacs sur Google Cloud.

Nettoyer

Pour éviter que les ressources utilisées dans cet atelier de programmation soient facturées sur votre compte Google Cloud, procédez comme suit:

RECOMMANDÉ:Supprimer le cluster HPC avec Terraform

  1. Ouvrez Cloud Shell et accédez au répertoire d'exemple gromacs/tf/slurm.
cd ~/rcc-apps/gromacs/tf/slurm
  1. Exécutez "make destroy" pour supprimer toutes les ressources.
make destroy

OU : supprimer le projet (plus efficace et plus destructeur)

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour cet atelier de programmation.

Attention : La suppression d'un projet aura les effets suivants :

  • Tout le contenu du projet est supprimé. Si vous avez utilisé un projet existant pour cet atelier de programmation et que vous le supprimez, vous supprimerez également tout autre travail effectué dans le projet.
  • Les ID de projets personnalisés sont perdus. Lorsque vous avez créé ce projet, vous avez peut-être créé un ID de projet personnalisé dont vous souhaitez vous servir par la suite. Pour conserver les URL qui utilisent l'ID de projet, telle qu'une URL appspot.com, supprimez les ressources sélectionnées dans le projet au lieu de supprimer l'ensemble du projet.

Si vous prévoyez d'explorer plusieurs ateliers de programmation et guides de démarrage rapide, réutiliser des projets peut vous aider à éviter de dépasser les limites de quota des projets.

  1. Dans la console Cloud, accédez à la page Gérer les ressources. Accéder à la page "Gérer les ressources"
  2. Dans la liste des projets, sélectionnez celui que vous souhaitez supprimer, puis cliquez sur Supprimer c01e35138ac49503.png.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.