Jean Zay : Utiliser DLProf avec PyTorch
DLProf est un outil de profilage fourni par NVIDIA et dédié au Deep Learning. Il se base sur l'outil Nsight Systems, également développé par NVIDIA. DLProf, par le biais de Nsight Systems, recueille et enregistre les instructions exécutées par les différents GPU.
L'application dlprofviewer sert d'interface entre les fichiers de logs générés par DLProf et le tableau de bord à partir duquel on pourra visualiser les différents rapports de l'outil.
DisponibilitĂ© sur Jean Zayâ
Sur Jean Zay, l'outil DLProf est disponible dans les modules PyTorch Ă partir de la version pytorch-gpu/py3/1.8.1.
Vous pouvez charger un de nos modules en lançant par exemple :
module load pytorch-gpu/py3/1.9.0
La derniÚre release de DLProf se base sur PyTorch 1.11. Il n'est pas garanti que DLProf fonctionne encore sur les versions plus récentes de PyTorch.
ImplĂ©mentation de DLProfâ
Pour faire fonctionner DLProf dans votre code vous devez ajouter quelques lignes de code.
Dans le script Pythonâ
Tout d'abord il faut charger le plugin et l'initialiser :
import nvidia_dlprof_pytorch_nvtx as dlprof
dlprof.init()
Ensuite il faut lancer la boucle d'entraßnement dans le contexte emit_nvtx de PyTorch. Ce contexte se chargera de récolter des valeurs pour le rapport Nsight Systems.
with torch.autograd.profiler.emit_nvtx():
for epoch in range(2):
for i, (texts, labels) in enumerate(train_loader):
...
Dans le script Slurmâ
De la mĂȘme maniĂšre qu'avec Nsight, il faut Ă©viter de surcharger le dossier systĂšme
/tmp qui est utilisĂ© par dĂ©faut (espace trĂšs petit sur les nĆuds de calcul). Pour cela, il faut s'assurer que les fichiers temporaires soient placĂ©s dans l'espace appelĂ© $JOBSCRATCH.
En sĂ©quentielâ
Si votre code s'exécute sur un seul processus, vous pourrez utiliser les instructions suivantes dans votre script de lancement pour utiliser DLProf :
export TMPDIR=$JOBSCRATCH
ln -s $JOBSCRATCH /tmp/nvidia
srun dlprof --mode pytorch python script.py
En parallĂšleâ
Avec les instructions ci-dessus, lorsque plusieurs processus sont utilisĂ©s (en multi-GPU avec un processus par GPU), tous les processus DLProf chercheront Ă Ă©crire dans un seul et mĂȘme fichier qui sera alors corrompu. Pour pallier ce problĂšme, il faut spĂ©cifier un fichier de sortie diffĂ©rent pour chaque processus.
De plus, si vous travaillez en multi-noeuds, il faut crĂ©er un dossier temporaire TMPDIR diffĂ©rent pour chaque nĆud.
Un exemple de commande fonctionnelle :
srun bash -c 'export TMPDIR=${JOBSCRATCH}/${SLURM_PROCID};\
mkdir -p ${TMPDIR}/tmp;\
ln -s ${TMPDIR}/tmp /tmp/nvidia;\
dlprof -m pytorch\
--output_path ./${SLURM_PROCID}\
--nsys_base_name nsys_${SLURM_PROCID}\
--profile_name dlprof_rank${SLURM_PROCID}\
python script.py'
Vous obtiendrez un fichier de log par processus.
Visualisation avec DLProf Viewerâ
Les fichiers de logs de DLProf (dlprof_dldb.sqlite) doivent ĂȘtre tĂ©lĂ©chargĂ©s sur votre machine personnelle afin d'ĂȘtre visualisĂ©s via une installation locale de DLProf Viewer. Toutes les informations nĂ©cessaires pour l'utilisation et l'installation sont disponibles dans la documentation officielle de NVIDIA : DLProf Viewer User Guide.
Il faudra choisir une version de DLProf Viewer compatible avec la version de PyTorch utilisée à l'exécution.
Le tableau de bord de visualisation s'affiche simplement en ouvrant le bon fichier de log avec la commande :
dlprofviewer dlprof_dldb.sqlite
Tableau de bord DLProf

Visualisation de la Timeline avec l'outil Nsight Systemsâ
Pour visualiser les traces chronologiques, il faut ouvrir les rapports Nsight Systems générés par dlprof.
Pour cela il faut :
- se connecter à Jean Zay avec l'option graphique (forwarding X11) activée
:
ssh -X <login_jean-zay>@jean-zay.idris.fr - charger un module comportant la bonne version de Nsight Systems,
par exemple :
module load nvidia-nsight-systems/2021.2.1 - ouvrir le fichier de trace avec l'outil graphique de Nsight Systems, par
exemple :
nsys-ui nsys_0.qdrep
Visualisation Nsight Systems

Bonne utilisation du profilerâ
Dans le cas oĂč le profiler ralentirait drastiquement l'entraĂźnement, crĂ©erait des out of memory ou d'autres erreurs en raison de la surcharge d'opĂ©rations qu'il engendre, il est conseillĂ© de rĂ©duire le nombre d'itĂ©rations (par exemple Ă 50, voire 10), avec les commandes --iter_start et --iter_stop (voir la documentation DLProf User Guide), et/ou de rĂ©duire la taille du dataset.
Le profiler n'est pas destinĂ© Ă ĂȘtre utilisĂ© pendant un entraĂźnement complet.
Documentation officielleâ
- Documentation DLProf User Guide
- Documentation DLProf Viewer User Guide