NAMD avec accélération GPU

Exploitez le plein potentiel de NAMD avec notre guide de démarrage pour application GPU.

NAMD

L’application de dynamique moléculaire NAMD (NAnoscale Molecular Dynamics) a été conçue pour la simulation à hautes performances de systèmes biomoléculaires complexes. Développée par l’Université de l’Illinois à Urbana-Champaign (UIUC), NAMD est distribuée gratuitement avec ses fichiers binaires et son code source.

NAMD 2.11, la dernière version de l’application, offre des performances 7 fois plus rapides avec les GPU NVIDIA qu’avec les systèmes uniquement basés sur le traitement CPU*, ce qui permet de réduire la durée des simulations de dynamique moléculaire de plusieurs jours à quelques heures seulement. NAMD 2.11 est par ailleurs deux fois plus rapide que NAMD 2.10, ses utilisateurs peuvent donc réduire les coûts du matériel tout en accélérant leurs projets de recherche scientifique.

*Serveur avec double CPU Intel E5-2698 v3 à 2,3 GHz ; accélérateur NVIDIA Tesla K80 avec fonctions ECC désactivées et Autoboost activé ; jeu de données STMV.

NAMD offre des performances 7 fois plus rapides avec les GPU NVIDIA

Installation

Configuration requise

NAMD est potentiellement portable sur tout type de plateforme parallèle avec un compilateur C++ moderne. Les fichiers binaires NAMD 2.11 précompilés et accélérés par GPU sont disponibles au téléchargement pour Windows, Mac OS X et Linux. NAMD exploite à la fois les ressources GPU et CPU, c’est pourquoi nous vous recommandons d’utiliser un système équipé d’un CPU relativement moderne pour bénéficier d’un maximum de performances sous NAMD. 

Instructions de téléchargement et d’installation

Les développeurs de NAMD vous fournissent un ensemble complet de fichiers binaires spécialement optimisés pour la plupart des plateformes sur lesquelles l’application a été portée. Ces fichiers binaires sont disponibles sur la page de téléchargement de NAMD.

Vous n’avez pas nécessairement besoin de compiler NAMD, sauf si vous voulez ajouter ou modifier des fonctionnalités, améliorer les performances globales en déployant une version Charm++ exploitant les avantages d’un matériel réseau spécifique ou personnaliser votre version de NAMD. Les instructions complètes relatives à la compilation de NAMD sont détaillées dans les notes de publication, sont disponibles sur le site Internet de NAMD et sont incluses dans toutes les distributions.

VOUS TROUVEREZ CI-DESSOUS UNE SYNTHÈSE DE LA PROCÉDURE DE COMPILATION

1. Téléchargez le code source de NAMD.

2. Extrayez le pack de NAMD et Charm++.

tar xf NAMD_2.11_Source.tar.gz
cd NAMD_2.11_Source
tar xf charm-6.7.0.tar

3. Téléchargez et installez TCL et FFTW.

Veuillez consulter les notes de publication pour connaître la version appropriée de ces bibliothèques logicielles.

wget http://www.ks.uiuc.edu/Research/namd/libraries/fftw-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.5.9-linux-x86_64.tar.gz
wget http://www.ks.uiuc.edu/Research/namd/libraries/tcl8.5.9-linux-x86_64-threaded.tar.gz
tar xzf fftw-linux-x86_64.tar.gz
mv linux-x86_64 fftw
tar xzf tcl*-linux-x86_64.tar.gz
tar xzf tcl*-linux-x86_64-threaded.tar.gz
mv tcl*-linux-x86_64 tcl
mv tcl*-linux-x86_64-threaded tcl-threaded

4. Configurez Charm++.

Le script de construction dispose d’un mode interactif, mais vous pouvez également spécifier vos options par lignes de commandes (voir ci-dessous).

cd charm-6.7.0
./build charm++ {arch} {C compiler} {Fortran compiler} {other options} 

Pour {arch}, il est requis d’utiliser l’une des options suivantes : 'verbs-linux-x86_64' pour des configurations à nœuds multiples ou 'multicore-linux64' fpour les systèmes à nœud unique. D’autres options non requises sont malgré tout recommandées pour de meilleures performances : 'smp' pour activer le support SMP des versions multi-nœuds (cliquez ici pour plus d’informations) et '--with-production' pour utiliser des optimisations de niveau production.

Exemple 1 .Version Charm++ pour les configurations multi-nœuds utilisant des compilateurs Intel et des instructions SMP avec toutes les optimisations de production :

./build charm++ verbs-linux-x86_64 icc smp --with-production 

Exemple 2 .Version Charm++ pour les configurations à nœud unique utilisant des compilateurs Intel avec toutes les optimisations de production :

./build charm++ multicore-linux64 icc --with-production 

5. Configurez NAMD.

Assurez-vous de vous placer dans le répertoire principal de NAMD avant toute configuration. Exécutez la commande suivante :

./config {namd-arch} --charm-arch {charm-arch} {opts}
cd {namd-arch}
make -j4 

Pour {namd-arch}, nous vous recommandons d’utiliser "Linux-x86_64-icc", alors que {charm-arch} doit être identique à l’arche utilisée pour la configuration de Charm++. Vous devez assigner l’option "--with-cuda" à {opts} afin d’activer l’accélération GPU ou "--without-cuda" si vous souhaitez uniquement recourir au traitement CPU. Vous pouvez étendre le répertoire de version avec .[comment] (exemple : "Linux-x86_64.cuda"). C’est particulièrement utile si jamais vous devez gérer plusieurs versions de NAMD. Veuillez noter que l’extension n’a pas de signification intrinsèque, donc "./config Linux-x86_64.cuda" ne sera pas une version CUDA valide tant que vous n’aurez pas spécifié "--with-cuda".

Valeurs optionnelles pour la version CUDA :
a. --cuda-prefix cvous permet d’assigner le chemin correct vers le Kit d’outils CUDA ;
b. --cuda-gencode vous permet d’ajouter différentes architectures de calcul GPU.

Exemple 1.Version NAMD pour architectures x86_64 utilisant des compilateurs Intel avec accélération GPU et un chemin CUDA spécifique pour les configurations à nœud unique :

./config Linux-x86_64-icc --charm-arch multicore-linux64-icc --with-cuda --cuda-prefix /usr/local/cuda 

Exemple 2 .Version NAMD pour architectures x86_64 utilisant des compilateurs Intel avec accélération GPU et un chemin CUDA spécifique pour les configurations à nœud unique :

./config Linux-x86_64-icc --charm-arch verbs-linux-x86_64-smp-icc --with-cuda --cuda-prefix /usr/local/cuda 

Exemple 3 .Version NAMD pour architectures x86_64 utilisant des compilateurs Intel sans accélération GPU pour les configurations à nœuds multiples :


./config Linux-x86_64-icc --charm-arch verbs-linux-x86_64-smp-icc 

Exécution

Avant d’exécuter une version de NAMD accélérée par GPU, vous devez installer la dernière version des pilotes d’affichage NVIDIA. Pour exécuter NAMD, vous devez disposer du fichier exécutable "namd2". Pour les configurations multi-nœuds, vous devez disposer du fichier exécutable "charmrun". Assurez-vous par ailleurs de spécifier les options d’affinité CPU comme expliqué ci-dessous.

OPTIONS DE LIGNE DE COMMANDE

Ligne de commande générale pour l’exécution de NAMD sur un système à nœud unique :

namd2 {namdOpts} {inputFile}

Ligne de commande pour l’exécution de NAMD avec charmrun sur un système à nœuds multiples :

charmrun {charmOpts} namd2 {namdOpts} {inputFile}

{charmOpts}

  • "++nodelist {nodeListFile}" : les exécutions multi-nœuds requièrent une liste de nœuds préablable
  • Charm++ supporte également l'option alternative "++mpiexec" si vous utilisez un système de files d'attente que mpiexec est configuré pour reconnaître.
  • "++p $totalPes" : spécifie le nombre total de threads PE
  • Il s'agit du nombre total de threads d'exécution (ou threads PE). Nous vous recommandons d'utiliser une valeur égale à : #TotalCPUCores - #TotalGPUs.
  • "++ppn $pesPerProcess" : nombre de PE par process
    • Nous vous recommandons de définir cette option sur : #ofCoresPerNode/#ofGPUsPerNode – 1.
    • Cette option est nécessaire pour libérer l'un des threads de chaque process à des fins de communication. Assurez-vous de spécifier l'option "+commap" comme indiqué ci-dessous.
    • Le nombre total de process est équivalent à :$totalPes/$pesPerProcess.
    • Lors de l'exécution de la valeur recommandée pour cette option, chaque process utilisera un GPU unique.

{namdOpts}

  • NAMD va hériter des options "++p" et "++ppn" en tant que "+p" et "+ppn" si défini comme tel via {charmOpts}.
  • Si vous utilisez la version multicœurs, veuillez utiliser "+p" pour définir le nombre de cœurs.
  • Nous vous recommandons de ne pas utiliser plus d'un process par GPU avec les configurations multi-nœuds. Pour un plus grand nombre de threads de communication, nous vous recommandons de lancer exclusivement un process par GPU. Pour les configurations à nœud unique, vous pouvez utiliser plusieurs GPU par process.
  • Options d'affinité CPU (voir guide d'utilisation) :
    • "+setcpuaffinity" : pour maintenir la stabilité des threads
    • "+pemap #-#" : pour assigner les threads de calcul aux cœurs CPU
    • "+commap #-#" : pour définir la plage des threads de communication
    • Exemple pour une configuration CPU dual-socket avec 16 cœurs par socket :
      • +setcpuaffinity +pemap 1-15,17-31 +commap 0,16
  • Options GPU (voir guide d'utilisation) :
    • "+devices {CUDA IDs}" : pour spécifier l'identifiant de dispositif à utiliser dans NAMD (en option)
    • Si les dispositifs ne sont pas classés préalablement par ordre de socket, nous vous conseillons d'activer cette option afin de vous assurer que chaque socket utilise le GPU qui lui est directement attaché (par exemple : "+devices 2,3,0,1").

Nous vous recommandons de systématiquement vérifier les messages de démarrage dans NAMD pour vous assurer que les options sont correctement définies. L’option "++verbose" peut par ailleurs vous fournir des informations de sortie détaillées pour l’exécution des versions qui utilisent charmrun. L’exécution d’outils système appropriés peut vous aider à obtenir la cartographie de thread requise. 

{inputFile}

Utilisez le fichier d'entrée *.namd correspondant de l'un des jeux de données de la sous-section suivante.

Exemple 1.Exécution de ApoA1 sur un nœud avec 2 GPU et 2 CPU (total de 20 cœurs) via une version multicœurs de NAMD :

./namd2 +p 20 +devices 0,1 apoa1.namd

Exemple 2 .Exécution de STMV sur deux nœuds de 2 GPU et 2 CPU (total de 20 cœurs par nœud) via une version SMP de NAMD (nous lançons ici 4 process contrôlant chacun un GPU) :

charmrun ++p 36 ++ppn 9 ./namd2 ++nodelist $NAMD_NODELIST +setcpuaffinity +pemap 1-9,11-19 +commap 0,10 +devices 0,1 stmv.namd

Veuillez noter que, par défaut, la commande "rsh" est utilisée pour lancer namd2 sur chaque nœud spécifié dans le fichier nodelist. Vous pouvez changer cette commande via la variable d’environnement "CONV_RSH", par exemple pour utiliser ssh au lieu de rsh avec "export CONV_RSH=ssh" (consultez les notes de publication de NAMD pour plus d’informations).

Benchmarks

Cette section présente certains jeux de données relatifs à l’accélération GPU de NAMD. Veuillez noter que vous devrez peut-être mettre à jour les fichiers d'entrée pour réduire la fréquence d'énergie et de rythme de sortie. Les benchmarks ci-après sont présentés par ordre croissant de nombre d’atomes. Nous vous recommandons de mettre en place des cas d’essai larges (comme STMV) sur les systèmes dotés de GPU multiples.

Apolipoprotein A1 (APOA1)
# of Atoms
92,224
Time Steps
500
Output Energies
100
Output Timing
100

APOA1

Les apolipoprotéines A1 (ApoA1) sont le composant protéique majeur des lipoprotéines de haute densité (HDL) de notre système sanguin. Le benchmark ApoA1, qui inclut 92 224 atomes, est un standard reconnu depuis de nombreuses années pour les benchmarks multiplateformes.

ATP synthase
# of Atoms
327,506
Time Steps
500
Output Energies
100
Output Timing
100

ATPASE

L'ATP Synthase est une enzyme qui permet de synthétiser l’adénosine triphosphate (ATP), l’unité d’énergie moléculaire commune aux cellules de tous les organismes vivants. Le benchmark F1-ATPase est un modèle de la sous-unité F1 de l’ATP Synthase.

SMTV
# of Atoms
1,066,628
Time Steps
500
Output Energies
100
Output Timing
100

STMV

Le virus satellite de la mosaïque du tabac (STMV ) est un petit phytovirus de structure icosaèdre qui aggrave les symptômes d’infection du virus de la mosaïque du tabac. STMV est un excellent candidat pour la recherche en dynamique moléculaire car il est relativement petit et se situe dans la gamme moyenne à haute des possibilités connues en matière de simulation pour les systèmes de dynamique moléculaire sur station de travail ou serveur standard.

LECTURE DES DONNÉES DE SORTIE

Le facteur de mérite s'exprime en nanosecondes par jour ("ns/day" ; plus la valeur est élevée, mieux c'est) mais est enregistré dans le fichier log sous "days/ns" (plus la valeur est faible, mieux c'est). La plupart des utilisateurs de systèmes de dynamique moléculaire donnent leurs résultats en nanosecondes par jour. À des fins de benchmarking, nous vous recommandons de prendre la valeur moyenne de l’ensemble des occurrences ; la fréquence de sortie pouvant être contrôlée via le fichier d’entrée *.namd correspondant. En raison de l’équilibrage de charge initial, la valeur de sortie "Initial time:" doit être négligée en faveur de "Benchmark time:" .

Résultats attendus

Veuillez consulter le tableau de résultats ci-dessous pour prendre connaissance des différentes configurations système avec CPU dual-socket et cartes NVIDIA Tesla pour 1 à 4 nœuds connectés via interface InfiniBand 4xEDR.

ApoA1
F1ATPase
STMV

Configuration système recommandée

Configuration matérielle

PC

Parameter
Specs

CPU Architecture

x86

System Memory

16-32GB

CPUs

2 (8+ CORES, 2+ GHz)

GPU Model

GeForce GTX TITAN X

GPUs

2-4

Servers

Parameter
Specs

CPU Architecture

x86

System Memory

32 GB

CPUs/Nodes

2 (8+ cores, 2+ GHz)

Total# of Nodes

1 – 10,000

GPU Model

NVIDIA Tesla® P100

GPUs/Nodes

2 – 4

Interconnect

InfiniBand

Configuration logicielle

Software stack

Parameter
Version

OS

CentOS 6.2

GPU Driver

352.68 or newer

CUDA Toolkit

7.5 or newer

Intel Compilers

2016.0.047

Déployez votre solution GPU personnalisée.