PyTorch

Revision as of 16:26, 2 July 2019 by FuzzyBot (talk | contribs) (Updating to match new version of source page)
Other languages:

PyTorch est un paquet Python qui offre deux fonctionnalités de haut niveau :

  • le calcul tensoriel (semblable à celui effectué par NumPy) avec grande accélération de GPU,
  • des réseaux de neurones d’apprentissage profond dans un système de gradients conçu sur le modèle d’un magnétophone.

Il y a une certaine ressemblance entre PyTorch et Torch, mais pour des raisons pratiques vous pouvez considérer que ce sont des paquets différents.

Installation

Wheels récemment ajoutés

Pour connaître la dernière version de PyTorch, utilisez

 
[name@server ~]$ avail_wheels "torch*"

Voyez aussi Lister les wheels disponibles.

Installation de la wheel Calcul Canada

La meilleure option est d'installer avec Python wheels comme suit :

1. Chargez un module Python, soit python/2.7, python/3.5, python/3.6 ou python/3.7.
2. Créez et démarrez un environnement virtuel.
3. Installez PyTorch dans l'environnement virtuel avec pip install.

GPU et CPU

 
(venv) [name@server ~] pip install numpy torch --no-index

En supplément

En plus de torch, vous pouvez aussi installer torchvision, torchtext et torchaudio.

 
(venv) [name@server ~] pip install torch torchvision torchtext torchaudio --no-index

libtorch

libtorch.so est compris dans le paquet (wheel). Une fois que PyTorch est installé dans un environnement virtuel, vous pouvez le trouver avec $VIRTUAL_ENV/lib/python3.6/site-packages/torch/lib/libtorch.so.

Soumettre une tâche

Le script suivant est un exemple de soumission d'une tâche utilisant le wheel Python dans un environnement virtuel de $HOME/pytorch.

File : pytorch-test.sh

#!/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
#SBATCH --output=%N-%j.out

module load python/3.6
virtualenv --no-download $SLURM_TMPDIR/env
source $SLURM_TMPDIR/env/bin/activate
pip install torch --no-index

python pytorch-test.py


Le script Python pytorch-test.py est semblable à

File : pytorch-test.py

import torch
x = torch.Tensor(5, 3)
print(x)
y = torch.rand(5, 3)
print(y)
# let us run the following only if CUDA is available
if torch.cuda.is_available():
    x = x.cuda()
    y = y.cuda()
    print(x + y)


Vous pouvez alors soumettre une tâche PyTorch avec

 
[name@server ~]$ sbatch pytorch-test.sh

Dépannage

Étalonnage

Les résultats ResNet-18 suivants ont été obtenus avec des configurations différentes.

Les valeurs sont le nombre d'images par seconde par GPU, avec DistributedDataParallel et NCCL.

Ces résultats sont provisoires et varient de beaucoup. Les travaux sont en cours pour obtenir des valeurs plus précises.

Graham[P100], images par seconde, par GPU
Taille du lot 1 nœud, 1 GPU 1 nœud, 2 GPU 2 * (1 nœud, 2 GPU) 3 * (1 nœud, 2 GPU)
32 542 134 103 82
64 620 190 149 134
128 646 241 197 180
256 587 263 184 368
-->

Dépannage

Fuites de mémoire

Sur le matériel AVX512 (nœuds V100, Skylake ou Béluga), les versions PyTorch antérieures à v1.0.1 qui utilisent des bibliothèques moins récentes (cuDNN < v7.5 ou MAGMA < v2.5) peuvent avoir des fuites de mémoire importantes et créer des exceptions de mémoire insuffisante et terminer vos tâches. Pour contrer ceci, utilisez la plus récente version de torch.