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
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
undtorchvision
, indem Sie Folgendes angeben:torch==1.5.0
torchvision==0.6.0
Installieren Sie in CPU-Clustern
pytorch
undtorchvision
, 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)
„Prozess 0 wurde mit Beendigungscode 1 beendet“
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
“.
Zum Beispiel:
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")
„Der Server-Socket konnte sich nicht an [::]:{PORT NUMBER} gebunden werden (errno: 98 – Adresse wird bereits verwendet).“
Dieser Fehler wird angezeigt, wenn Sie das verteilte Training neu starten, nachdem die Zelle während des Trainings unterbrochen wurde.
Um das Problem zu beheben, starten Sie den Cluster neu. Wenn der Neustart das Problem nicht behebt, liegt möglicherweise ein Fehler im Trainingsfunktionscode vor.
CUDA-bezogene Fehler
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