Déboguer les Applications NeMo RL

Afficher en Markdown

Ce guide explique comment déboguer des applications NeMo RL, couvrant deux scénarios. Il décrit d’abord la procédure pour déboguer des processus de workers/acteurs Ray distribués à l’aide du Débogueur Distribué Ray dans un environnement SLURM, puis détaille le débogage du script pilote principal.

Déboguer Workers/Acteurs sur SLURM

Comme les programmes Ray peuvent générer plusieurs workers et acteurs, l’utilisation du Débogueur Distribué Ray est essentielle pour atteindre avec précision les points d’arrêt sur chaque worker.

Prérequis

  • Installer l’extension de Débogueur Ray pour VS Code/Cursor.
  • Lancer le cluster interactif avec ray.sub.
  • Lancer VS Code/Cursor sur le nœud de connexion SLURM (où squeue/sbatch est disponible).
  • Ajouter breakpoint() dans votre code sous les acteurs et tâches (c’est-à-dire les classes ou fonctions décorées avec @ray.remote).
  • S’assurer que RAY_DEBUG=legacy n’est pas défini, car ce débogage nécessite le débogueur distribué par défaut.

Transférer un Port depuis le Nœud Principal

Depuis le nœud de connexion SLURM, interroger les nœuds utilisés par le travail interactif ray.sub comme suit :

teryk@slurm-login:~$ squeue --me
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
2504248 batch ray-cluster terryk R 15:01 4 node-12,node-[22,30],node-49

Le premier nœud est toujours le nœud principal, nous devons donc transférer le port du tableau de bord vers le nœud de connexion :

# Le trafic du $LOCAL du nœud de connexion est transféré vers node-12:$DASHBOARD_PORT
# - Si vous n'avez pas modifié le DASHBOARD_PORT par défaut dans ray.sub, il est probablement 8265
# - Choisir un LOCAL_PORT qui n'est pas utilisé. Si le cluster est multi-tenant, 8265
# sur le nœud de connexion est probablement déjà utilisé par quelqu'un d'autre.
ssh -L $LOCAL_PORT:localhost:$DASHBOARD_PORT -N node-12
# Exemple de choix d'un port autre que 8265 pour le LOCAL_PORT
ssh -L 52640:localhost:8265 -N node-12

La sortie d’exemple du transfert de port avec ssh peut imprimer des journaux comme ceci, où l’avertissement est attendu.

Warning: Permanently added 'node-12' (ED25519) to the list of known hosts.
bind [::1]:52640: Cannot assign requested address

Ouvrir l’Extension du Débogueur Ray

Dans VS Code ou Cursor, ouvrez l’extension du Débogueur Ray en cliquant sur l’icône Ray dans la barre d’activité ou en recherchant “View: Show Ray Debugger” dans la Palette de Commandes (Ctrl+Shift+P ou Cmd+Shift+P).

Étape 1 de l'Extension du Débogueur Ray

Ajouter le Cluster Ray

Cliquez sur le bouton “Add Cluster” dans le panneau du Débogueur Ray.

Étape 2 de l'Extension du Débogueur Ray

Entrez l’adresse et le port que vous avez configurés lors de l’étape de transfert de port. Si vous avez suivi l’exemple ci-dessus en utilisant le port 52640, vous entrerez :

Étape 3 de l'Extension du Débogueur Ray

Ajouter un Point d’Arrêt et Exécuter Votre Programme

Le Panneau du Débogueur Ray pour le cluster 127.0.0.1:52640 liste tous les points d’arrêt actifs. Pour commencer le débogage, sélectionnez un point d’arrêt dans la liste déroulante et cliquez sur Start Debugging pour atteindre ce worker.

Notez que vous pouvez passer entre les points d’arrêt sur tous les workers avec ce processus.

Étape 4 de l'Extension du Débogueur Ray

Déboguer le Script Pilote

Par défaut, définir des points d’arrêt dans le script pilote (en dehors de @ray.remote) ne mettra pas en pause l’exécution du programme lors de l’utilisation de Ray. Pour permettre la pause à ces points d’arrêt, définissez la variable d’environnement à RAY_DEBUG=legacy :

RAY_DEBUG=legacy uv run ....