Aller au contenu principal

PyTorch

Le projet PyTorch est un package Python qui fournit le calcul tensoriel accéléré par GPU et des fonctionnalités de haut niveau pour la création de réseaux de deep learning. Pour les détails de la licence, consultez le document de licence PyTorch sur GitHub.

Pour surveiller et déboguer vos modèles PyTorch, envisagez d'utiliser TensorBoard.

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

remarque

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

Entraînement sur un seul nœud et distribué

Pour tester et migrer des workflows à machine unique, utilisez un cluster de nœuds uniques.

Pour les options de formation distribuée pour le deep learning, voir Formation distribuée.

Exemples de Notebooks

Notebook de formation de modèle MLflow PyTorch de bout en bout

Notebook PyTorch

Notebook d'entraînement de modèle MLflow PyTorch avec TensorFlow

Installer PyTorch

Databricks Runtime pour ML

Databricks Runtime for Machine Learning inclut PyTorch, vous pouvez donc créer le cluster et start à utiliser PyTorch. Pour la version de PyTorch installée dans la version Databricks Runtime ML que vous utilisez, consultez les notes de publication.

Databricks Runtime

Databricks vous recommande d'utiliser le PyTorch inclus dans Databricks Runtime for Machine Learning. Cependant, si vous devez utiliser le Databricks Runtime standard, PyTorch peut être installé en tant que bibliothèque PyPI Databricks. L'exemple suivant montre comment installer 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 CPU, 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 dépannage pour PyTorch distribué

Les sections suivantes décrivent les messages d'erreur courants et les conseils de dépannage pour les classes : PyTorch DataParallel ou PyTorch DistributedDataParallel. La plupart de ces erreurs peuvent probablement être résolues avec TorchDistributor, qui est disponible sur Databricks Runtime ML 13,0 et versions supérieures. Toutefois, si TorchDistributor n'est pas une solution viable, des solutions recommandées sont également fournies dans chaque section.

Voici un exemple d'utilisation de TorchDistributor :

Python

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)

Le processus 0 s'est terminé avec le code de sortie 1

L'erreur suivante peut survenir lors de l'utilisation de notebooks dans Databricks ou localement :

process 0 terminated with exit code 1

Pour éviter cette erreur, utilisez torch.multiprocessing.start_processes avec start_method=fork au lieu de torch.multiprocessing.spawn.

Par exemple :

Python
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")

La socket du serveur n'a pas pu se lier au port

L'erreur suivante apparaît lorsque vous redémarrez l'entraînement distribué après avoir interrompu la cellule pendant l'entraînement :

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

Pour résoudre le problème, redémarrez le cluster. Si le redémarrage ne résout pas le problème, il pourrait y avoir une erreur dans le code de la fonction d'entraînement.

Erreurs liées à CUDA

Vous pouvez rencontrer des problèmes supplémentaires avec CUDA étant donné que start_method=”fork” est non compatible CUDA. L'utilisation de toute commande .cuda dans n'importe quelle cellule peut entraîner des échecs. Pour éviter ces erreurs, ajoutez la vérification suivante avant d'appeler torch.multiprocessing.start_method:

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