Nsight Systems
Nous vous invitons à consulter les bonnes pratiques pour le profilage de code pour des conseils généraux sur l'analyse de performance sur Jean Zay.
Descriptionâ
Nsight Systems est un outil d'analyse de performances de NVIDIA.
Il fournit une vue chronologique globale de l'exécution (timeline) pour corréler l'activité CPU et GPU : phases de calcul, communications, transferts mémoire, synchronisations et périodes d'inactivité.
Il est particuliÚrement utile pour identifier les déséquilibres entre processus, les latences de lancement de kernels, ou les transferts hÎte-périphérique trop coûteux dans les applications MPI/CUDA/OpenACC.
Nsight Systems est complémentaire de Nsight Compute : Nsight Systems sert à localiser les zones problématiques dans l'application, puis Nsight Compute permet d'analyser en détail les kernels ciblés.
Il dispose d'une interface graphique (GUI) mais peut Ă©galement ĂȘtre utilisĂ© en ligne de commande.
Versions installĂ©esâ
La commande module permet d'accéder aux diverses versions de Nsight Systems.
Pour afficher les diverses versions disponibles :
$ module avail nvidia-nsight-systems
nvidia-nsight-systems/2021.1.1 nvidia-nsight-systems/2021.4.1 nvidia-nsight-systems/2022.5.1
nvidia-nsight-systems/2021.2.1 nvidia-nsight-systems/2022.1.1
Utilisationâ
Pour utiliser, par exemple, la version 2022.1.1 de Nsight Systems, vous devez charger le module correspondant :
$ module load nvidia-nsight-systems/2022.1.1
Une fois le module adéquat chargé, l'utilisation de Nsight Systems se fait en deux étapes :
- Exécution de votre programme dans Nsight Systems (en ligne de commande) ;
- Visualisation/Analyse des résultats avec l'interface graphique.
ExĂ©cutionâ
Le plus simple est de lancer l'exécution en ligne de commande dans vos scripts Slurm : il suffit d'ajouter la commande nsys profile juste avant le nom de votre exécutable (avec éventuellement des options permettant de sélectionner le type d'échantillonnage à réaliser).
- Pour que la commande
nsys profilesoit reconnue, il faut avoir chargé le module adéquat auparavant (voir ci-dessus) soit dans l'environnement de votre session interactive, soit dans l'environnement de votre job. - Pour avoir de l'aide concernant les options de la commande
nsys profile, il vous suffit de tapernsys profile --help.
Lors de l'exĂ©cution, Nsight Systems Ă©crit ses fichiers dans le rĂ©pertoire courant. Par dĂ©faut, ces fichiers sont nommĂ©s report#.qdrep oĂč # est un numĂ©ro incrĂ©mentĂ© de sorte Ă ne pas Ă©craser d'Ă©ventuels fichiers existants. Le nom du fichier peut ĂȘtre spĂ©cifiĂ© via l'option -o <report_file> et peut contenir des marqueurs %q{VARIABLE_ENVIRONNEMENT} qui seront remplacĂ©s par la valeur de la variable d'environnement spĂ©cifiĂ©e.
-
Si le fichier existe déjà , l'exécution échouera pour éviter d'écraser des résultats précédents. Il faut donc vous assurer, avant de lancer l'exécution, que le fichier spécifié par l'option
-on'existe pas ou utiliser (avec précaution) l'option-fpour forcer l'écrasement des fichiers existants. -
Par défaut, Nsight Systems utilise le répertoire systÚme
/tmpqui est trÚs limité en taille pour stocker des données temporaires. Pour que Nsight Systems dispose d'un espace de travail plus important, il est indispensable de définir la variable TMPDIR. Par exemple, pour utiliser le répertoire JOBSCRATCH (spécifique à chaque travail et détruit à la fin de celui-ci) :
export TMPDIR=$JOBSCRATCH
# Pour contourner un bogue dans les versions actuelles de Nsight Systems
# il est également nécessaire de créer un lien symbolique permettant de
# faire pointer le répertoire /tmp/nvidia vers TMPDIR
ln -sfn $JOBSCRATCH /tmp/nvidia
Voici un exemple de script de soumission pour un code MPI + OpenACC initiant 4 processus :
#!/bin/bash
#SBATCH --job-name=nsight_systems # Nom arbitraire du travail Slurm
#SBATCH --output=%x.%j.out # Fichier de sortie standard du travail
#SBATCH --error=%x.%j.err # Fichier d'erreur standard du travail
#SBATCH --ntasks=4 # Nombre de processus MPI demandes
#SBATCH --ntasks-per-node=4 # nombre de tache MPI par noeud (= nombre de GPU par noeud)
#SBATCH --gres=gpu:4 # nombre de GPU par noeud
#SBATCH --cpus-per-task=10 # nombre de coeurs CPU par tache (un quart du noeud ici)
# La ligne ci-dessous peut ĂȘtre dĂ©commentĂ©e pour passer en mode exclusif et disposer
# d'un accÚs complet aux compteurs matériels (cf. les bonnes pratiques pour le profilage)
##SBATCH --exclusive -C prof
# /!\ Attention, la ligne suivante est trompeuse mais dans le vocabulaire
# de Slurm "multithread" fait bien référence à l'hyperthreading.
#SBATCH --hint=nomultithread # 1 processus MPI par coeur physique (pas d'hyperthreading)
#SBATCH --time=00:20:00 # Temps du job hh:mm:ss (20mn ici)
# Chargement des modules de votre choix
module load ...
# Chargement de Nsight Systems
module load nvidia-nsight-systems/2021.2.1
# Echo des commandes
set -x
# Pour ne pas utiliser le /tmp
export TMPDIR=$JOBSCRATCH
# Pour contourner un bogue dans les versions actuelles de Nsight Systems
# il est également nécessaire de créer un lien symbolique permettant de
# faire pointer le répertoire /tmp/nvidia vers TMPDIR
ln -sfn $JOBSCRATCH /tmp/nvidia
# Profiling en mode OpenACC avec génération d'un fichier de résultats
# par processus ("report_rank0.qdrep", "report_rank1.qdrep", etc)
srun nsys profile -t openacc -o "report_rank%q{SLURM_PROCID}" ./my_bin_exe
Visualisation/analyse des rĂ©sultatsâ
La visualisation des résultats se fait avec la commande nsys-ui <report_file> en remplaçant <report_file> par le nom d'un rapport d'analyse généré précédemment.
L'utilisation de nsys-ui sur Jean Zay nécessite une connexion SSH avec forwarding X11 (par exemple ssh -X).
L'interface graphique peut ĂȘtre lente lorsqu'elle est utilisĂ©e depuis une frontale de Jean Zay en activant le forwarding X11 avec ssh -X. Il est possible d'utiliser un nĆud de visualisation de Jean Zay ou d'installer Nsight Systems sur votre machine et de transfĂ©rer les rapports sur celle-ci pour les analyser.
Documentationâ
La documentation complĂšte est disponible sur le site de NVIDIA.