NAMD con accelerazione tramite GPU

Inizia subito con questa guida per applicazioni basate su GPU.

NAMD

NAMD (NAnoscale Molecular Dynamics) è un'applicazione di dinamica molecolare di produzione progettata per la simulazione ad alte prestazioni di grandi sistemi biomolecolari. Sviluppato dalla University of Illinois at Urbana-Champaign (UIUC), NAMD è distribuito gratuitamente assieme a binari e codice sorgente.

La versione più recente, NAMD 2.11, solitamente viene eseguita su GPU NVIDIA con una rapidità 7 volte superiore rispetto ai sistemi basati solo su CPU* e consente agli utenti di eseguire simulazioni di dinamica molecolare in poche ore invece che in giorni. Inoltre, è 2 volte più veloce di NAMD 2.10. Questo significa che consente di risparmiare sui costi hardware pur accelerando significativamente le scoperte scientifiche.

*Doppio server CPU, Intel E5-2698 v3 @ 2,3 GHz, NVIDIA Tesla K80 con ECC disattivata, Autoboost attivato; serie dati STMV

NAMD è 7 volte più veloce su GPU

Installazione

Requisiti di sistema

NAMD dovrebbe essere facilmente trasferibile su qualsiasi piattaforma parallela con un moderno compilatore di C++. I binari di NAMD 2.11 precompilati per l'accelerazione via GPU sono disponibili per il download per le piattaforme Windows, Mac OS X e Linux. NAMD utilizza sia GPU sia CPU, pertanto, per ricavare le migliori prestazioni possibili dall'applicazione NAMD, raccomandiamo di disporre di CPU relativamente moderne. 

Istruzioni di download e di installazione

Gli sviluppatori NAMD offrono binari completi e ottimizzati per tutte le piattaforme comuni sulle quali sia stato eseguito il porting di NAMD. È possibile ottenere binari dalla pagina di download di NAMD.

Non dovrebbe essere necessario compilare NAMD a meno che si intendano aggiungere o modificare funzionalità, migliorare le prestazioni eseguendo la build di una versione di Charm++ che sfrutta lo speciale hardware di networking, oppure creare un'eventuale versione personalizzata di NAMD. Le istruzioni complete per la compilazione di NAMD sono disponibili nelle note sulla release, sul sito Web di NAMD e in tutte le distribuzioni.

SEGUE UN BREVE SOMMARIO DELLA PROCEDURA DI COMPILAZIONE

1. Scaricare il codice sorgente di NAMD.

2. Estrarre il pacchetto e Charm++

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

3. Scaricare e installare TCL e FFTW.

Vedere le note sulla release per la versione appropriata di queste librerie.

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. Eseguire la build di Charm++

Lo script della build ha una modalità interattiva e permette anche di specificare opzioni nella riga di comando come illustrato qui sotto.

cd charm-6.7.0
./build charm++ {arch} {compilatore C} {compilatore Fortran} {altre opzioni} 

Per {arch} è necessario utilizzare una delle seguenti opzioni: 'verbs-linux-x86_64' per configurazioni con più nodi, 'multicore-linux64' per un sistema con un singolo nodo. Altre opzioni non necessarie ma consigliate per ottimizzare le prestazioni: 'smp', per utilizzare SMP per build con più nodi (Fare clic qui per ulteriori dettagli), '--with-production' per utilizzare ottimizzazioni del livello di produzione.

Esempio 1. Eseguire la build di Charm++ per la configurazione multi-nodo utilizzando i compilatori Intel ed SMP con tutte le ottimizzazioni di produzione:

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

Esempio 2. Eseguire la build di Charm++ per la configurazione a nodo singolo utilizzando i compilatori Intel ed SMP con tutte le ottimizzazioni di produzione.

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

5. Eseguire la build di NAMD.

Accertarsi di trovarsi nella directory principale di NAMD, quindi configurarla ed eseguire make:

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

Per {namd-arch} si raccomanda 'Linux-x86_64-icc', {charm-arch} dovrebbe essere lo stesso arch con cui si è eseguita la build di Charm++, {opts} dovrebbe essere impostato su '--with-cuda' per attivare l'accelerazione via GPU, altrimenti impostato su '--without-cuda' per una build per sole CPU. La directory di build può essere estesa con .[comment] per la build, ad es.: Linux-x86_64.cuda. Questo è utile per gestire diverse build di NAMD. Si noti che se l'estensione non ha alcun significato, allora './config Linux-x86_64.cuda' non sarà una build CUDA a meno che non si specifichi anche '--with-cuda'.

Flag opzionali per la build di CUDA:
a. Per impostare il percorso corretto del toolkit CUDA, è possibile utilizzare --cuda-prefix;
b. --cuda-gencode consente di aggiungere una differente architettura di calcolo GPU.

Esempio 1.Build di NAMD per architettura x86_64 che usa compilatori Intel, con accelerazione via GPU e percorso CUDA specificato, per nodo singolo:

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

Esempio 2. Build di NAMD per architettura x86_64 che usa compilatori Intel, con accelerazione via GPU e percorso CUDA specificato, per nodi multipli:

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

Esempio 3. Build di NAMD per architettura x86_64 che usa compilatori Intel, senza accelerazione via GPU, per nodi multipli:


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

Esecuzione di processi

Prima di eseguire una versione di NAMD accelerata dalle GPU, installare il più recente driver di visualizzazione NVIDIA per la propria GPU. Per eseguire NAMD, è necessario il file eseguibile ‘namd2’; per l'esecuzione con più nodi è necessario anche il file eseguibile charmrun. Accertarsi di specificare le opzioni di affinità con la CPU come spiegato sotto.

OPZIONI DELLA RIGA DI COMANDO

Opzione generale della riga di comando per eseguire NAMD su un sistema a nodo singolo:

namd2 {namdOpts} {inputFile}

Su un sistema multi-nodo NAMD deve essere eseguito con charmrun come specificato sotto:

charmrun {charmOpts} namd2 {namdOpts} {inputFile}

{charmOpts}

  • ++nodelist {nodeListFile} - l'esecuzione multi-nodo richiede un elenco di nodi
  • Charm++ supporta anche un'opzione ++mpiexec alternativa se si sta usando un sistema di accodamento che mpiexec è impostato per riconoscere.
  • ++p $totalPes - specifica il numero totale di thread PE
  • Questo è il numero totale di Worker Thread (cioè thread PE). Si raccomanda che questo sia uguale a (N. totale di core CPU - N. totale di GPU).
  • ++ppn $pesPerProcess - numero di PE per processo
    • Si raccomanda di impostare questo su N. di core per nodo/N. di GPU per nodo – 1
    • Questo è necessario per liberare uno dei thread di processo per la comunicazione. Accertarsi di specificare +commap qui sotto.
    • Il numero totale di processi è uguale a $totalPes/$pesPerProcess
    • Quando si usa il valore raccomandato per questa opzione, ciascun processo userà una singola GPU

{namdOpts}

  • NAMD erediterà '++p' e '++ppn' come '+p' e '+ppn' se impostato in {charmOpts}
  • Altrimenti, per la build multi-core usare '+p' per impostare il numero di core.
  • Si raccomanda di avere non più di un processo per GPU in esecuzione multi-nodo. Per avere altri thread di comunicazione, si raccomanda di lanciare esattamente un processo per GPU. Per le configurazioni a nodo singolo è possibile usare più GPU per processo.
  • Opzioni di affinità con la CPU (vedere la guida per l'utente):
    • '+setcpuaffinity' per evitare che i thread si muovano
    • '+pemap #-#' - questa opzione mappa i thread di calcolo sui core della CPU
    • '+commap #-#' - questa opzione imposta la gamma per i thread di comunicazione
    • Esempio di configurazione dual-socket con 16 core per socket:
      • +setcpuaffinity +pemap 1-15,17-31 +commap 0,16
  • Opzioni GPU (vedere la guida per l'utente):
    • '+devices {CUDA IDs}' - specifica (facoltativamente) i codici ID dei dispositivi per l'uso in NAMD
    • Se i dispositivi non sono in ordine di socket, potrebbe essere utile impostare questa opzione per assicurarsi che i socket utilizzino le GPU direttamente collegate, per esempio, '+devices 2,3,0,1'

Si raccomanda di controllare sempre i messaggi di avvio in NAMD per accertarsi che le opzioni siano impostate correttamente. Inoltre, l'opzione ++verbose può fornire un output più dettagliato per le esecuzioni che usano charmrun. L'esecuzione del comando top o di altri strumenti di sistema può aiutare ad accertarsi che si stia ottenendo la mappatura del thread richiesta. 

{inputFile}

Utilizzare il file di input *.namd corrispondente da uno o più dataset nella sottosezione successiva.

Esempio 1.Eseguire ApoA1 su 1 nodo con 2 GPU e 2 CPU (20 core totali) e la build di NAMD multi-core:

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

Esempio 2. Eseguire Run STMV su 2 nodi, ciascuno dei quali con 2 GPU e 2 CPU (20 core) e la build SMP di NAMD (si noti che si lanciano 4 processi, ciascuno dei quali controlla 1 GPU):

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

Si noti anche che, per opzione predefinita, si usa il comando "rsh" per avviare namd2 su ciascun nodo specificato nel file nodelist. È possibile modificare questo per mezzo della variabile ambientale CONV_RSH, cioè usare ssh invece di rsh run "export CONV_RSH=ssh" (vedere le note sulla release di NAMD per ulteriori dettagli).

Benchmark

Questa sezione dimostra l'accelerazione via GPU per le serie di dati selezionate. Si noti che potrebbe essere necessario aggiornare i file di input per ridurre la frequenza dell'output energia/tempi. I benchmark sono elencati per ordine crescente di numero di atomi. Si consiglia di eseguire casi di prova di grandi dimensioni come STMV su sistemi dotati di più GPU.

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

APOA1

L'apolipoproteina A1 (ApoA1) è il principale componente proteico della lipoproteina ad alta densità (HDL) nel flusso ematico e gioca un ruolo specifico nel metabolismo lipidico. Il benchmark ApoA1 consiste di 92.224 atomi ed è da anni un benchmark standard inter-piattaforma per NAMD.

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

ATPASE

L'ATP sintasi è un'enzima che sintetizza l'adenosintrifosfato (ATP), l'unità di energia molecolare comune delle cellule. Il benchmark F1-ATPase è un modello della sottounità F1 dell'ATP sintasi.

Satellite Tobacco Mosaic Virus (SMTV)
# of Atoms
1,066,628
Time Steps
500
Output Energies
100
Output Timing
100

STMV

Il virus satellite del mosaico del tabacco (STMV) è un piccolo virus vegetale icosaedrico che peggiora i sintomi del virus mosaico del tabacco (TMV). L'SMTV è un candidato eccellente per la ricerca nella dinamica molecolare perché è relativamente piccolo come virus e rientra nella fascia medio-alta dei virus che è possibile simulare usando la dinamica molecolare tradizionale in una workstation o un piccolo server.

LEGGERE L'OUTPUT

Il valore interessante è "ns/giorno" (i valori maggiori sono migliori) ma è stampato nel log come "giorni/ns" (in questo caso sono migliori i valori minori). Si noti che la maggior parte degli utenti di dinamica molecolare si focalizza sugli “ns/giorno”, il valore invertito di “giorni/ns”. Si raccomanda di fare la media di tutte le occorrenze di questo valore a fini di benchmarking; la frequenza dell'output può essere controllata nel corrispondente file di input *.namd. Ai fini del bilanciamento del carico, gli output "Initial time:" dovrebbero essere trascurati in favore degli output "Benchmark time:" successivi.

Risultati previsti

Vedere i risultati di riferimento qui sotto per diverse configurazioni di sistema con CPU a doppia socket e schede NVIDIA Tesla per sistemi da 1 a 4 nodi collegati con 4 EDR InfiniBand.

ApoA1
F1ATPase
STMV

Configurazioni del sistema consigliate

Configurazione hardware

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

Configurazione software

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

Crea la tua soluzione GPU ideale oggi stesso.