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.
- Ouvrez Cloud Shell sur GCP.
- Cloner le dépôt Fluidnumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- 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.
- Ouvrez Cloud Shell sur GCP.
- Cloner le dépôt Fluidnumerics/rcc-apps
cd ~ git clone https://github.com/FluidNumerics/rcc-apps.git
- Accédez au répertoire gromacs de Terraform:
cd ~/rcc-apps/gromacs/tf/slurm
- Créez et examinez un plan "terraform plan". Définissez les variables d'environnement
GMX_NAME
,GMX_PROJECT
etGMX_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"
- 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"
- Créez le plan à l'aide de la commande "make", qui exécutera
terraform init && terraform plan
.
make plan
- 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
- 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}
- 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
- 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 :
où est la position de l'atome i, t le temps,
est la masse de l'atome i et
est la force non liée sur l'atome i due à l'atome j et
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
- benchMEM
- benchRIB
- 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.
- 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.
- Une fois la tâche terminée, vous devriez voir un répertoire nommé
run/
contenant la sortie de la simulation (sousrun/MEM
) et un fichier journal dans votre répertoire actuel appelégromacs.out
. Le répertoirerun/MEM
contient deux fichiers :ener.edr
etmd.log
. Le fichierener.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 fichiermd.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 degmx 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
- Ouvrez Cloud Shell et accédez au répertoire d'exemple
gromacs/tf/slurm
.
cd ~/rcc-apps/gromacs/tf/slurm
- 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.
- Dans la console Cloud, accédez à la page Gérer les ressources. Accéder à la page "Gérer les ressources"
- Dans la liste des projets, sélectionnez celui que vous souhaitez supprimer, puis cliquez sur Supprimer
.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.