Utilisation de script Python avec GPU#

Lorsque la durée de la phase d’apprentissage devient importante (> à 10-15 minutes), il ne faut plus la faire à l’intérieur d’un notebook. Il faut l’exécuter hors du notebook à l’aide d’un script Python et d’un système de batch (qui permet d’exécuter en tache de fond des programmes longs). On pourra consulter [Maurice, 2000] pour une introduction à Unix et aux commandes Unix.

Terminal: ligne de commande

Toutes les commandes suivantes doivent etre exécutées en ligne de commande dans un terminal Unix, que l’on ouvre dans l’interface JupyterLab. On se déplace dans le répertoire où se trouve le modèle d’IA à exécuter.

Sur les serveurs de cours Jupyter/Nbgrader, un système de batch simplifié a été mise en place. Il utilise la commande submit qui permet de planifier l’exécution de taches sur le serveur. Cette commande est basée sur la commande Unix at [1]

Commande submit#

Cette commande permet d’exécuter un script python en tache de fond sur les serveurs Jupyter/nbgrader. La commande suivante:

   submit -h

affiche l’aide avec les options de la commande submit:

  syntaxe de submit pour la gestion de script bash en tache de fond (bg)
  submit script [time]: soumet un script bash pour l'executer à une heure précise
     avec time = hh:mm, now + 2 minutes/hours/days, .. (defaut now)
  submit list [all]   : affiche les scripts soumis (de tous les users si all)
  submit list run     : affiche les scripts qui s'executent
  submit purge        : purge tous les scripts soumis de l'utilisateur
  submit kill script  : arrete le script en cours d'execution
  submit [-h] ou help : aide

Fichier script bash#

Pour utiliser cette commande, il faut écrire un script bash qui permet de lancer un script python dans le bon environnement avec les bonnes librairies.

script shell

Sous Unix, un script shell (shell=interpéteur de commande) permet d’automatiser une série d’opérations. Il se présente sous la forme d’un fichier contenant une ou plusieurs commandes qui seront exécutées de manière séquentielle. Le shell le plus courant sous Linux est bash. Un script bash est donc un fichier (avec un extension .sh) qui contient une serie de commandes

script bash pour TensorFlow#

Pour exécuter le programme Python TensorFlowLSTM.py avec la bibliothèque TensorFlow, on écrit dans un fichier bash, par exemple batchtf.sh les commandes suivantes:

#! /usr/bin/env bash
source /var/lib/jupyterhub/venvs/tf/bin/activate
python3 TensorFlowLSTM.py >> batchtf.log 2>&1

La première ligne indique que le fichier est un script bash. La seconde ligne configure un environnement python avec la bibliothèque tensorflow. La troisième ligne exécute le script python en stockant les sorties dans le fichier batchtf.log.

Le fichier python TensorFlowLSTM.py utilisé est donné sur le lien suivant:

script bash pour pyTorch#

Pour exécuter le programme Python PyTorchLSTM.py avec la bibliothèque pytorch, on écrit dans un fichier bash, par exemple batchtorch.sh les commandes suivantes:

#! /usr/bin/env bash
source /var/lib/jupyterhub/venvs/torch/bin/activate
python3 PyTorchLSTM.py >> batchtorch.log 2>&1

La première ligne indique que le fichier est un script bash. La seconde ligne configure un environnement python avec la bibliothèque pytorch. La troisième ligne exécute le script python en stockant les sorties dans le fichier batchtorch.log

conversion notebook en script python#

On peut facilement convertir un notebook en script python.

On peut utiliser 2 méthodes:

  1. méthode 1: on ouvre le notebook dans l’interface jupyterlab, puis on séléctionne Fichier -> Save and Export Notebook as puis Script exécutable. Le fichier python est ensuite téléchargé sur l’ordinateur. Il faut ensuite le retransférer sur le serveur de cours.

  2. méthode 2: on ouvre un terminal, et on exécute la commande suivante:

    jupyter nbconvert --to script  notebook.ipynb

Soumission d’un job#

Pour lancer le programme; il suffit d’exécuter la commande submit avec le nom du script et l’heure d’exécution. La commande suivante:

submit batchtf.sh now 

soumet le script batchtf.sh qui s’exécute immédiatement (heure = now). Pour exécuter le script ultérieurement, on peut spécifier une heure de démarrage. La commande

submit batchtf now + 1 hour

exécutera le script dans 1 heure (on peut aussi spécifier une heure exacte HH:MM ).

Pour vérifier l’état d’un job, on écrit:

submit list

Warning

ATTENTION: un utilisateur ne peut soumettre qu’un seul job à la fois ! Pour soumettre un nouveau job, il faut attendre la fin du job précédent, où l’arréter (submit purge ou kill).

Pour partager équitablement les ressources, il faut privilégier une exécution décalée. On peut avoir la liste de tous les jobs soumis sur le serveur avec leur date de démarrage en tapant:

submit list all

On choisit alors une heure de démarrage avec le moins de jobs.