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.
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
pytorchettorchvisionen spécifiant les éléments suivants :torch==1.5.0torchvision==0.6.0
-
Sur les clusters CPU, installez
pytorchettorchvisionen 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 :
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 :
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:
if torch.cuda.is_initialized():
raise Exception("CUDA was initialized; distributed training will fail.") # or something similar