Parallelizzazione in VASP

Aug 19 2020

Ho un sistema che ha 1 punto k, 54 atomi NBANDS=152e NGZ=80. Sto eseguendo una simulazione AIMD su VASP versione 5.4.4

Il supercomputer ha 32 core / nodo. È un cluster LINUX collegato da Infiniband, moderna macchina multicore. Mi chiedevo quale sarebbe il modo migliore per selezionare i parametri e richiedere risorse per ottenere un calcolo efficiente e veloce. Ecco alcuni scenari che ho considerato. Sono curioso di sapere quale sarebbe il metodo "migliore" (in termini di efficienza e velocità).

  1. Sulla base di quello che ho letto qui
  • Dovrei richiedere qualcosa come 19 bande (152/8). Forse impostare NBANDS = 160 per richiedere anche 20 core.
  • Dovrei quindi impostare NCORE = 20 nel mio file INCAR e richiedere 20 core su 1 nodo?
  • O sarebbe meglio impostare NCORE = 10. E poi richiedere qualcosa come 2 nodi e 10 core per nodo? o ciò creerebbe un sovraccarico di comunicazione eccessivo e rallenterebbe la simulazione?
  1. Se decido di utilizzare # of core = # of atoms = 54
  • Impostare NCORE = 32 e quindi richiedere 54 core su 2 nodi (32 su 1 nodo + 22 sul secondo)? O 9 core / nodo e 6 nodi?
  1. Non posso semplicemente richiedere l'intero nodo? 1 nodo, 32 core
  • quindi allora imposta NCORE = 32 e richiedo solo l'intero nodo. Tuttavia il manuale VASP suggerisce di non farlo perché ciò renderebbe NPAR = 1
  • questo mi confonde un po 'perché presumo che 32 core su un nodo sarebbero più efficienti che avere core su più nodi che comunicano tra loro

Risposte

11 TristanMaxson Aug 20 2020 at 04:04

Come qualcuno che ha fatto molti benchmark per VASP, ti suggerirei di provare l'approccio sperimentale. Credo che VASP aggiungerà bande aggiuntive per te se necessario per la parallelizzazione, quindi non me ne preoccuperei personalmente. Il layout del nodo fisicamente (32 core su 1 processore vs 16 core su 2 processori vs layout di processori AMD speciali su una singola CPU) può differire in modo significativo da cluster a cluster, non puoi sapere cosa è ottimale senza provare.

Dal momento che stai eseguendo simulazioni MD, penso che valga la pena confrontare ogni sistema prima di eseguire una lunga simulazione. Cambiamenti minori non richiedono di riclassificare, ma se passi da 50 a 150 a 300 atomi, l'ideale potrebbe cambiare. Esegui una serie di calcoli rapidi con l'intera gamma di NCORE che sembra ragionevole. Usa il miglior risultato. Tendo a controllare ogni fattore del nodo più grande.

Per 32 core, controllerei NCORE = (1, 2, 4, 8, 16, 32). Lo metterei contro una decina di passaggi geometrici. Può sembrare una perdita di tempo, ma potrebbe finire per risparmiare una grande quantità di tempo in futuro.

Suggerirei quasi sempre di richiedere interi nodi a meno che tu non abbia una buona ragione per non farlo. Alla fine potresti vedere anche un'opzione KPAR mentre ti guardi intorno, ho sentito opinioni contrastanti. Personalmente non ho mai ottenuto un risultato migliore con la parallelizzazione di kpoint che senza di essa. Tuttavia, può fare la differenza nella memoria.

7 DoubleKx Aug 21 2020 at 03:50

Ho pensato di pubblicare i risultati del benchmarking secondo il suggerimento di Tristan. Forse sarà utile per qualcuno in futuro. Ho eseguito solo 10 passaggi nel MD (dimensione del passaggio di 1 fs, 10 fs totali).

Le differenze percentuali sono tutte relative a NCORE = 1 esecuzione con 32 core e 1 nodo. C'è un aumento della velocità del 33% andando ai 2 nodi con 64 core (NCORE = 32).

Ovviamente questo può variare a seconda del tuo cluster. A proposito, questo è l'ammasso Graham su Sharcnet in Canada, quindi spero che sia utile per i colleghi canadesi là fuori :)