NAMD

De Wiki de Calcul Québec
Aller à : Navigation, rechercher
Autres langues :anglais 100% • ‎français 100%

Sommaire

Description

NAMD est un logiciel de dynamique moléculaire conçu pour la simulation de gros systèmes biomoléculaires. NAMD peut employer le parallélisme à plusieurs niveaux :

  • plusieurs cœurs d'un nœud à mémoire partagé
  • plusieurs nœuds d'une grappe de calcul
  • un ou plusieurs processeur graphique (GPGPU).

ou une combinaison de ces trois techniques. Ce logiciel a été utilisé sur des systèmes contenant plus de 200,000 cœurs de calcul.

Utilisation de Namd sur Helios

Deux versions de Namd sont disponibles sur Helios. La première version, chargée via le module apps/namd-multicore, correspond aux binaires avec support GPU publiés directement sur le site de Namd. C'est le module recommandé si vous désirez exécuter un calcul sur un seul nœud.

apps/namd-multicore

Namd est un logiciel dont les performances croissent plutôt bien avec la quantité de ressources. Nous avons exécuté la tâche étalon (benchmark) ApoA1 (92224 atômes) sur les nœuds d'Helios. La tâche a été exécutée avec le module apps/namd-multicore, en exécutant la commande

[nom@serveur $] namd2 +pN apoa1.namd


N est le nombre de fils d'exécution. Le tableau ci-dessous résume les performances.

Performance de la simulation étalon ApoA1 sur Helios (s/step). Plus faible est meilleur.
Nombre de fils d'exécution Sans GPU Avec GPU Ajout de twoawayx yes Ajout de la liaison (binding) Efficacité
1 (1 GPU) 2.5 0.21 0.21 0.11 x
5 (2 GPUs) 0.48 0.047 0.041 0.026 100%
10 (4 GPUs) 0.26 0.023 0.020 0.013 100%
20 (8 GPUs) 0.064 0.010 0.0075 0.0075 87%

Dans ce tableau, la première colonne correspond à l'utilisation de Namd sans support des GPUs. La deuxième colonne ajoute le support des GPUs en augmentant le nombre de GPU proportionnellement au nombre de fil d'exécution. Pour la troisième colonne, l'option twoawayx yes est une option à rajouter au fichier apoa1.namd et qui permet d'augmenter artificiellement le nombre de cellules pour maximiser l'utilisation des processeurs graphiques. La quatrième colonne ajoute la liaison des fils d'exécution à des cœurs spécifiques d'Helios (cpu-binding). Finalement, la dernière colonne exprime l'efficacité de la tâche Namd en fonction des ressources consommées, en prenant 2 GPUs et 5 fils d'exécution comme point de référence.

Les troisième, quatrième et cinquième lignes correspondent respectivement à un quart, une moitié et la totalité d'un nœud d'Helios. Notez que si vous utilisez, dans une même exécution de Namd, la totalité des ressources allouées à la tâche par Moab, la liaison des fils d'exécution sur les bons cours de calcul est assurée par le système. Si vous lancez plutôt plusieurs exécutions de Namd dans une même tâche, vous devrez assurer la liaison vous-même en utilisant l'outil numactl. Par exemple, lancer les commandes suivantes

 
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=0,1; numactl --physcpubind=0-4 namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=2,3; numactl --physcpubind=5-9 namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=4,5; numactl --physcpubind=10-14 namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=6,7; numactl --physcpubind=15-19 namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] wait
 


dans une tâche demandant 8 GPUs, résultera en de bien meilleures performances que lancer les commandes suivantes

 
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=0,1; namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=2,3; namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=4,5; namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] export CUDA_VISIBLE_DEVICES=6,7; namd2 +p5 +idlepoll apoa1.namd &
 [nom@serveur $] wait
 


Par contre, lancer quatre tâches de 2 GPUs avec la commande

[nom@serveur $] namd2 +p5 +idlepoll apoa1.namd


donnera des performances identiques au premier cas.

apps/namd-mpi

Si vous désirez exécuter un calcul sur plus d'un nœud, vous pouvez utiliser la deuxième version, apps/namd-mpi. Celle-ci offre des performances légèrement inférieures à la version multicore sur un seul nœud, mais permet d'utiliser plusieurs nœuds pour gagner en performance. La version MPI est proposée avec les versions 1.6.x et 1.8.x d'OpenMPI. Dans nos tests, nous avons obtenu 0.0085s/step sur un nœud, et 0.006s/step sur deux nœud pour le calcul étalon ApoA1. Ces performances ont été obtenues en lançant Namd avec les paramètres suivants, selon la version d'OpenMPI:

[nom@serveur $] mpiexec -np X --npernode 1 --report-bindings namd2 +ppn19 +idlepoll apoa1.namd


pour OpenMPI 1.6.5 et

[nom@serveur $] mpiexec -np X --bind-to none --map-by ppr:1:node --report-bindings namd2 +ppn19 +idlepoll apoa1.namd


pour OpenMPI 1.8.1. Notez que l'option --bind-to none est très importante avec OpenMPI 1.8 pour toutes les tâches hybrides, car les paramètres de liaison par défaut ont été changés depuis OpenMPI 1.7.4.

Notez que des problèmes de stabilité affectent présentement la version MPI et il arrive qu'elle donne une erreur de segmentation lorsque plusieurs nœuds sont utilisés.

La version MPI de Namd peut aussi être utile sur un seul nœud si votre problème oblige l'utilisation d'un seul GPU par processus. Si c'est le cas de votre problème, vous obtiendrez l'erreur suivante avec la version multicore : FATAL ERROR: PME offload requires exactly one CUDA device per process..

Plusieurs processus par GPU

Si vous utilisez la version MPI de Namd, vous voudrez peut-être assigner davantage de processus que de GPU. Par exemple, vous pourriez vouloir utiliser 20 rangs MPI alors que les nœuds ont 8 GPUs. Notre expérience nous a montré que ceci offre de moins bonnes performances pour le calcul ApoA1 que si vous lancez Namd tel qu'indiqué dans la section précédente. Si vous désirez tout de même l'essayer pour votre problème, notez que vous devrez demander les GPUs en mode partagé lors de la soumission de la tâche dans Moab. Pour ce faire, modifiez la ligne #PBS -l nodes=1:gpus=8 par #PBS -l nodes=1:gpus=8:shared. Notez que vous ne pouvez utiliser cette option que si vous demandez un nœud complet.

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Ressources de Calcul Québec
Outils
Partager