PyTorch

Le projet PyTorch est un package Python qui fournit une fonctionnalité de calcul de tenseur accélérée par GPU et des fonctionnalités générales pour la création de réseaux Deep Learning. Pour plus d’informations sur les licences, consultez la documentation relative aux licences PyTorch sur GitHub.

Pour superviser et déboguer vos modèles PyTorch, envisagez d’utiliser TensorBoard.

PyTorch est inclus dans Databricks Runtime pour Machine Learning. Si vous utilisez Databricks Runtime, consultez Installer PyTorch pour obtenir des instructions sur l’installation de PyTorch.

Notes

Ce document n’est pas un guide exhaustif de PyTorch. Pour plus d’informations, consultez le site web PyTorch.

Entraînement mononœud et distribué

Pour tester et migrer des workflows monomachines, utilisez un cluster mononœud.

Pour connaître les options de formation distribuée pour le Deep Learning, consultez Formation distribuée.

Exemple de bloc-notes

Notebook PyTorch

Obtenir le notebook

Installer PyTorch

Databricks Runtime pour ML

Databricks Runtime pour Machine Learning comprend PyTorch pour vous permettre de créer le cluster et de commencer à utiliser PyTorch. Pour la version de PyTorch installée dans la version Databricks Runtime ML que vous utilisez, consultez les notes de publication.

Runtime Databricks

Databricks recommande d’utiliser la version PyTorch incluse dans Databricks Runtime pour le Machine Learning. Toutefois, si vous devez utiliser Databricks Runtime standard, PyTorch peut être installé en tant que bibliothèque Databricks PyPI. L’exemple suivant présente l’installation de PyTorch 1.5.0 :

  • Sur les clusters GPU, installez pytorch et torchvision en spécifiant les éléments suivants :

    • torch==1.5.0
    • torchvision==0.6.0
  • Sur les clusters avec processeurs, installez pytorch et torchvision en utilisant les fichiers Python Wheel suivants :

    https://download.pytorch.org/whl/cpu/torch-1.5.0%2Bcpu-cp37-cp37m-linux_x86_64.whl
    
    https://download.pytorch.org/whl/cpu/torchvision-0.6.0%2Bcpu-cp37-cp37m-linux_x86_64.whl
    

Erreurs et résolution des problèmes pour PyTorch distribué

Les sections suivantes décrivent les messages d’erreur courants et les conseils de résolution des problèmes pour les classes : PyTorch DataParallel ou PyTorch DistributedDataParallel. Vous pourrez sans doute résoudre la plupart de ces erreurs avec TorchDistributor, qui est disponible sur Databricks Runtime ML 13.0 et versions ultérieures. Toutefois, si TorchDistributor n’est pas une solution viable, des solutions recommandées sont également fournies dans chaque section.

Voici un exemple ci-dessous d’utilisation de TorchDistributor :


from pyspark.ml.torch.distributor import TorchDistributor

def train_fn(learning_rate):
        # ...

num_processes=2
distributor = TorchDistributor(num_processes=num_processes, local_mode=True)

distributor.run(train_fn, 1e-3)

process 0 terminated with exit code 1

Cette erreur se produit lors de l’utilisation de notebooks, quel que soit l’environnement : Databricks, ordinateur local, etc. Pour éviter cette erreur, utilisez torch.multiprocessing.start_processes avec start_method=fork au lieu de torch.multiprocessing.spawn.

Par exemple :

import torch

def train_fn(rank, learning_rate):
    # required setup, e.g. setup(rank)
        # ...

num_processes = 2
torch.multiprocessing.start_processes(train_fn, args=(1e-3,), nprocs=num_processes, start_method="fork")

The server socket has failed to bind to [::]:{PORT NUMBER} (errno: 98 - Address already in use).

Cette erreur s’affiche lorsque vous redémarrez l’entraînement distribué après avoir interrompu la cellule pendant cet événement.

Pour résoudre ce problème, redémarrez le cluster. Si cette action ne résout pas le problème, il est possible qu’il y ait une erreur dans le code de la fonction d’entraînement.

Vous pouvez rencontrer d’autres problèmes avec CUDA, car start_method=”fork” n’est pas compatible avec CUDA. Il est possible que l’utilisation de commandes .cuda dans n’importe quelle cellule entraîne des échecs. Pour éviter ces erreurs, ajoutez les vérifications suivantes avant d’appeler torch.multiprocessing.start_method :

if torch.cuda.is_initialized():
    raise Exception("CUDA was initialized; distributed training will fail.") # or something similar