Nsight Compute
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 Compute est un outil NVIDIA dédié au profilage fin des noyaux CUDA.
Contrairement à Nsight Systems (vision chronologique globale), Nsight Compute se concentre sur le niveau noyau et permet d'identifier précisément les goulots d'étranglement GPU.
Il fournit notamment des métriques détaillées sur :
- l'occupation des SM et l'efficacité des warps ;
- l'utilisation mémoire (global memory, cache L2, shared memory) ;
- les stalls et les limitations de débit (compute-bound vs memory-bound).
Il peut s'utiliser en ligne de commande (ncu) pour collecter les mesures, puis en interface graphique (ncu-ui) pour explorer les rapports, comparer des exécutions et guider les optimisations de kernels.
Versions installées
La commande module permet d'accéder aux diverses versions de Nsight Compute.
Pour afficher les diverses versions disponibles :
$ module avail nvidia-nsight-compute
nvidia-nsight-compute/2020.3.1 nvidia-nsight-compute/2022.1.0 nvidia-nsight-compute/2023.3.1.0
nvidia-nsight-compute/2021.3.0 nvidia-nsight-compute/2022.4.0 nvidia-nsight-compute/2024.3.2.0
Utilisation
Pour utiliser, par exemple, la version 2024.3.2.0 de Nsight Compute, vous devez charger le module correspondant :
$ module load nvidia-nsight-compute/2024.3.2.0
Une fois le module chargé, l'utilisation se fait en deux étapes :
- Exécution de votre application avec
ncu(collecte des données) ; - Visualisation/analyse des rapports avec
ncu-ui.
Exécution en ligne de commande (CLI)
La collecte se fait avec ncu dans vos scripts Slurm.
- Pour que la commande
ncusoit reconnue, il faut avoir chargé le module adéquat auparavant. - Le profilage Nsight Compute peut fortement ralentir l'exécution. Il est recommandé de profiler des cas réduits et ciblés.
- Pour voir toutes les options, utilisez
ncu --help.
Voici un exemple de script de soumission pour un code MPI multi-GPU (4 processus, 4 GPU), avec un fichier de rapport par rang MPI :
#!/bin/bash
#SBATCH --job-name=nsight_compute
#SBATCH --output=%x.%j.out
#SBATCH --error=%x.%j.err
#SBATCH --ntasks=4
#SBATCH --ntasks-per-node=4
#SBATCH --gres=gpu:4
#SBATCH --cpus-per-task=10
##SBATCH --exclusive -C prof
#SBATCH --hint=nomultithread
#SBATCH --time=00:20:00
module load ...
module load nvidia-nsight-compute/2024.3.2.0
set -x
# Exemple: un rapport .ncu-rep par processus MPI
srun bash -c 'ncu -f -o ncu_report_rank${SLURM_PROCID} ./my_bin_exe'
Évitez de profiler toutes les itérations d'un gros cas de production. Ciblez plutôt une portion représentative (jeu de données réduit, phase critique, noyaux ciblés).
Visualisation/analyse des résultats (GUI)
Les rapports générés par ncu sont des fichiers .ncu-rep.
L'utilisation de ncu-ui sur Jean Zay nécessite une connexion SSH avec forwarding X11 (par exemple ssh -X).
Vous pouvez les ouvrir avec :
ncu-ui ncu_report_rank0.ncu-rep
L'interface graphique peut être lente avec un forwarding X11 depuis une frontale. Vous pouvez utiliser un nœud de visualisation ou transférer les rapports sur votre machine locale.
Documentation
La documentation complète est disponible sur le site de NVIDIA.