Turing : ABINIT

Présentation

ABINIT est un logiciel de chimie quantique fondé sur la méthode DFT (Density Functional Theory).

Il est développé par Xavier Gonze et Jean-Michel Beuken de l'unité de Physico-Chimie et de Physique des Matériaux de l'Université Catholique de Louvain, en Belgique.

La documentation est disponible sur le site Web du logiciel ABINIT.

Disponibilité

Les numéros des versions disponibles sont :

  • 7.4.1 MPI (version par défaut)
  • 7.4.1 Hybride MPI/OpenMP
  • 7.10.4 Hybride

Les versions parallèles MPI et Hybride (le cas échéant) sont installées.

Script de lancement

Voici un exemple de script de lancement en parallélisation hybride pour un calcul exécuté dans le WORKDIR :

job.ll
# @ job_name         = ABINIT
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ job_type         = BLUEGENE
# @ bg_size          = 64
# @ wall_clock_limit = 1:00:00
# @ queue
 
### Initialisation de Module ###
module load abinit/7.10.4
 
### Echo des commandes ###
set -x
 
### Lancement du calcul ###
runjob --np 1024 --ranks-per-node=16 --envs "OMP_NUM_THREADS=4" : $ABINIT_EXEDIR/abinit < abinit.files > out.log

Voici un exemple de script de lancement en parallélisation MPI pour un calcul exécuté dans le TMPDIR :

job.ll
# @ job_name         = ABINIT
# @ job_type         = BLUEGENE
# @ output           = $(job_name).$(jobid)
# @ error            = $(job_name).$(jobid)
# @ wall_clock_limit = 1:00:00
# @ bg_size          = 64
# @ queue
 
### Initialisation de Module ###
module load abinit
 
### Echo des commandes ###
set -x
 
### Copie vers le TMPDIR ###
cp ./* $TMPDIR
 
### Lancement du calcul ###
cd $TMPDIR
runjob --np 1024 --ranks-per-node=16 : $ABINIT_EXEDIR/abinit < abinit.files > out.log
 
### Copie vers le dossier de soumission ###
cd -
cp $TMPDIR/* .

Vous pouvez aussi vous référer à nos conseils plus généraux sur la soumission en queue sur Turing d'un travail parallélisé avec MPI ou parallélisé en mode mixte MPI/OpenMP.

Paramètres propres au logiciel

Pseudo-potentiels

Deux ensembles complets de pseudopotentiels pour tout le tableau périodique sont disponibles sur le site Web du logiciel ABINIT.

Fichier abinit.files

Dans l'exemple de script de lancement, le fichier abinit.files est nécessaire. Il contient en effet la liste des fichiers d'entrée, les préfixes pour les fichiers de sortie, ainsi que la liste des pseudopotentiels pour le calcul. Si ce fichier n'est pas présent en argument de l'exécutable, votre calcul restera bloqué (car le code attend cette liste de fichiers). Ce fichier est typiquement de la forme :

fichier_dentree.in
fichier_de_sortie.out
prefix_fichiers_temp
prefix_fichiers_fonctiond'onde(etc)
prefix_fichiers_log_de_chaque_processus
/workgpfs/rech/xxx/rxxx001/ABINIT/pseudo1.psp
/workgpfs/rech/xxx/rxxx001/ABINIT/pseudo2.psp

Parallélisation par défaut

ABINIT utilise la parallélisation MPI dans de nombreuses parties de son code. Certaines parties peuvent également bénéficier d'une parallélisation OpenMP additionnelle. Par défaut, la parallélisation se fait sur les points k et/ou sur les états de spin.

Pour utiliser au mieux les ressources, il faut essayer de choisir un nombre de tâches MPI multiple du nombre de points k (par exemple, sans spin et pour 500 points k, 500 tâches MPI donneront une solution plus rapidement que pour 512). Vous pourrez trouver des informations complémentaires dans les tutoriaux du site ABINIT.

Néanmoins, les autres modes de parallélisation permettent de plus ou moins s'affranchir de ces contraintes, tout en obtenant de meilleures performances.

Parallélisation automatique (versions 7.10+)

Afin d'augmenter significativement les performances, notamment par rapport à la parallélisation par défaut, ABINIT peut déterminer de façon automatique la répartition des cœurs de calcul, qu'il attribue de façon optimale selon les étapes de la simulation.

Pour activer ce mode, il suffit simplement d'écrire dans le fichier d'entrée : AUTOPARAL=1. La répartition éventuellement déjà présente dans votre fichier doit alors être supprimée ou commentée (mots-clés npkpt, npband, npfft, max_ncpus, mkmem, paral_kgb, etc.).

Parallélisation KGB (version 7.4)

Pour les calculs à l'état fondamental, il est possible d'obtenir de bonnes performances en utilisant la parallélisation sur les points k (K), les vecteurs d'onde (G) et les bandes (B). Malheureusement, ce mode de parallélisation n'est pas automatique sur les anciennes versions et il est nécessaire d'indiquer le nombre de cœurs attribués pour traiter les points k, les bandes, et les transformées de Fourier (FFT) de façon individuelle. Voici un résumé de la méthode la plus simple, d'autres sont disponibles sur la page dédiées des tutoriaux de ABINIT. Notez que cette méthode fonctionne mieux pour un grand nombre de tâches (> 512) :

  • Dans cette étape, vous devez indiquer dans votre fichier d'entrée (par exemple abinit.in) : paral_kgb=-nombre_de_tâches_MPI_maximum_souhaité.
    Exemple pour 512 tâches MPI :

    paral_kgb=-512
  • Vous devez lancer ce calcul sur 1 seul tâche MPI, c'est pourquoi il est conseillé de lancer ce calcul sur Ada ou sur votre machine locale. Ce calcul est très rapide, et consiste seulement à déterminer la configuration de calcul.
  • Le résultat se trouve à la fin du fichier out.log pour notre exemple (ce fichier est à indiquer dans le script job). La meilleure configuration correspond à la première ligne dans laquelle la valeur de weight est la plus proche de 1.
    Voici un exemple :

     mpi_setup : COMMENT -
     For dataset=   1  a possible choice for less than  512 processors is:
      nproc     npkpt  npspinor    npband     npfft    bandpp    weight
       480       60        1         4         2         1        0.50
       240       60        1         2         2         2        0.25
       240       60        1         4         1         1        1.00
       120       60        1         2         1         2        1.00
  • Il vous suffit alors de récupérer les paramètres optimaux pour votre calcul. Dans cet exemple, en choisissant 240 tâches MPI (notez bien malgré ce qui est indiqué qu'il s'agit sur Turing du nombre de tâches MPI et non de cœurs de calcul, donc dans votre script job : –np 240), il faudra indiquer dans votre fichier abinit.in paral_kgb=1 (dans tous les cas, pour activer la parallélisation), ainsi que :

    paral_kgb=1
      
    npkpt=60
    npband=4
    npfft=1
  • Afin d'utiliser correctement les ressources de Turing, il sera nécessaire dans cet exemple d'utiliser la version hybride du code pour pouvoir utiliser les cœurs de calcul au maximum. Pour plus d'informations, consultez la page dédiée au placement des processus sur Turing.

Ceci reste la méthode la plus simple et la plus rapide. En consultant la page dédiée du site ABINIT, vous trouverez la description complète de la détermination précise de la configuration optimale, paramètre par paramètre, mais celle-ci peut s'avérer plus longue et consommatrice de ressources, pour un résultat souvent proche de la méthode simple.