Udostępnij za pośrednictwem


PyTorch

Projekt PyTorch to pakiet języka Python, który zapewnia przyspieszone obliczenia tensorowe procesora GPU i funkcje wysokiego poziomu do tworzenia sieci uczenia głębokiego. Aby uzyskać szczegółowe informacje na temat licencjonowania, zobacz dokument licencji PyTorch w witrynie GitHub.

Aby monitorować i debugować modele PyTorch, rozważ użycie narzędzia TensorBoard.

Narzędzie PyTorch jest dołączone do środowiska Databricks Runtime na potrzeby uczenia maszynowego. Jeśli używasz środowiska Databricks Runtime, zobacz Instalowanie rozwiązania PyTorch , aby uzyskać instrukcje dotyczące instalowania rozwiązania PyTorch.

Uwaga

Nie jest to kompleksowy przewodnik po PyTorch. Aby uzyskać więcej informacji, zobacz witrynę internetową PyTorch.

Trenowanie jednowęźle i rozproszone

Aby przetestować i zmigrować przepływy pracy z jednym komputerem, użyj klastra z jednym węzłem.

Aby uzyskać opcje trenowania rozproszonego na potrzeby uczenia głębokiego, zobacz Trenowanie rozproszone.

Przykładowy notes

Notes PyTorch

Pobierz notes

Instalowanie biblioteki PyTorch

Środowisko uruchomieniowe usługi Databricks dla uczenia maszynowego

Środowisko Databricks Runtime for Machine Learning obejmuje usługę PyTorch, dzięki czemu można utworzyć klaster i rozpocząć korzystanie z rozwiązania PyTorch. Aby zapoznać się z wersją rozwiązania PyTorch zainstalowaną w używanej wersji środowiska Databricks Runtime ML, zobacz informacje o wersji.

Databricks Runtime

Usługa Databricks zaleca użycie biblioteki PyTorch zawartej w środowisku Databricks Runtime na potrzeby uczenia maszynowego. Jeśli jednak musisz użyć standardowego środowiska Databricks Runtime, narzędzie PyTorch można zainstalować jako bibliotekę PyPI usługi Databricks. W poniższym przykładzie pokazano, jak zainstalować narzędzie PyTorch 1.5.0:

  • W klastrach gpu zainstaluj program pytorch i torchvision , określając następujące elementy:

    • torch==1.5.0
    • torchvision==0.6.0
  • W klastrach procesora CPU zainstaluj następujące pytorch pliki wheel języka Python i torchvision przy użyciu następujących plików wheel:

    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
    

Błędy i rozwiązywanie problemów z rozproszoną usługą PyTorch

W poniższych sekcjach opisano typowe komunikaty o błędach i wskazówki dotyczące rozwiązywania problemów dla klas: PyTorch DataParallel lub PyTorch DistributedDataParallel. Większość tych błędów prawdopodobnie można rozwiązać za pomocą narzędzia TorchDistributor, który jest dostępny w środowisku Databricks Runtime ML 13.0 lub nowszym. Jeśli jednak TorchDistributor nie jest to możliwe rozwiązanie, zalecane rozwiązania są również udostępniane w każdej sekcji.

Poniżej przedstawiono przykład użycia narzędzia 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)

"proces 0 zakończony kodem zakończenia 1"

Ten błąd występuje podczas korzystania z notesów, niezależnie od środowiska: databricks, komputer lokalny itp. Aby uniknąć tego błędu, użyj polecenia torch.multiprocessing.start_processesstart_method=fork zamiast torch.multiprocessing.spawn.

Na przykład:

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

"Nie można powiązać gniazda serwera z [::]:{NUMER PORTU} (errno: 98 — adres już używany)."

Ten błąd pojawia się po ponownym uruchomieniu trenowania rozproszonego po przerwaniu komórki podczas trenowania.

Aby rozwiązać ten problem, uruchom ponownie klaster. Jeśli ponowne uruchomienie nie rozwiąże problemu, może wystąpić błąd w kodzie funkcji trenowania.

Możesz napotkać dodatkowe problemy z cuda, ponieważ start_method=”fork” nie jest zgodny z CUDA. Użycie dowolnych .cuda poleceń w dowolnej komórce może prowadzić do błędów. Aby uniknąć tych błędów, przed wywołaniem polecenia torch.multiprocessing.start_methoddodaj następujące sprawdzenie:

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