Ada : VASP

Présentation

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

Disponibilité

  • 4.6.35
  • 5.2.2
  • 5.2.12
  • 5.3.5 (version par défaut)
  • 5.4.1, hybride

Les exécutables parallèles (MPI ou hybride) 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 (de 30 à 50 %) 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 l'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.

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.

Versions additionnelles (version <= 5.3.5)

L'installation de VASP inclut en plus des outils et/ou algorithmes supplémentaires, dont ceux développés par l'Université du Texas.

Pour y accéder, le nom des exécutables est suffixé par :

  • _vts : ensemble d'outils (état de transition (NEB), fréquences, etc.)
  • _dosbader : projection de la densité d'état sur les volumes de Bader
  • _tbdyn : dynamique et métadynamique avec différents thermostats
  • _beef : fonctionnelle BEEF-vdW

Ces outils sont installés en priorité sur la version par défaut de VASP. Si vous souhaitez d'autres outils ou l'installation sur d'autres versions, contactez l'assistance de l'IDRIS.

Script de lancement

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

job.ll
# @ job_name         = job
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ job_type         = parallel
# @ total_tasks      = 64
# @ wall_clock_limit = 1:00:00
# @ queue
 
### Initialisation de Module ###
module load vasp
 
### Echo des commandes ###
set -x
 
### Lancement du calcul ###
poe vasp

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

job.ll
# @ job_name         = VASP
# @ job_type         = parallel
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ wall_clock_limit = 01:00:00
# @ total_tasks      = 64
# @ queue
 
### Initialisation de Module ###
module load vasp
 
### Echo des commandes ###
set -x
 
### Copie vers le TMPDIR ###
cp ./* $TMPDIR
 
### Lancement du calcul ###
cd $TMPDIR
poe vasp 
 
### Copie vers le dossier de soumission ###
cd -
cp $TMPDIR/* .

Pour la version de VASP 5.4.1, une version compilée avec intel/2015.2 est disponible en ajoutant le suffixe _patched aux nom des executables :

  • vasp_std_patched
  • vasp_gam_patched
  • vasp_ncl_patched

Elle prend en compte les deux derniers correctifs:

  • patch.5.4.1.06112015
  • patch.5.4.1.27082015

Une incompatibilité dans les librairies MPI empêche l'utilisation de poe. Il convient alors d'utiliser mpirun en ayant chargé au préalable l'environnement intel.

job_intel.ll
# @ job_name         = VASP_intel
# @ job_type         = mpich
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ wall_clock_limit = 01:00:00
# @ total_tasks      = 64
# @ environment = NB_TASKS=$(total_tasks)
# @ queue
 
 
### Initialisation de Module ###
module load vasp/5.4.1
module load intel/2015.2
 
### Echo des commandes ###
set -x
 
### Copie vers le TMPDIR ###
cp ./* $TMPDIR
 
### Lancement du calcul ###
cd $TMPDIR
mpirun -np $NB_TASKS vasp_std_patched 
 
### 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 (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 Ada 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 -
poe vasp

Kernel van der Waals

Pour certains calculs, le fichier vdw_kernel.bindat est nécessaire. Celui-ci est aussi disponible dans le dossier $PSEUDO_VASP.

Paramètres du fichier INCAR

Les paramètres de parallélisation dans le fichier INCAR sont *très* sensibles sur Ada. Il est nécessaire d'y ajouter :

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

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 RSPHERE error (NPAR trop faible), ou même un calcul qui diverge. 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), PBE, 400 eV, point-Γ, 2 pas de géométrie :

Version Nombre de
cœurs
NPAR Version Nombre de
cœurs
NPAR
4.6.35
standard
16 1 4.6.35
gamma
16 1
32 2 32 2
64 4 64 4
128 16 128 16
Version Nombre de
cœurs
NPAR Version Nombre de
cœurs
NPAR
5.2.2
standard
16 4 5.2.2
gamma
16 4
32 1 32 4
64 4 64 2
128 32 128 8
Version Nombre de
cœurs
NPAR Version Nombre de
cœurs
NPAR
5.2.12
standard
16 16 5.2.12
gamma
16 1
32 32 32 2
64 64 64 4
128 16 128 32
256 32 256 32
Version Nombre de
cœurs
NPAR Version Nombre de
cœurs
NPAR
5.3.3
standard
8 8 5.3.3
gamma
16 4
16 16 32 16
32 32 64 4
64 64 128 16
128 16 256 32
256 32

Note 1 : Les versions nc suivent les paramètres de la version standard correspondante, et les versions vts suivent les versions correspondantes.

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. Ca 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, censé 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.

Parallélisation sur les points k (KPAR)

Depuis la version 5.3, VASP permet la parallélisation sur les points k. Du point de vue de l'accélération parallèle, cette méthode est très avantageuse, et permet, selon votre système d'étude, d'utiliser plus de cœurs de calcul et ainsi obtenir un résultat plus rapidement et de façon efficace. Bien entendu, si vous n'avez qu'un seul point k (gamma), utilisez la version vasp_gamma qui est très efficace dans ce cas (le temps d'exécution est au maximum divisé par 2 pour le même nombre de cœurs de calcul, et elle introduit une déviation sur l'énergie totale de seulement 10-4 eV).

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, il n'a pas été observé de règle stricte concernant ce paramètre. A titre informatif, voici ce qu'il a globalement été observé :

  • NPAR doit être ajusté en fonction de KPAR : dans le tableau de NPAR précédent, choisir NPAR en fonction du résultat de la division nombre de cœurs / KPAR. Si vous ne mettez pas la valeur qui convient, VASP utilise la valeur en tant que telle, ou la plus grande valeur possible, ce qui est très désavantageux dans la majorité des cas du point de vue des performances.
  • Plus il y a de points k irréductibles, et plus il est possible de prendre un grand nombre de cœurs de calcul efficacement.
  • Valeurs de KPAR en fonction du système :
Petit système

(H2O, 1000Å3, 800eV)
Testé avec les grilles
2×2×2
2×2×4
5×5×5
 
nb points k ≤ nb de cœurs * Les performances les meilleures semblent être obtenues si nb de cœurs / KPAR = 8
* Exemple : pour 63 points k irréductibles, avec 128 cœurs de calcul, choisir KPAR = 16
nb points k > nb de cœurs * Les performances les meilleures semblent être obtenues si nb de coeurs / KPAR = 4
* Exemple : pour 63 points k irréductibles, avec 32 cœurs de calcul, choisir KPAR = 8
Système de taille respectable

(zéolithe, 289 atomes)
Testé avec les grilles
1×1×2
2×2×2
nb points
k = 1
* Lancez avec vasp_gamma !
nb points
k > 1
* Les performances les meilleures semblent être obtenues si nb de cœurs / KPAR = 16, sauf…
* Si KPAR est supérieur ou égal au nombre de points k irréductibles du système, alors il faut choisir KPAR = nombre de points k irréductibles, sauf…
* Si le nombre de points k n'est pas un diviseur du nombre de cœurs de calcul total, il faut alors choisir KPAR tel que nb de cœurs / KPAR = 16, mais les performances risquent de ne pas être optimales.

Exemple récapitulatif 1 : J'ai 50 points k irréductibles pour mon système de taille modeste, et je souhaite utiliser 128 cœurs de calcul. Je prends donc KPAR=16 d'après les instructions (car 128 / 8 = 16). J'ai donc un nombre de cœurs par groupe KPAR de 128 / 16 = 8, donc d'après le tableau de NPAR pour VASP version 5.3.3 standard, pour 8 cœurs il faut prendre NPAR=8. Conclusion de l'exemple : KPAR=16 et NPAR=8.

Exemple récapitulatif 2 : J'ai 8 points k irréductibles pour mon système de grande taille, et je souhaite utiliser 256 cœurs de calcul. Je devrais prendre KPAR=16 (256 / 16 = 16), mais KPAR > nb de points k, je dois donc choisir KPAR=8. J'ai donc un nombre de cœurs par groupe KPAR de 256 / 8 = 32, donc d'après le tableau de NPAR pour VASP version 5.3.3 standard, pour 32 cœurs il faut prendre NPAR=32. Conclusion de l'exemple : KPAR=8 et NPAR=32.

Note : N'oubliez pas que chaque groupe de cœurs de calcul va traiter un(des) point(s) k différent(s), et par conséquent un groupe de cœurs doit pouvoir disposer de ressources suffisantes pour pouvoir “contenir” la maille élémentaire en entier. Si ce n'est pas le cas, le calcul peut se bloquer avec un message d'erreur de type insufficient virtual memory.

Parallélisation hybride

La version 5.4.1 permet l'utilisation de la bibliothèque MKL threadée. Lorsque l'efficacité parallèle devient faible en fonction du nombre de processus MPI, il est possible d'utiliser des threads pour compenser. Cette version présente aussi un intérêt si votre système ne tient pas en mémoire en restant en parallélisation MPI pure. Ainsi, lorsque le nombre de processus MPI choisi est efficace, rien n'est à modifier ou ajouter dans le script de lancement. Si vous souhaitez utiliser des threads, voici le script de lancement correspondant :

job.ll
# @ job_name         = job
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ job_type         = parallel
# @ total_tasks      = 128
# @ parallel_threads = 2
# @ wall_clock_limit = 1:00:00
# @ queue
 
### Initialisation de Module ###
module load vasp/5.4.1
 
### Echo des commandes ###
set -x
 
### Lancement du calcul ###
export MKL_NUM_THREADS=2
poe vasp_std

Le nombre de threads optimal est très généralement 2, mais vous pouvez avoir besoin d'en utiliser plus, par exemple si votre système ne tient toujours pas en mémoire ou si l'efficacité est encore bonne pour votre système. Comme mentionné dans l'exemple, il est primordial d'accorder les valeurs parallel_threads et MKL_NUM_THREADS, sans quoi les performances ne seront pas bonnes.

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.