Tutoriel Apprentissage machine: Difference between revisions
(Improve bash script) |
(Élaboration) |
||
Line 4: | Line 4: | ||
<translate> | <translate> | ||
= Archivage d'un ensemble de données = | Cette page constitue un guide de démarrage servant à porter une tâche d'apprentissage automatique (Machine Learning, ML) sur une grappe Calcul Canada. | ||
== Étape 1: Archivage d'un ensemble de données == | |||
Les systèmes de fichiers gérés par Calcul Canada sont conçus pour fonctionner avec une quantité limitée de gros fichiers. Assurez-vous que l'ensemble de données dont vous aurez besoin pour votre entraînement se trouve dans un fichier archive (tel que "tar"), que vous transférerez sur votre noeud de calcul au début de votre tâche. '''Si vous ne le faites pas, vous risquez de causer des lectures de fichiers à haute fréquence du noeud de stockage vers votre noeud de calcul, nuisant ainsi à la performance globale du système'''. | Les systèmes de fichiers gérés par Calcul Canada sont conçus pour fonctionner avec une quantité limitée de gros fichiers. Assurez-vous que l'ensemble de données dont vous aurez besoin pour votre entraînement se trouve dans un fichier archive (tel que "tar"), que vous transférerez sur votre noeud de calcul au début de votre tâche. '''Si vous ne le faites pas, vous risquez de causer des lectures de fichiers à haute fréquence du noeud de stockage vers votre noeud de calcul, nuisant ainsi à la performance globale du système'''. | ||
Line 10: | Line 12: | ||
En supposant que les fichiers dont vous avez besoin sont dans le dossier <tt>mydataset</tt>: | En supposant que les fichiers dont vous avez besoin sont dans le dossier <tt>mydataset</tt>: | ||
$ tar cf mydataset.tar mydataset/* | |||
La commande ci-haut ne compresse pas les données. Si vous croyez que ce serait approprié, vous pouvez utiliser <tt>tar czf</tt>. | La commande ci-haut ne compresse pas les données. Si vous croyez que ce serait approprié, vous pouvez utiliser <tt>tar czf</tt>. | ||
= Préparation de l'environnement = | == Étape 2: Préparation de l'environnement virtuel == | ||
* Créez et activez un environnement virtuel de | Nous vous recommandons d'essayer votre tâche dans une [[Running_jobs/fr#T.C3.A2ches_interactives|tâche interactive]] avant de la soumettre avec un script (section suivante). Vous pourrez ainsi diagnostiquer plus rapidement les problèmes. Voici un exemple de demande de tâche interactive: | ||
$ salloc --account=def-someuser --gres=gpu:1 --cpus-per-task=6 --mem=32000M --time=1:00 | |||
Une fois dans la tâche: | |||
* [[Python#Creating_and_using_a_virtual_environment|Créez et activez un environnement virtuel]] dans <tt>$SLURM_TMPDIR</tt> (cette variable pointe vers un dossier local, c'est-à-dire ''sur le noeud de calcul''). Par exemple: | |||
$ virtualenv --no-download $SLURM_TMPDIR/env | |||
* Installez les paquets dont vous avez besoin | |||
* Tentez d'exécuter votre script | * Tentez d'exécuter votre script | ||
* Installez les paquets manquants s'il y a lieu | * Installez les paquets manquants s'il y a lieu | ||
* pip freeze > requirements.txt | * Créez un fichier <tt>requirements.txt</tt> afin de pouvoir recréer l'environnement virtuel: | ||
(env) $ pip freeze > ~/requirements.txt | |||
== Étape 3: Préparation du script de soumission == | |||
Vous devez soumettre vos tâches à l'aide de scripts <tt>sbatch</tt>, afin qu'elles puissent être entièrement automatisées. Les tâches interactives servent uniquement à préparer et à déboguer des tâches. | |||
=== Éléments importants d'un script <tt>sbatch</tt> === | |||
# Compte sur lequel les ressources seront "facturées" | |||
# Ressources demandées: | |||
## Nombre de CPU | |||
## Nombre de GPU | |||
## Quantité de mémoire | |||
## Durée | |||
# Commandes ''bash'': | |||
## Préparation de l'environnement (modules, virtualenv) | |||
## Transfert des données vers le noeud de calcul | |||
## Lancement de l'exécutable | |||
= | === Exemple de script === | ||
{{File | {{File | ||
Line 33: | Line 57: | ||
#SBATCH --cpus-per-task=6 # Cores proportional to GPUs: 6 on Cedar, 16 on Graham. | #SBATCH --cpus-per-task=6 # Cores proportional to GPUs: 6 on Cedar, 16 on Graham. | ||
#SBATCH --mem=32000M # Memory proportional to GPUs: 32000 Cedar, 64000 Graham. | #SBATCH --mem=32000M # Memory proportional to GPUs: 32000 Cedar, 64000 Graham. | ||
#SBATCH --time=0-03:00 | #SBATCH --time=0-03:00 # DD-HH:MM:SS | ||
#SBATCH --output=%N-%j.out | #SBATCH --output=%N-%j.out | ||
Revision as of 18:06, 2 October 2019
This is not a complete article: This is a draft, a work in progress that is intended to be published into an article, which may or may not be ready for inclusion in the main wiki. It should not necessarily be considered factual or authoritative.
Cette page constitue un guide de démarrage servant à porter une tâche d'apprentissage automatique (Machine Learning, ML) sur une grappe Calcul Canada.
Étape 1: Archivage d'un ensemble de données
Les systèmes de fichiers gérés par Calcul Canada sont conçus pour fonctionner avec une quantité limitée de gros fichiers. Assurez-vous que l'ensemble de données dont vous aurez besoin pour votre entraînement se trouve dans un fichier archive (tel que "tar"), que vous transférerez sur votre noeud de calcul au début de votre tâche. Si vous ne le faites pas, vous risquez de causer des lectures de fichiers à haute fréquence du noeud de stockage vers votre noeud de calcul, nuisant ainsi à la performance globale du système.
En supposant que les fichiers dont vous avez besoin sont dans le dossier mydataset:
$ tar cf mydataset.tar mydataset/*
La commande ci-haut ne compresse pas les données. Si vous croyez que ce serait approprié, vous pouvez utiliser tar czf.
Étape 2: Préparation de l'environnement virtuel
Nous vous recommandons d'essayer votre tâche dans une tâche interactive avant de la soumettre avec un script (section suivante). Vous pourrez ainsi diagnostiquer plus rapidement les problèmes. Voici un exemple de demande de tâche interactive:
$ salloc --account=def-someuser --gres=gpu:1 --cpus-per-task=6 --mem=32000M --time=1:00
Une fois dans la tâche:
- Créez et activez un environnement virtuel dans $SLURM_TMPDIR (cette variable pointe vers un dossier local, c'est-à-dire sur le noeud de calcul). Par exemple:
$ virtualenv --no-download $SLURM_TMPDIR/env
- Installez les paquets dont vous avez besoin
- Tentez d'exécuter votre script
- Installez les paquets manquants s'il y a lieu
- Créez un fichier requirements.txt afin de pouvoir recréer l'environnement virtuel:
(env) $ pip freeze > ~/requirements.txt
Étape 3: Préparation du script de soumission
Vous devez soumettre vos tâches à l'aide de scripts sbatch, afin qu'elles puissent être entièrement automatisées. Les tâches interactives servent uniquement à préparer et à déboguer des tâches.
Éléments importants d'un script sbatch
- Compte sur lequel les ressources seront "facturées"
- Ressources demandées:
- Nombre de CPU
- Nombre de GPU
- Quantité de mémoire
- Durée
- Commandes bash:
- Préparation de l'environnement (modules, virtualenv)
- Transfert des données vers le noeud de calcul
- Lancement de l'exécutable
Exemple de script
#!/bin/bash
#SBATCH --gres=gpu:1 # Request GPU "generic resources"
#SBATCH --cpus-per-task=6 # Cores proportional to GPUs: 6 on Cedar, 16 on Graham.
#SBATCH --mem=32000M # Memory proportional to GPUs: 32000 Cedar, 64000 Graham.
#SBATCH --time=0-03:00 # DD-HH:MM:SS
#SBATCH --output=%N-%j.out
module load python/3.6 cuda cudnn
SOURCEDIR=~/ml-test
# Prepare virtualenv
virtualenv --no-download $SLURM_TMPDIR/env
source $SLURM_TMPDIR/env/bin/activate
pip install --no-index -r $SOURCEDIR/requirements.txt
# Prepare data
mkdir $SLURM_TMPDIR/data
tar xf ~/projects/def-xxxx/data.tar $SLURM_TMPDIR/data
# Start training
python $SOURCEDIR/test.py $SLURM_TMPDIR/data