Aller au contenu principal

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 :

  1. Exécution de votre programme dans Nsight Systems (en ligne de commande) ;
  2. 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).

important
  • Pour que la commande nsys profile soit 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 taper nsys 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.

Attention
  • 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 -o n'existe pas ou utiliser (avec prĂ©caution) l'option -f pour forcer l'Ă©crasement des fichiers existants.

  • Par dĂ©faut, Nsight Systems utilise le rĂ©pertoire systĂšme /tmp qui 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 :

job_nsys_mpi.slurm
#!/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).

Attention

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.