PyTorch

Das PyTorch-Projekt ist ein Python-Paket, das GPU-beschleunigte Tensorberechnungen und allgemeine Funktionen zum Erstellen von Deep-Learning-Netzwerken bietet. Weitere Informationen zur Lizenzierung finden Sie im PyTorch-Lizenzdokument auf GitHub.

Erwägen Sie die Verwendung von TensorBoard, um Ihre PyTorch-Modelle zu überwachen und zu debuggen.

PyTorch ist in Databricks Runtime für Machine Learning enthalten. Wenn Sie Databricks Runtime verwenden, finden Sie Anweisungen zum Installieren von PyTorch unter Installieren von PyTorch.

Hinweis

Das ist kein vollständiger Leitfaden für PyTorch. Weitere Informationen finden Sie auf der PyTorch-Website.

Einzelknoten und verteiltes Training

Verwenden Sie einen Einzelknotencluster, um Workflows für einen Computer zu testen und zu migrieren.

Informationen zu Optionen für das verteilte Training für Deep Learning finden Sie unter Verteiltes Training.

Notebook mit Beispielen

PyTorch-Notebook

Notebook abrufen

Installieren von PyTorch

Databricks Runtime für ML

Databricks Runtime für Machine Learning enthält PyTorch, sodass Sie Cluster mit PyTorch erstellen und starten können. Informationen zu der PyTorch-Version, die in der von Ihnen verwendeten Databricks Runtime ML-Version installiert ist, finden Sie in den Versionshinweisen.

Databricks Runtime

Databricks empfiehlt, die in Databricks Runtime für Machine Learning enthaltene PyTorch-Version zu verwenden. Wenn Sie jedoch die Standardversion von Databricks Runtime verwenden müssen, kann PyTorch als Databricks-PyPI-Bibliothek installiert werden. Im folgenden Beispiel wird veranschaulicht, wie Sie PyTorch 1.5.0 installieren:

  • Installieren Sie in GPU-Clustern pytorch und torchvision, indem Sie Folgendes angeben:

    • torch==1.5.0
    • torchvision==0.6.0
  • Installieren Sie in CPU-Clustern pytorch und torchvision, indem Sie die folgenden Python-Wheel-Dateien verwenden:

    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
    

Fehler und Problembehandlung für verteiltes PyTorch

In den folgenden Abschnitten werden häufige Fehlermeldungen und Anleitungen zur Problembehandlung für die folgenden Klassen beschrieben: PyTorch DataParallel oder PyTorch DistributedDataParallel. Die meisten dieser Fehler können wahrscheinlich mit TorchDistributor behoben werden, das in Databricks Runtime ML 13.0 und höher verfügbar ist. Wenn TorchDistributor jedoch keine praktikable Lösung ist, werden in jedem Abschnitt auch empfohlene Lösungen bereitgestellt.

Nachfolgend finden Sie ein Beispiel für die Verwendung von 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

Dieser Fehler tritt bei Verwendung von Notebooks unabhängig von der Umgebung (Databricks, lokaler Computer usw.) auf. Um diesen Fehler zu vermeiden, verwenden Sie „torch.multiprocessing.start_processes“ mit „start_method=fork“ anstelle von „torch.multiprocessing.spawn“.

Beispiele:

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).

Dieser Fehler wird angezeigt, wenn Sie das verteilte Training neu starten, nachdem die Zelle während des Trainings unterbrochen wurde.

Starten Sie den Cluster neu, um das Problem zu beheben. Wenn das Problem dadurch nicht behoben wird, liegt möglicherweise ein Fehler im Trainingsfunktionscode vor.

Es können zusätzliche Probleme mit CUDA auftreten, da „start_method=”fork”“ nicht mit CUDA kompatibel ist. Die Verwendung von „.cuda“-Befehlen in einer beliebigen Zelle kann zu Fehlern führen. Um diese Fehler zu vermeiden, fügen Sie die folgende Überprüfung hinzu, bevor Sie „torch.multiprocessing.start_method“ aufrufen:

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