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é :
- 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).
- 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-v2OpenMP (CPU) -mpOpenMP offload (GPU) -mp=gpu -gpu=cc90OpenACC -acc -gpu=cc90Mémoire unifiée -gpu=cc90,mem:unifiedMémoire managée -gpu=cc90,mem:managedCUDA Fortran -cuda -gpu=cc90Rapports 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
Architecture ARM
D'abord il faut reserver un noeud avec gpus avec la commande suivante :
runGHSession.sh
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