Parallelisierung in VASP
Ich habe ein System mit 1 k-Punkt, 54 Atomen NBANDS=152und NGZ=80. Ich führe eine AIMD-Simulation unter VASP Version 5.4.4 aus
Der Supercomputer hat 32 Kerne / Knoten. Es ist ein LINUX-Cluster, der durch Infiniband, eine moderne Multicore-Maschine, verbunden ist. Ich habe mich gefragt, wie ich Parameter am besten auswählen und Ressourcen anfordern kann, um eine effiziente und schnelle Berechnung zu erhalten. Hier sind einige Szenarien, die ich betrachtet habe. Ich bin gespannt, was die "beste" Methode wäre (in Bezug auf Effizienz und Geschwindigkeit).
- Basierend auf dem, was ich hier gelesen habe
- Ich sollte so etwas wie 19 Bands (152/8) anfordern. Setzen Sie möglicherweise NBANDS = 160, um gerade 20 Kerne anzufordern.
- Würde ich dann NCORE = 20 in meiner INCAR-Datei setzen und 20 Kerne auf 1 Knoten anfordern?
- Oder wäre es besser, NCORE = 10 zu setzen und dann etwa 2 Knoten und 10 Kerne pro Knoten anzufordern? oder würde das zu viel Kommunikationsaufwand verursachen und die Simulation verlangsamen?
- Wenn ich mich entscheide, Anzahl der Kerne = Anzahl der Atome = 54 zu verwenden
- Würde ich NCORE = 32 setzen und dann 54 Kerne über 2 Knoten anfordern (32 auf 1 Knoten + 22 auf dem zweiten)? Oder 9 Kerne / Knoten und 6 Knoten?
- Kann ich nicht einfach den gesamten Knoten anfordern? 1 Knoten, 32 Kerne
- Setzen Sie dann NCORE = 32 und fordern Sie einfach den gesamten Knoten an. Das VASP-Handbuch schlägt jedoch dagegen vor, da dies NPAR = 1 ergeben würde
- Dies verwirrt mich ein wenig, da ich davon ausgehen würde, dass 32 Kerne auf einem Knoten effizienter sind als Kerne über mehrere Knoten hinweg, die miteinander kommunizieren
Antworten
Als jemand, der viel Benchmarking für VASP durchgeführt hat, würde ich vorschlagen, dass Sie den experimentellen Ansatz ausprobieren. Ich glaube, VASP wird zusätzliche Bands für Sie hinzufügen, wenn dies für die Parallelisierung erforderlich ist, daher würde ich mir darüber persönlich keine Sorgen machen. Das Layout des Knotens (32 Kerne auf 1 Prozessor gegenüber 16 Kernen auf 2 Prozessoren gegenüber speziellen AMD-Prozessor-Layouts auf einer einzelnen CPU) kann sich von Cluster zu Cluster erheblich unterscheiden. Sie können nicht wissen, was optimal ist, ohne es zu versuchen.
Da Sie anscheinend MD-Simulationen ausführen, lohnt es sich meiner Meinung nach, jedes System zu bewerten, bevor Sie eine lange Simulation ausführen. Bei geringfügigen Änderungen müssen Sie nicht erneut markieren, aber wenn Sie von 50 auf 150 auf 300 Atome wechseln, kann sich das Ideal ändern. Führen Sie eine Reihe schneller Berechnungen mit dem gesamten NCORE-Bereich durch, die vernünftig erscheinen. Verwenden Sie das beste Ergebnis. Ich neige dazu, jeden Faktor des größten Knotens zu überprüfen.
Für 32 Kerne würde ich NCORE = (1, 2, 4, 8, 16, 32) überprüfen. Ich würde es gegen 10 oder so geometrische Schritte zeitlich festlegen. Dies mag wie Zeitverschwendung erscheinen, kann aber in Zukunft viel Zeit sparen.
Ich würde fast immer vorschlagen, ganze Knoten anzufordern, es sei denn, Sie haben einen guten Grund, dies nicht zu tun. Möglicherweise sehen Sie auch eine KPAR-Option, wenn Sie sich umschauen. Ich habe gemischte Meinungen gehört. Ich persönlich habe mit der kpoint-Parallelisierung nie ein besseres Ergebnis erzielt als ohne. Es kann jedoch einen Gedächtnisunterschied machen.
Ich dachte, ich würde die Ergebnisse des Benchmarking gemäß Tristans Vorschlag veröffentlichen. Vielleicht wird es in Zukunft für jemanden nützlich sein. Ich habe nur 10 Schritte in der MD gemacht (1 fs Schrittgröße, 10 fs insgesamt).
Die prozentualen Unterschiede beziehen sich alle auf den NCORE = 1-Lauf mit 32 Kernen und 1 Knoten. Es gibt eine 33% ige Beschleunigung, wenn man zu den 2 Knoten mit 64 Kernen geht (NCORE = 32).
Dies kann natürlich je nach Cluster unterschiedlich sein. Dies ist übrigens der Graham-Cluster auf Sharcnet in Kanada - also hoffentlich nützlich für andere Kanadier da draußen :)