Environnements logiciels

Logiciel de simulation en dynamique moléculaire

Environnements logiciels

Le cluster utilise les Environment Modules pour gérer les versions des logiciels et leurs dépendances.

  • module avail : liste les logiciels disponibles.
  • module load <nom_du_module> : charge un outil spécifique dans votre environnement.
  • module list : affiche les modules actuellement chargés.
  • module purge: nettoie l’environnement en déchargeant tous les modules et permet de repartir de zéro.

⚠️ Attention : Les modules GPU-ARM peuvent être visualisés depuis les frontales x86 avec la commande : 

module show gpu_modules

 Ils sont destinés à être inclus dans un script sbatch utilisant une partition GPU ou pour compiler depuis un noeud GPU — il ne faut pas les utiliser pour compiler sur les frontales x86, ni les exécuter sur une partition CPU.

⚠️ Attention : Évitez à tout prix d'ajouter à votre $HOME/.bachrc des chemins vers ARM (GPU) ou x86, car le passage d'une architecture à l'autre peut engendrer de graves problèmes. 

 


CPU-x86

Exécuter module avail depuis le frontal permet d’afficher tous les modules qui peuvent être utilisés sur le nœud de login ainsi que sur les nœuds de calcul CPU.


 -------/softs/x86/modulefiles/compilers_and_libraries  -------
openblas/0.3.31-gcc12.3  openmpi/intel/    openmpi/gcc/  gcc/14.1 
toolchain/gcc14.1        toolchain/oneapi  oneapi/  
 -------/softs/x86/modulefiles/scientific_applications  -------
fftw/  netcdf-fortran/   hdf5/   openfoam/  miniforge/ vasp/                       
 -------/softs/x86/modulefiles/tools  -------
autotools/ cmake/3.25.1  linaro-forge/
 ------- /softs/x86/modulefiles/gpu_modules  -------
gpu_modules  


Lors du travail sur le nœud frontal, si vous souhaitez voir les modules accessibles uniquement sur les nœuds GPU, afin de choisir ceux à utiliser dans votre script SLURM sans avoir besoin de vous connecter aux nœuds GPU, vous pouvez faire :

module show gpu_modules 

Les bibliothèques scientifiques


oneAPI - MKL

$ module load oneapi/
You can load modules for a product belonging to oneAPI 2025.
       module avail now lists oneAPI 2025 modules

$ module avail 
----------------------------- /softs/x86/oneapi/2025.3/modulefiles -----------------------------
2025.3/advisor   2025.3/ishmem  2025.3/ccl  2025.3/dev-utilities           
2025.3/dnnl      2025.3/mkl     2025.3/compiler-intel-llvm                 
2025.3/mpi       2025.3/dpct    2025.3/compiler-rt  2025.3/dpl                
2025.3/tbbt      2025.3/dpl     2025.3/compiler     2025.3/umf     
2025.3/dal       2025.3/vtune   2025.3/debugger            
2025.3/intel_ippcp_intel64      2025.3/intel_ipp_intel64 
 

Toolchains

Pour simplifier la configuration de l’environnement, Kairos propose des toolchains sur architecture x86. Il s’agit de méta-modules qui chargent un ensemble cohérent de compilateurs et de bibliothèques, validés pour fonctionner correctement ensemble. 

1- GCC Toolchain
 Inclut les compilateurs GCC,  OpenMPI, and OpenBLAS

$ module purge 
$ module load toolchain/gcc14.1
Loading toolchain/gcc14.1
 Loading requirement: binutils/2.46 gcc/14.1 openmpi/gcc/4.1.6-gcc14.1
   openblas/0.3.31-gcc14.1
$ module list 
Currently Loaded Modulefiles:
1) binutils/2.46   3) openmpi/gcc/4.1.6-gcc14.1   5) toolchain/gcc14.1  
2) gcc/14.1        4) openblas/0.3.31-gcc14.1    
 

2- oneAPI Toolchain 
Inclut les compilateurs Intel oneAPI (icx, ifx, icpc), Intel MPI (mpicc, mpirun), Intel MKL (Math Kernel Library) ainsi que des outils de performance (VTune, Advisor).


$ module purge 
$ module load toolchain/oneapi2025.3
You can load modules for a product belonging to oneAPI 2025.
        module avail now lists oneAPI 2025 modules
Loading toolchain/oneapi2025.3
 Loading requirement: oneapi/2025.3 2025.3/tbb/latest 2025.3/compiler-rt/latest
   2025.3/umf/latest 2025.3/compiler/latest 2025.3/mpi/latest 2025.3/mkl/latest
   2025.3/vtune/latest 2025.3/advisor/latest
$ module list 
Currently Loaded Modulefiles:
1) oneapi/2025.3               6) 2025.3/mpi/latest       
2) 2025.3/tbb/latest           7) 2025.3/mkl/latest       
3) 2025.3/compiler-rt/latest   8) 2025.3/vtune/latest     
4) 2025.3/umf/latest           9) 2025.3/advisor/latest   
5) 2025.3/compiler/latest     10) toolchain/oneapi2025.3  
 

GPU- ARM

Travailler avec l’architecture Grace Hopper nécessite de respecter certaines règles de visibilité :

  1. Les modules ARM-GPU ne peuvent être chargés que sur les nœuds GPU (cela ne peut pas être fait depuis le nœud de login).
  2. Pour compiler ou exécuter votre code, vous avez deux options : Se connecter directement à un nœud GPU ou Utiliser un script SLURM lancé depuis le nœud de login en spécifiant une partition GPU.

⚠️ Ne compilez pas votre code GPU sur le nœud de login, car il est en architecture x86.

$ module avail 
 -------/softs/arm/modulefiles/compilers_and_libraries  -------
openmpi/gcc_cpu/      openmpi/gcc_gpu/     binutils/2.46  gcc/14.1
openmpi/nvidia_cpu/   openmpi/nvidia_gpu/  nvidia 
 ------- /softs/arm/modulefiles/scientific_applications  -------
amber  fftw  miniforge/26.1.0      vasp/       croco/    gromacs/
 ------- /softs/arm/modulefiles/tools  -------
cmake/3.25.1 linaro-forge/25.1.2  proxychains  

 

Les bibliothèques


NVHPC

Le module NVHPC peut être utilisé pour la plupart des applications s’exécutant sur GPU.
Il existe plusieurs versions de NVHPC accessibles via 

module load nvidia

 Les modules mises à jour en continu avec de nouvelles versions.

NVHPC inclut à la fois OpenMPI et HPC-X. Il existe de nombreux sous-modules pour chaque version.

Voici une description des différences entre ces modules, indépendamment de la version :

  • nvhpc (Base) :
    Compilateurs NVIDIA (nvc, nvc++, nvfortran), CUDA Toolkit,
    bibliothèques mathématiques GPU (cuBLAS, cuFFT, etc.) et OpenMPI.

  • nvhpc-nompi :
    Identique à la version de base NVHPC mais sans implémentation MPI.
    À utiliser si vous fournissez votre propre module MPI.

  • nvhpc-hpcx :
    NVHPC avec HPC-X MPI de NVIDIA (support UCX, HCOLL, NCCL),
    avec intégration CUDA par défaut.

  • nvhpc-hpcx-cudaXX :
    Identique à nvhpc-hpcx mais compilé avec une version spécifique de CUDA.

  • nvhpc-byo-compiler (Bring Your Own Compiler) :
    Fournit les bibliothèques NVIDIA (NCCL, NVSHMEM, bibliothèques mathématiques)
    sans les compilateurs NVIDIA ni MPI. Conçu pour une utilisation avec GCC/Clang.

  • nvhpc-hpcx-2.20-cudaXX :
    Version figée de HPC-X 2.20 + CUDA pour des environnements reproductibles
    et des workflows scientifiques stables.


Pour les applications nécessitant BLAS et LAPACK, vous pouvez désormais utiliser les bibliothèques NVIDIA Performance Libraries (NVPL) à la place d’OpenBLAS.

Ces bibliothèques sont configurées automatiquement via le module. Vous pouvez afficher les informations correspondantes avec la commande module show, ce qui vous permettra notamment de voir le répertoire dans lequel se trouvent toutes les bibliothèques.

OpenMPI

En plus de NVHPC, il existe plusieurs versions d’OpenMPI disponibles.

On peut distinguer quatre types d’OpenMPI :

openmpi/gcc_cpu :
OpenMPI compilé avec GCC, fonctionnant uniquement sur CPU (notamment sur les CPU Grace Hopper),
avec un support pouvant aller jusqu’à 288 processus par nœud. Il est optimisé uniquement pour le CPU.

openmpi/gcc_gpu :
OpenMPI compilé avec GCC, prenant en charge à la fois le CPU et l’exécution sur GPU (CUDA-aware).

openmpi/nvidia_cpu :
OpenMPI compilé avec les compilateurs NVHPC, fonctionnant uniquement sur CPU.

openmpi/nvidia_gpu :
OpenMPI compilé avec les compilateurs NVHPC, prenant en charge à la fois le CPU et les GPU.

Compilation Codes


Compilation x86

La compilation sur x86 peut être effectuée sur les nœuds de connexion ainsi que sur tous les nœuds kairoscomp (Cela peut se faire en mode interactif ou en mode Slurm voir ici ) 
Deux familles de compilateurs : GCC (GNU) et Intel oneAPI. Pour chacune, plusieurs implémentations MPI sont disponibles (OpenMPI, OpenMPI Bull, IntelMPI).
Il existe plusieurs façons d'effectuer la compilation, selon le compilateur utilisé.


GNU

Plusieurs versions de GCC sont installées, ainsi qu'OpenMPI compilé avec ces différentes versions, et OpenMPI Bull. 
En plus un module toolchain, qui charge GCC et l'OpenMPI correspondant :

#!/bin/bash
#SBATCH --job-name=compile
#SBATCH --partition=shared-cpu 
#SBATCH --nodes=1
#SBATCH --ntasks=64
#SBATCH --cpus-per-task=1
#SBATCH --time=00:30:00

module purge
module load toolchain/gcc14.1  # charge gcc/14 + l'OpenMPI associé

# Des flags optionnel 
# -march=graniterapids est possible et préféré mais nécessite GCC 14+ 
# -g pour Debugger 
# -fopt-info-vec Rapport vectoriel

# compilation (sans openmp, sans MPI) ( pour C, C++, fortran)   
gcc      -O3 -march=native prog.c   -o prog 
g++      -O3 -march=native prog.cpp -o prog
gfortran -O3 -march=native prog.f90 -o prog

# compilation (Avec openmp, sans MPI) ( pour C, C++, fortran)   
gcc      -O3 -march=native -fopenmp prog.c -o prog
g++      -O3 -march=native -fopenmp prog.cpp -o prog
gfortran -O3 -march=native -fopenmp prog.f90 -o prog

# compilation (sans openmp, Avec MPI) ( pour C, C++, fortran) 
mpicc   -O3 -march=native prog.c   -o prog
mpicxx  -O3 -march=native prog.cpp -o prog
mpifort -O3 -march=native prog.f90 -o prog


# compilation hybride (Avec openmp, Avec MPI) ( pour C, C++, fortran) 
mpicc   -O3 -march=native -fopenmp prog.c -o prog
mpicxx  -O3 -march=native -fopenmp prog.cpp -o prog
mpifort -O3 -march=native -fopenmp prog.f90 -o prog



#si vous avez #SBATCH --cpus-per-task=64 
#export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
export OMP_NUM_THREADS=num_threads 
export OMP_PLACES=cores
export OMP_PROC_BIND=close

srun ./prog

OneAPi(intel)

Version complète Intel (avec IntelMPI)

Versions 2024 et 2025 disponibles. Le module toolchain charge oneAPI et tous les modules nécessaires, y compris IntelMPI 

Si vous utilisez intel 2018, il faut considérer changes les suivant: 
CC= icc -> icx 
CPP = icpc -> icpx 
FC = ifort -> ifx  

#!/bin/bash
#SBATCH --job-name=compile
#SBATCH --partition=shared-cpu 
#SBATCH --nodes=1
#SBATCH --ntasks=64
#SBATCH --cpus-per-task=1
#SBATCH --time=00:30:00

module purge
module load toolchain/oneapi2025.3 

# Des flags optionnel 
# -xGRANITERAPIDS est possible et préféré mais nécessite GCC 14+ 
# -g pour Debugger 

# compilation (sans openmp, sans MPI) ( pour C, C++, fortran)   
icx  -O3 -xHost prog.c   -o prog
icpx -O3 -xHost prog.cpp -o prog
ifx  -O3 -xHost prog.f90 -o prog

# compilation (Avec openmp, sans MPI) ( pour C, C++, fortran)   
icx  -O3 -xHost -qopenmp prog.c    -o prog
icpx -O3 -xHost -qopenmp prog.cpp  -o prog
ifx  -O3 -xHost -qopenmp prog.f90  -o prog


# compilation (sans openmp, Avec MPI) ( pour C, C++, fortran) 
mpiicx  -O3 -xHost  prog.c    -o prog
mpiicpx -O3 -xHost  prog.cpp  -o prog
mpiifx  -O3 -xHost  prog.f90  -o prog


# compilation hybride (Avec openmp, Avec MPI) ( pour C, C++, fortran) 
mpiicx  -O3 -xHost -qopenmp  prog.c    -o prog
mpiicpx -O3 -xHost -qopenmp  prog.cpp  -o prog
mpiifx  -O3 -xHost -qopenmp  prog.f90  -o prog


srun ./prog

 

OpenMPI avec compilateur Intel (sans IntelMPI)

OpenMPI (et aussi OpenMPI Bull) est aussi disponible compilé avec le compilateur Intel.
Dans ce cas, les wrappers standards mpicc/mpicxx/mpifort encapsulent icx/icpx/ifx 
Les commandes précédentes restent valables, la seule différence étant que nous utilisons le MPI d'OpenMP au lieu du MPI d'Intel.


# compilation (sans openmp, Avec MPI) ( pour C, C++, fortran) 
mpicc   -O3 -xHost  prog.c    -o prog
mpicxx  -O3 -xHost  prog.cpp  -o prog
mpifort -O3 -xHost  prog.f90  -o prog

# compilation hybride (Avec openmp, Avec MPI) ( pour C, C++, fortran) 
mpicc   -O3 -xHost -qopenmp  prog.c    -o prog
mpicxx  -O3 -xHost -qopenmp  prog.cpp  -o prog
mpifort -O3 -xHost -qopenmp  prog.f90  -o prog
 

 

Compilation ARM (GPU)

Les nœuds GH200 sont en aarch64 (CPU Grace, cœurs Neoverse V2). Le compilateur recommandé est NVIDIA HPC SDK (NVHPC) parce que il est le plus général: il fournit nvc/nvc++/nvfortran, CUDA, OpenACC, l'offload OpenMP, et un OpenMPI intégré (GPU-aware).
Pour le lancement regarder: ici 


Compilation NVHPC

Si votre code utilise OpenACC, il est conseillé d'utiliser l'un des modules suivants :

1- nvhpc : le plus général (avec MPI intégré)
2- openmpi/nvidia_gpu : il possède toutes les fonctionnalités de nvhpc, à l'exception de MPI, qui est une version compilée d'OpenMPI
3- openmpibull/nvhpc : il fonctionne de la même manière que openmpi/nvidia_gpu

Flags (NVHPC)

Optimisation               -O3 -tp=neoverse-v2
OpenMP (CPU)               -mp
OpenMP offload (GPU)       -mp=gpu -gpu=cc90
OpenACC                    -acc -gpu=cc90
Mémoire unifiée            -gpu=cc90,mem:unified
Mémoire managée            -gpu=cc90,mem:managed
CUDA Fortran               -cuda -gpu=cc90
Rapports GPU               -Minfo=accel (ACC) / -Minfo=mp (OMP)

Note: srun fonctionne avec seulement nvhpc-hpcx si vous utilisez nvhpc/version il faut appeler mpirun  

#!/bin/bash
#SBATCH --partition=shared-gpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=72
#SBATCH --time=00:30:00

module purge
# load nvhpc-hpcx/vesion
module load  nvhpc-hpcx/26.1 
#-tp=neoverse-v2    Cible le CPU Grace (recommandé)

# CPU uniquement 
# Compilation série CPU 
nvc       -O3 -tp=neoverse-v2 prog.c   -o prog
nvc++     -O3 -tp=neoverse-v2 prog.cpp -o prog
nvfortran -O3 -tp=neoverse-v2 prog.f90 -o prog

# Compilation OpenMP (CPU)
nvc       -O3 -tp=neoverse-v2 -mp prog.c   -o prog
nvc++     -O3 -tp=neoverse-v2 -mp prog.cpp -o prog
nvfortran -O3 -tp=neoverse-v2 -mp prog.f90 -o prog


# Compilation MPI (OpenMPI intégré au HPC SDK) CPU 
mpicc   -O3 -tp=neoverse-v2 prog.c   -o prog
mpicxx  -O3 -tp=neoverse-v2 prog.cpp -o prog
mpifort -O3 -tp=neoverse-v2 prog.f90 -o prog

# GPU 
OpenMP offload (GPU)
nvc -O3 -tp=neoverse-v2 -mp=gpu -gpu=cc90 -Minfo=mp prog.c -o prog

OpenACC
nvc -O3 -tp=neoverse-v2 -acc -gpu=cc90 -Minfo=accel prog.c -o prog
#mémoire unifiée Grace-Hopper
nvc -O3 -tp=neoverse-v2 -acc -gpu=cc90,mem:unified -Minfo=accel prog.c -o prog


export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
export OMP_PLACES=cores
export OMP_PROC_BIND=close


srun gbind ./prog

Compilation CUDA

La méthode de compilation suivante s'applique uniquement aux projets utilisant un noyau CUDA.

Vous pouvez utiliser les modules suivants compilé avec gcc:
1- openmpi/gcc gpu
2- openmpi bull/gcc-14.1

Flags (CUDA)
Optimisation                              -O3
Architecture GPU (GH200)      -arch=sm_90
Compilateur hôte (MPI)           -ccbin=mpicxx
Compilateur hôte (sans MPI)   -ccbin=g++
Debug device                            -G -lineinfo
Rapports registre/occup.          -Xptxas -v

#!/bin/bash
#SBATCH --partition=shared-gpu
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=72
#SBATCH --time=00:30:00

module purge
module load openmpi/gcc_gpu  #ou openmpibull/gcc-14.1

#-arch=sm_90    Cible le GPU Hopper (GH200, recommandé)
# CUDA pur (sans MPI)
nvcc -O3 -arch=sm_90 -ccbin=g++ gpu_app.cu -o prog
nvfortran -O3 -tp=neoverse-v2 -cuda -gpu=cc90 gpu_app.cuf -o prog

# CUDA + MPI (hôte compilé avec le wrapper MPI)
nvcc -O3 -arch=sm_90 -ccbin=mpicxx gpu_app.cu -o prog
mpifort -O3 -tp=neoverse-v2 -cuda -gpu=cc90 gpu_app.cuf -o prog

srun gbind ./prog

Python Environnement

Le fonctionnement est similaire sur les architectures x86 et ARM, mais les environnements Conda ne sont pas interchangeables entre ces deux architectures.

  • Depuis les nœuds frontaux (login), vous utilisez un environnement Conda x86
  • Pour travailler avec des environnements ARM (Grace-Hopper), il est nécessaire de se connecter au préalable à un nœud de calcul Grace-Hopper et d'utiliser proxychains pour toute commande qui a besoin d'acceder sur internet

Architecture x86

Sur les noeuds de login directement: 

module load miniforge/26.1.0

Commandes utiles Conda miniforge x86

Architecture ARM

D'abord il faut reserver un noeud avec gpus avec la commande suivante :

runGHSession.sh

Commandes utiles Conda miniforge ARM

Conteneurs

Kairos permet d’utiliser des conteneurs Apptainer sur les architectures x86 et arm64.

⚠️ Important : vos conteneurs personnels doivent obligatoirement être stockés dans /work/conteneurs/<projet>/<utilisateur>/. Contactez le support si ce répertoire n’existe pas.

La page Utiliser des conteneurs Apptainer sur Kairos décrit la création, l’exécution et le téléchargement de conteneurs, ainsi que les bonnes pratiques d’utilisation

Voir aussi

Se connecter

Lancer et suivre un calcul

Les espaces de stockage et jeux de données

Utiliser des conteneurs Apptainer sur KAIROS

Utilisation des conteneurs apptainer sur Kairos