Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
groupe-dfo-bbo:projets:atlas [2021/05/21 15:54] tribchri [Exécution de l'exemple] |
groupe-dfo-bbo:projets:atlas [2023/08/25 18:43] (Version actuelle) tribchri [Exécution de l'exemple] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Utiliser les GPU d'Altas ====== | + | ====== Utiliser les GPU d'Atlas avec Pytorch ====== |
**En construction** | **En construction** | ||
- | On utilise un exemple pour illustrer comment entraîner une réseau de neurone sur les GPU d'Atlas. La procédure est la même si on utilise Pandora. | + | Une façon d'utiliser les GPU d'Atlas est d'entraîner un réseau de neurones en utilisant pytorch. On utilise ici un exemple pour illustrer comment faire. La procédure est la même si on utilise Pandora. |
===== Téléchargement de l'exemple ===== | ===== Téléchargement de l'exemple ===== | ||
Ligne 22: | Ligne 22: | ||
Pour charger une version : | Pour charger une version : | ||
- | '' module load anaconda '' | + | <del>'' module load anaconda ''</del> |
- | '' conda activate pytorch-1.8.1 '' | + | <del>'' conda activate pytorch-1.8.1 ''</del> |
- | Avant de lancer le script, il faut sélectionner quel(s) GPU utiliser parmi les 4 A100 (en mai 2021) disponibles sur Atlas (8 GPU P100 sur Pandora). Avant de choisir un ou plusieurs GPUs il faut vérifier si ils sont utiliser avec les commande | + | ''module load python'' |
+ | |||
+ | ''python3 -m venv .env'' | ||
+ | |||
+ | ''pip3 install --upgrage pip'' | ||
+ | |||
+ | ''pip3 install torch torchvision torchaudio'' | ||
+ | |||
+ | |||
+ | Avant de lancer le script, il faut sélectionner quel(s) GPU utiliser parmi les 4 A100 (en mai 2021) disponibles sur Atlas (8 GPU P100 sur Pandora). Avant de choisir un ou plusieurs GPUs il faut vérifier si ils sont utilisés avec la commande | ||
'' nvidia-smi '' | '' nvidia-smi '' | ||
- | Le dernier block affiché par la commande donne les processus lancé sur quel GPU. | + | Le dernier block affiché par la commande donne les processus lancés sur quels GPUs. |
On peut choisir un GPU pour pytorch avec la commande | On peut choisir un GPU pour pytorch avec la commande | ||
Ligne 38: | Ligne 47: | ||
Avec xx pour un numéro de GPU disponible. | Avec xx pour un numéro de GPU disponible. | ||
- | Dans le répertoire cifar10-resnet18-pytorch-quantization, on trouve plusieurs scripts utiles pour "quantizé" un réseau. Le script que nous allons utiliser, fait l'optimisation du réseau (sans faire de "quantization"). De l'information sur les scripts est fournies dans les fichiers README. | + | Dans le répertoire cifar10-resnet18-pytorch-quantization, on trouve plusieurs scripts utiles pour "quantizer" un réseau. Le script que nous allons utiliser, fait l'optimisation du réseau (sans faire de "quantization"). De l'information sur les scripts est fournie dans les fichiers README. |
+ | |||
+ | '' python trainFullPrecisionAndSaveState.py %%--%%epochs=1'' | ||
+ | |||
+ | On peut aussi lancer la commande avec une valeur de ''CUDA_VISIBLE_DEVICES'' associée : | ||
+ | |||
+ | '' CUDA_VISIBLE_DEVICES=2 python trainFullPrecisionAndSaveState.py %%--%%epochs=1'' | ||
+ | |||
+ | Si les images du dataset CIFAR10 ne sont pas présentes, la fonction de torchvision qui charge les images va d'abord les télécharger. | ||
+ | |||
+ | '' Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz '' | ||
+ | |||
+ | '' 100%|███████████████████████████████████████████████████████████████████████████████████████████████████▉| 170360832/170498071 [00:05<00:00, 37255459.57it/s] '' | ||
+ | |||
+ | L'optimisation sur 200 epochs prend plusieurs minutes. Avec l'option ''%%--%%epochs=1'', une seule epoch est effectuée et cela prend quelques secondes. | ||
+ | On peut vérifier ce qui se passe sur le GPU avec la commande ''nvidia-smi''. | ||
+ | |||
+ | Pour utiliser plusieurs GPU, il faut faire : | ||
+ | |||
+ | '' export CUDA_VISIBLE_DEVICES=xx,yy '' | ||
+ | |||
+ | On peut alors passer de plus grosses batch d'images (512 au lieu de 256) lors de l'entrainement du réseau | ||
+ | |||
+ | '' python trainFullPrecisionAndSaveState.py %%--%%epochs=1 %%--%%batch_size=512'' | ||
+ | |||
+ | À noter que ce choix influence la précision finale obtenue par le réseau. | ||
- | '' pytorch trainFullPrecisionAndSaveState.py ''--''epochs=1'' | ||