NAMD mit Grafikprozessorbeschleunigung

Anleitung für grafikprozessorfähige Anwendungen lesen und direkt beginnen

NAMD

NAMD (NAnoscale Molecular Dynamics) ist ein Programm zur Simulation molekulardynamischer Prozesse, das für Hochleistungssimulationen großer biomolekularer Systeme entwickelt wurde. NAMD, das von der University of Illinois in Urbana-Champaign (UIUC) entwickelt wurde, ist zusammen mit Binärdateien und Quellcode frei verfügbar.

Die aktuelle Version, NAMD 2.11, läuft auf NVIDIA-Grafikprozessoren im Allgemeinen 7-mal schneller als auf rein CPU-basierten Systemen.* Dadurch lassen sich Molekulardynamiksimulationen innerhalb weniger Stunden anstatt mehrerer Tage durchführen. Außerdem läuft die aktuelle Version 2-mal schneller als NAMD 2.10. Dadurch trägt sie zu Einsparungen bei den Hardwarekosten bei. Anwender können zugleich die Zeit, die sie für ihre wissenschaftlichen Entdeckungen aufwenden, erheblich verkürzen.

* Server mit Doppel-CPU, Intel E5-2698 v3 mit 2,3 GHz, NVIDIA Tesla K80 mit deaktiviertem ECC und aktiviertem Autoboost; STMV-Datensatz

NAMD sorgt mit Grafikprozessoren für 7-fache Beschleunigung

Installation

Systemanforderungen

NAMD sollte sich auf jede parallele Plattform mit einem modernen C++-Compiler portieren lassen. Vorkompilierte grafikprozessorbeschleunigte NAMD 2.11-Binärdateien stehen für Windows, Mac OS X und Linux zum Download bereit. Da NAMD sowohl den Grafikprozessor als auch die CPU nutzt, empfehlen wir, eine relativ moderne CPU einzusetzen, um mit NAMD eine optimale Anwendungsleistung zu erzielen. 

Download‑ und Installationsanleitung

Die NAMD-Entwickler stellen vollständige, optimierte Binärdateien für alle gängigen Plattformen bereit, auf die NAMD bereits portiert wurde. Die Binärdateien finden Sie auf der NAMD-Downloadseite.

Das Kompilieren von NAMD ist in der Regel nur erforderlich, wenn Sie Funktionen hinzufügen oder ändern möchten, wenn Sie durch Erstellen einer Charm++-Version eine spezielle Netzwerkhardware benutzen wollen, oder wenn Sie schon Ihre NAMD-Version individuell angepasst haben. Eine vollständige Anleitung zum Kompilieren von NAMD ist in den Versionshinweisen enthalten. Zudem steht sie auch auf der NAMD-Website bereit und liegt allen Distributionen bei.

KOMPILIERUNG IM ÜBERBLICK

1. Den NAMD-Quellcode herunterladen.

2. Das Paket und Charm++ extrahieren.

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

3. TCL und FFTW herunterladen und installieren.

Welche Version für diese Bibliotheken die richtige ist, entnehmen Sie bitte den Versionshinweisen.

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. Charm++ aufbauen.

Das Build-Skript verfügt über einen Interaktivmodus. Sie können aber auch in der Befehlszeile Optionen hinzufügen, wie nachstehend gezeigt.

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

Für {arch} muss eine der folgenden Optionen verwendet werden: „verbs-linux-x86_64“ für Konfigurationen mit mehreren Knoten und „multicore-linux64“ für Systeme mit Einzelknoten. Weitere Optionen sind nicht erforderlich, werden aber für eine optimale Leistung empfohlen: „smp“ zur Verwendung von SMP für Builds mit mehreren Knoten (für weitere Angaben bitte hier klicken) und „--with-production“ für den Einsatz von Optimierungen auf Produktionsebene.

Beispiel 1:  Charm++-Build für eine Konfiguration mit mehreren Knoten, die Intel-Compiler und SMP mit allen Produktionsoptimierungen verwendet.

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

Beispiel 2: Charm++-Build für eine Konfiguration mit Einzelknoten, die Intel-Compiler mit allen Produktionsoptimierungen verwendet.

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

5. NAMD aufbauen.

Für diesen Schritt müssen Sie sich im Hauptverzeichnis von NAMD befinden. Nehmen Sie dann die Konfiguration vor und führen Sie „make“ aus:

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

Für {namd-arch} empfehlen wir „Linux-x86_64-icc“. {charm-arch} sollte dasselbe arch sein, mit dem Sie auch Charm++ aufgebaut haben. {opts} sollte, wenn Sie Grafikprozessorbeschleunigung ermöglichen möchten, auf „--with-cuda“, anderenfalls, für rein CPU-basierte Builds, auf „--without-cuda“ gesetzt werden. Der Name des Build-Verzeichnisses kann für den Aufbau durch .[Kommentar] erweitert werden, z. B. Linux-x86_64.cuda. Das ist sinnvoll, wenn Sie verschiedene NAMD-Builds verwalten müssen. Die Namensgebung alleine ist bedeutungslos. „./config Linux-x86_64.cuda“ führt also erst dann zu einem CUDA-Build, wenn Sie auch „--with-cuda“ angeben.

Optionale Kennzeichnungen für den CUDA-Build:
a) Mit „--cuda-prefix“ können Sie den korrekten Pfad zum CUDA-Toolkit festlegen.
b) Mit „--cuda-gencode“ können Sie eine andere Grafikprozessorarchitektur hinzufügen.

Beispiel 1: NAMD-Build für eine x86_64-Architektur unter Einsatz von Intel-Compilern, mit Grafikprozessorbeschleunigung, unter Angabe eines CUDA-Pfades, für Einzelknoten:

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

Beispiel 2: NAMD-Build für eine x86_64-Architektur unter Einsatz von Intel-Compilern, mit Grafikprozessorbeschleunigung, unter Angabe eines CUDA-Pfades, für mehrere Knoten:

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

Beispiel 3: NAMD-Build für eine x86_64-Architektur unter Einsatz von Intel-Compilern, ohne Grafikprozessorbeschleunigung, für mehrere Knoten:


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

Befehlsausführung

Bevor Sie eine grafikprozessorbeschleunigte Version von NAMD ausführen, installieren Sie den aktuellsten NVIDIA-Bildschirmtreiber für Ihren Grafikprozessor. Zur Ausführung von NAMD benötigen Sie die ausführbare Datei namd2 und zur Ausführung auf mehreren Knoten zusätzlich die ausführbare Datei charmrun. Geben Sie außerdem auch die im Folgenden erläuterten Optionen für die CPU-Affinität an.

STEUERUNG ÜBER DIE BEFEHLSZEILE

Allgemeine Befehlszeile zur Ausführung von NAMD in einem System mit Einzelknoten:

namd2 {namdOpts} {inputFile}

In einem System mit mehreren Knoten ist NAMD wie folgt mit charmrun auszuführen:

charmrun {charmOpts} namd2 {namdOpts} {inputFile}

{charmOpts}

  • ++nodelist {nodeListFile}: Für die Ausführung mit mehreren Knoten ist eine Liste der Knoten erforderlich.
  • Charm++ unterstützt auch die Alternativoption ++mpiexec für den Fall, dass Sie ein Task-Scheduler verwenden, der mpiexec erkennen kann.
  • ++p $totalPes: Gibt die Gesamtzahl der PE-Threads an.
  • Entspricht der Gesamtzahl der Worker-Threads (PE-Threads). Wir empfehlen, diese auf denselben Wert wie (#TotalCPUCores – #TotalGPUs) zu setzen.
  • ++ppn $pesPerProcess: Gibt die Anzahl PE-Threads je Prozess an.
    • Wir empfehlen, diese auf #ofCoresPerNode/#ofGPUsPerNode minus 1 zu setzen.
    • Diese Konfiguration ist notwendig, um für jeden Prozess einen der Threads für die Kommunikation freizugeben. Sie müssen +commap angeben (siehe weiter unten).
    • Die Gesamtzahl der Prozesse ist gleich $totalPes/$pesPerProcess.
    • Wird der empfohlene Wert für diese Option verwendet, verwendet jeder Prozess einen einzelnen Grafikprozessor.

{namdOpts}

  • NAMD erbt „++p“ und „++ppn“ als „+p“ und „+ppn“, wenn sie in {charmOpts} festgelegt sind.
  • Verwenden Sie anderenfalls für den Multi-Core-Build „+p“, um die Anzahl der Recheneinheiten einzustellen.
  • Bei der Ausführung mit mehreren Knoten sollte auf jedem Grafikprozessor nicht mehr als ein Prozess laufen. Um mehr Kommunikations-Threads zu erhalten, sollten Sie genau einen Prozess pro Grafikprozessor starten. Bei Einzelknoten ist es in Ordnung, für jeden Prozess mehrere Grafikprozessoren einzusetzen.
  • Optionen für die CPU-Affinität (Einzelheiten finden Sie in der Bedienungsanleitung):
    • „+setcpuaffinity“: bindet Threads an den Prozess.
    • „+pemap #-#“: ordnet Berechnungs-Threads bestimmten CPU-Recheneinheiten zu
    • „+commap #-#“: legt einen Bereich für Kommunikations-Threads fest
    • Beispiel für eine Doppelsockel-Konfiguration mit 16 Recheneinheiten je Sockel:
      • +setcpuaffinity +pemap 1-15,17-31 +commap 0,16
  • Optionen für Grafikprozessoren (Einzelheiten finden Sie in der Bedienungsanleitung):
    • „+devices {CUDA IDs}“: Geben Sie hier optional die Geräte-IDs an, die Sie in NAMD verwenden wollen.
    • Werden die Geräte nicht in der Reihenfolge der Sockel angegeben, können Sie mit dieser Option sicherstellen, dass die Sockel wirklich ihre direkt verbundenen Grafikprozessoren verwenden, z. B. „+devices 2,3,0,1“.

Wir empfehlen, stets die Startmeldungen in NAMD zu überprüfen, um sicherzugehen, dass die Optionen wirklich korrekt konfiguriert sind. Darüber hinaus kann für Durchläufe mit charmrun die Option „++verbose“ für eine detailliertere Ausgabe bei der Ausführung sorgen. Mithilfe von "top" oder anderen Systemtools können Sie die gewünschte Thread-Zuordnungen kontrollieren.

{inputFile}

Verwenden Sie die entsprechende Eingabedatei *.namd aus einem der Datensätze im nächsten Unterabschnitt.

Beispiel 1: ApoA1 auf einem Knoten mit 2 Grafikprozessoren und 2 CPUs (insgesamt 20 Recheneinheiten) und einem Multi-Core-NAMD-Build ausführen.

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

Beispiel 2: Führen Sie STMV auf 2 Knoten – mit je 2 Grafikprozessoren und 2 CPUs (20 Recheneinheiten) – und einem SMP-NAMD-Build aus (dadurch werden 4 Prozesse gestartet, von denen jeder einen Grafikprozessor steuert).

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

Standardmäßig startet der Befehl „rsh“ auf jedem Knoten, der in der Datei mit der Knotenliste eingetragen ist, die Binärdatei namd2. Sie können dies mithilfe der Umgebungsvariablen CONV_RSH ändern: Um „ssh“ anstelle von „rsh“ zu verwenden, setzen Sie „export CONV_RSH=ssh“ (Einzelheiten entnehmen Sie bitte den NAMD-Versionshinweisen).

Benchmarks

In diesem Abschnitt wird die Grafikprozessorbeschleunigung anhand ausgewählter Datensätze erläutert. Beachten Sie bitte, dass Sie möglicherweise die Eingabedateien ändern müssen, um die Frequenz der Ausgabeenergie und des Ausgabetimings zu reduzieren. Die Benchmarks sind aufsteigend nach der Anzahl der Atome aufgeführt. Es wird empfohlen, umfangreiche Tests wie STMV auf Systemen mit mehreren Grafikprozessoren auszuführen.

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

APOA1

Apolipoprotein A1 (ApoA1) ist der wichtigste Proteinbestandteil des High Density Lipoprotein (HDL; Lipoprotein hoher Dichte) im Blutkreislauf und spielt für den Lipidmetabolismus eine besondere Rolle. Der Benchmarktest „ApoA1“ arbeitet mit 92.224 Atomen und ist seit vielen Jahren ein plattformübergreifender Standardbenchmarktest für NAMD.

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

ATPASE

ATP-Synthase ist ein Enzym, das Adenosintriphosphat (ATP), den universellen Energieträger in Zellen, synthetisiert. Der Benchmarktest „F1-ATPase“ stellt ein Modell der Untereinheit F1 der ATP-Synthase dar.

Tabak-Mosaik-Satelliten-Virus
# of Atoms
1,066,628
Time Steps
500
Output Energies
100
Output Timing
100

STMV

Das Tabak-Mosaik-Satelliten-Virus (STMV) ist ein kleines, ikosaedrisches Pflanzenvirus, das die Symptome bei einer Infizierung mit dem Tabakmosaikvirus (TMV) noch weiter verstärkt. Das SMTV eignet sich ausgezeichnet für die Forschung in der Molekulardynamik, denn es ist relativ klein und steht auf der Skala, was bei Simulationen mit herkömmlicher Molekulardynamik auf einer Workstation oder einem kleinen Server noch machbar ist, in der Mitte bis ganz oben.

AUSGABE RICHTIG VERSTEHEN

Die Leistungsgröße dieser Benchmarks sollte in „ns/Tag“ verglichen werden (je höher, desto besser). In der Ausgabedatei von NAMD wird jedoch „Tage/ns“ angezeigt (je niedriger, desto besser). Die meisten Anwender der Molekulardynamik verwenden die Einheit „ns/Tag“, also den Kehrwert von „Tagen/ns“. Es wird empfohlen, für Benchmarkzwecke den Durchschnitt dieses Wertes zu nehmen. Die Ausgabehäufigkeit kann in der entsprechenden Eingabedatei *.namd gesetzt werden. Aufgrund des Lastausgleichs zu Beginn sollten die Ausgaben unter „Initial time:“ (Anfangsdauer) zugunsten der späteren Ausgaben unter „Benchmark time:“ (Benchmarkdauer) vernachlässigt werden.

Erwartete Leistungsergebnisse

Die folgenden Referenzergebnisse gelten für verschiedene Systemkonfigurationen mit CPU auf einem Doppelsockel und für NVIDIA Tesla-Karten mit 1–4 Knoten mit 4-fachem EDR-InfiniBand.

ApoA1
F1ATPase
STMV

Empfohlene Systemkonfigurationen

Hardwarekonfiguration

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

Softwarekonfiguration

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

Ihre ideale Grafikprozessorlösung