Jean Zay : Nsight Systems

Description

Nsight Systems est un outil d'analyse de performances de NVIDIA.

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).

Remarques :

  • 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 travail.
  • 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# 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.

Attention : 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 -s $JOBSCRATCH /tmp/nvidia

Voici un exemple de script de soumission pour un code MPI + OpenACC initiant 4 processus :

job_vtune_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)
# /!\ 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 -s $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.

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.