Turing : VASP

Présentation

VASP : Vienna Ab initio Simulation Package. Logiciel de chimie quantique ab initio.

Disponibilité

  • 5.3.3
  • 5.3.5 (version par défaut)
  • 5.4.1

Les exécutables parallèles (MPI) sont disponibles.

Trois exécutables sont fournis, à choisir lors de l'exécution, selon votre besoin :

  • vasp : version standard
  • vasp_gamma : version optimisée pour les calculs au point gamma, plus rapide mais ne permet que des calculs au point gamma
  • vasp_nc : version pour les calculs de structures magnétiques non colinéaires et couplage spin-orbite (à activer par des mots-clés dans le fichier INCAR) mais est plus gourmande en mémoire.

A partir de la version 5.4.1, les exécutables changent officiellement de noms, et deviennent respectivement vasp_std, vasp_gam et vasp_ncl.

Note importante : ces trois versions n'offrent pas forcément des performances identiques ou acceptables sur Turing, mais elles sont néanmoins complémentaires selon les types de calculs. Consultez les remarques concernant l'utilisation du logiciel et de ses performances en bas de page.

Vous pouvez consulter la documentation sur le site officiel de VASP ou le wiki VASP pour plus de renseignements.

Attention : l'accès à cette application est réservé aux utilisateurs/laboratoires disposant d'une licence auprès des développeurs de VASP. Nous vérifierons votre statut avant de vous donner les droits d'exécution. Contactez l'assistance de l'IDRIS pour plus d'informations.

Si vous voulez accéder aux versions 5 et que vous avez une licence pour les versions 4, vous devez acheter une nouvelle licence. La licence 5.2 ouvre également l'accès aux versions 5.3 et 5.4.

Script de lancement

Voici un exemple de script de lancement pour un calcul exécuté dans le WORKDIR :

job.ll
# @ job_name         = VASP
# @ job_type         = bluegene
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ wall_clock_limit = 1:00:00
# @ bg_size          = 128
# @ queue
 
### Initialisation de Module ###
module load vasp
 
### Echo des commandes ###
set -x
 
### Lancement du calcul ###
runjob --np 2048 --ranks-per-node=16 : $VASP_EXEDIR/vasp_gamma

Voici un exemple de script de lancement pour un calcul exécuté dans le TMPDIR :

job.ll
# @ job_name         = job
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ job_type         = bluegene
# @ bg_size          = 128
# @ wall_clock_limit = 1:00:00
# @ queue
 
### Initialisation de Module ###
module load vasp
 
### Echo des commandes ###
set -x
 
### Copie vers le TMPDIR ###
cp ./* $TMPDIR
 
### Lancement du calcul ###
cd $TMPDIR
runjob --np 2048 --ranks-per-node=16 : $VASP_EXEDIR/vasp_gamma
 
### Copie vers le dossier de soumission ###
cd -
cp $TMPDIR/* .

La commande module load vasp charge la version par défaut de VASP. Si vous souhaitez en utiliser une autre, référez vous à la documentation sur la commande module.

Paramètres propres au logiciel

Pseudo-potentiels

Des jeux de pseudo-potentiels PAW (version 5.2, pour les calculs en LDA et PBE, dont les pseudos pour les calculs GW) sont disponibles dans un dossier accessible via la variable d'environnement $PSEUDO_VASP. Pour y accéder, une fois la commande module effectuée, taper simplement :

cd $PSEUDO_VASP

Vous pouvez y accéder depuis la frontale de Turing en interactif, ou en l'intégrant dans votre script, comme par exemple :

module load vasp
cd $PSEUDO_VASP/PBE.52
cat H_h/POTCAR O_h/POTCAR > $WORKDIR/mondossier/POTCAR
cd -
runjob --np 2048 --ranks-per-node=16 : $VASP_EXEDIR/vasp_gamma

Utilisation sur Turing

Les performances de ce logiciel sur Turing dépendent fortement de la taille du système étudié, des paramètres à indiquer dans les fichiers d'entrée, et de la version employée. Il peut y avoir en effet jusqu'à un facteur 20 sur le temps de restitution si l'utilisation n'est pas adaptée !

D'un point de vue général, une taille de système correcte pour une utilisation sur Turing devrait se situer entre 1500 et 5000 bandes à calculer (~500-1600 atomes par cellule périodique). En deçà, les performances seront très décevantes, et au dessus, il n'est pas garanti que le système puisse tenir en mémoire avec une utilisation correcte de Turing.

En effet, les performances les meilleures sont obtenues en ne surchargeant pas les cœurs de calcul (jusqu'à un facteur 2 environ sur le temps de restitution). Ceci équivaut donc à choisir --rank-per-node=16 pour le placement des tâches MPI sur la ligne de commandes au lancement de VASP. Ce placement attribue 1 Go de mémoire par tâche MPI, ce qui suffit pour une grande majorité de cas. Néanmoins, pour des systèmes de taille extrême ou très complexes, il se peut que cette quantité de mémoire ne suffise pas. Augmenter davantage la mémoire par tâche reviendrait à ne pas utiliser tous les cœurs de calcul demandés, et représente donc un gaspillage de ressources, mais qui peut permettre d'effectuer le calcul. Pour plus d'informations, consultez la page dédiée au placement des processus sur Turing.

De plus, la lecture et l'écriture de fichiers par VASP est très pénalisante pour les performances (d'un facteur 2 environ) sur cette machine. Il est donc recommandé d'éviter autant que faire se peut d'accéder à des fichiers, notamment les fichiers WAVECAR, CHG et CHGCAR qui sont produits par défaut pour un calcul. Lors d'un restart, il est donc recommandé de ne pas faire appel à ces fichiers, et de demander à ne pas les écrire (voir paramètres du fichier INCAR). Si ce type de fichier est nécessaire pour une étude (CHGCAR, LOCPOT, etc.), il est préférable d'effectuer un calcul single point qui produira les fichiers désirés sur la géométrie optimisée du système, plutôt que d'inclure leur génération pendant l'optimisation de géométrie.

Remarque : le temps d'initialisation de VASP avant tout calcul peut prendre un certain temps sur Turing, il est donc normal de ne pas avoir de sortie rapidement.

Versions de VASP

Il existe trois versions de VASP, qui se différencient par l'algorithme de calcul implémenté :

  • vasp_gamma : version la plus rapide (de 30 à 50 % par rapport à la version standard), qui ne permet que des calculs au point gamma.
  • vasp : version standard (moins rapide que la version gamma), qui permet la parallélisation sur les points k.
  • vasp_nc : version permettant des calculs de structures magnétiques non-colinéaires (à activer par des mots-clés dans l'INCAR), dont les performances sont égales ou inférieures à la version standard (elle utilise aussi plus de mémoire).

L'utilisation de la version gamma est fortement recommandée, et elle est d'autant plus justifiée par le fait que les systèmes d'étude doivent être de grande taille (pour lesquels le point gamma suffit très généralement).

A partir de la version 5.4.1, les exécutables changent officiellement de noms, et deviennent respectivement vasp_std, vasp_gam et vasp_ncl.

Paramètres du fichier INCAR

Les paramètres de parallélisation dans le fichier INCAR sont *très* sensibles sur Turing. Il est nécessaire d'ajouter dans l' INCAR (attention, le manuel précise d'autres valeurs, qui ne conduisent PAS aux performances les meilleures) :

LREAL = Auto
LPLANE = .TRUE.
NPAR = valeur optimale
LSCALU = .FALSE.
NSIM = 4

Les performances étant fortement dégradées lors de la lecture et écriture de fichiers par VASP, il est également recommandé d'ajouter :

!WAVECAR, CHG et CHGCAR non écrits (fichiers de taille 0) :
LWAVE = .FALSE.
LCHARG = .FALSE.

!Pour annuler tout appel de fichier lors d'un restart :
ICHARG = 0
ISTART = 0

Valeur de NPAR

La valeur optimale de NPAR dépend du système étudié et du nombre de processeurs. Si vous ne mettez pas une valeur correcte, vous risquez un temps d'exécution doublé, voire dans le pire des cas un segmentation fault, un RSPHER error (NPAR trop faible), ou même un calcul qui diverge (rare). Néanmoins, voici pour vous aider les valeurs optimales obtenues pour un cas test :

Cellule de zéolithe MOR doublée et échangée 1 fois (289 atomes), multipliée selon le cas test, PBE, 400 eV, point-Γ, 2 pas de géométrie :

Cas test Nombre de cœurs
(bg_size)
NPAR
version
5.3.3 gamma
NPAR
version
5.3.3 standard
 
 
Système doublé
576 atomes - 1586 bandes
1024
(64)
32 32
2048
(128)
64 32
4096
(256)
64 64
 
 
 
Système ×4
1156 atomes - 3612 bandes
1024
(64)
32 32
2048
(128)
32 32
4096
(256)
64 32
8192
(512)
64
 
 
Système ×8
2312 atomes - 7392 bandes
1024*
(128)
64
2048*
(256)
64
4096*
(512)
64

* : 2 Go par processus MPI nécessaires pour ces calculs avec la version gamma. La version standard ayant besoin de plus de mémoire encore, son utilisation n'est pas recommandée pour un système d'une telle taille.

Note 1 : La version nc suit les paramètres de la version standard.

Note 2 : Selon les versions et les paramètres choisis, un message de WARNING peut apparaitre en début de fichier OUTCAR, indiquant que votre valeur de NPAR n'est pas optimale. Cela n'a vraiment pas été le cas dans le test, il ne faut pas tenir compte de ce message dans la majorité des cas (comme vous pouvez le constater sur le test, et contrairement à ce qui est annoncé dans le WARNING, il n'y a pas de règle mathématique pour ce paramètre).

Note 3 : Depuis la version 5.3, VASP introduit le paramètre NCORE, sensé remplacer le paramètre NPAR. Sur le cas test, utiliser ce paramètre au lieu de NPAR dégrade légèrement les performances. De plus, il serait nécessaire de tester chaque valeur possible (comme ce qui a été fait pour NPAR), ce qui n'est pas envisagé pour le moment.

Note 4 : Pour les calculs avec fonctionnelle hybride, les calculs GW et RPA, choisir obligatoirement NPAR = nombre de cœurs, mais les performances seront médiocres.

Parallélisation sur les points k (KPAR)

Depuis la version 5.3, VASP permet la parallélisation sur les points k. Du fait de l'utilisation de gros systèmes, le point gamma suffit dans la majorité des cas, et il faut alors utiliser vasp_gamma pour obtenir de bonnes performances. Néanmoins, il peut être nécessaire d'utiliser quelques points k pour un système, auquel cas il faut utiliser vasp.

Un nouveau mot-clé gère cette parallélisation dans le fichier INCAR, c'est le paramètre KPAR. Il désigne le nombre de groupes de cœurs de calcul attribués pour chaque point k (ou groupes de points k s'il y en a plus). Il doit donc être égal à un sous-multiple du nombre de cœurs total. Avant toute étude, comme rappelé dans un message dans le fichier OUTCAR, faites des tests sur vos systèmes d'étude pour vérifier vos résultats car cette nouvelle méthode de parallélisation est en cours de développement. Dans certaines conditions et paramètres inadaptés, le calcul peut s'arrêter brutalement, sans forcément produire un message d'erreur.

De façon générale, vu que le nombre de points k reste faible compte tenu de la dimension des systèmes, il est conseillé de préciser dans le fichier INCAR :

KPAR = nombre de points k s'il est diviseur du nombre de cœurs, sinon une valeur proche < nombre de points k

Les performances les meilleures seront obtenues si le nombre de points k irréductibles du système est un multiple du nombre de cœurs total.

Version hybride IBM

La version 5.3.5 de VASP a été optimisée par IBM afin d'utiliser les bibliothèques propriétaires performantes, et un niveau de parallélisme supplémentaire. Utiliser ces binaires permet typiquement un gain de performance d'un facteur 2 à 3 selon le type de calcul et la nature du système traité.

Dans le script de lancement, la ligne de commande runjob est à adapter comme ceci :

runjob --np 1024 --ranks-per-node=16 --envs "OMP_NUM_THREADS=2" --envs "FFT_ESSL_AGGRESSIVE=N" --exe $VASP_EXEDIR/IBM/vasp_IBM
  • L'option OMP_NUM_THREADS permet d'utiliser la parallélisation OpenMP de cette version. Le nombre de threads à indiquer est tel que : ranks-per-node * OMP_NUM_THREADS = 32. Les valeurs optimales de ranks-per-node et de OMP_NUM_THREADS sont à tester pour chaque type de système traité (en général, OMP_NUM_THREADS=2 ou 4).
  • L'option FFT_ESSL_AGGRESSIVE permet d'obtenir les mêmes résultats numériques qu'avec la version non optimisée si elle est égale à N, et peut permettre un léger gain de performances si elle est égale à Y avec une différence numérique < 10^-3.

Voici la liste des binaires disponibles :

  • IBM/vasp_IBM : version standard
  • IBM/vasp_gamma_IBM : version optimisée pour les calculs au point gamma

D'autres binaires sont aussi disponibles (VTS Tools, etc), dans le dossier $VASP_EXEDIR/IBM.

Par ailleurs, ces versions ont aussi été installées avec la bibliothèque ELPA, permettant un gain supplémentaire de performances. Leur utilisation est recommandée. Les binaires sont nommés :

  • IBM/vasp_ELPA_IBM
  • IBM/vasp_gamma_ELPA_IBM

Avec cette bibliothèque, si le nombre de processus MPI (--np) est trop élevé par rapport à la taille de votre système, vous risquez d'obtenir l'erreur :

 ERROR: Problem contains processor column with zero width

Dans ce cas, il faut diminuer le nombre de processus MPI, et adapter le nombre de threads OpenMP.

Note : Ces optimisations ont été portées sur la version 5.4.1. La racine du nom des binaires respecte le nouveau nom officiel des binaires, suffixée de la même façon. Par exemple, IBM/vasp_ELPA_IBM devient IBM/vasp_std_ELPA_IBM.

Documentation

Vous pouvez consulter la documentation sur le site officiel de VASP ou le wiki VASP pour plus de renseignements. Vous trouverez également des informations sur leur forum de discussion.