PyTorch
O projeto PyTorch é um pacote do Python que fornece computação de tensor acelerada por GPU e funcionalidades de alto nível para a criação de redes de aprendizado profundo. Para obter detalhes de licenciamento, confira a documentação de licença do PyTorch no GitHub.
Para monitorar e depurar seus modelos do PyTorch, considere a possibilidade de usar o TensorBoard.
O PyTorch está incluído no Databricks Runtime para Machine Learning. Se estiver usando o Databricks Runtime, confira Instalar o PyTorch para obter instruções sobre como instalar o PyTorch.
Observação
Este não é um guia completo sobre o PyTorch. Para obter mais informações, acesse o site do PyTorch.
Nó único e treinamento distribuído
Para testar e migrar fluxos de trabalho de computador único, use um cluster de nó único.
Para opções de treinamento distribuído para aprendizado profundo, confira Treinamento distribuído.
Caderno de exemplo
Notebooks do PyTorch
Instalar o PyTorch
Databricks Runtime para ML
O Databricks Runtime para Machine Learning inclui o PyTorch, para que você possa criar o cluster e começar a usar o PyTorch. Para a versão do PyTorch instalada na versão do Databricks Runtime ML que você está usando, confira as notas sobre a versão.
Databricks Runtime
O Databricks recomenda que você use o PyTorch incluído no Databricks Runtime para Machine Learning. No entanto, se você precisar usar o Databricks Runtime padrão, o PyTorch poderá ser instalado como uma biblioteca PyPI do Databricks. O seguinte exemplo mostra como instalar o PyTorch 1.5.0:
Em clusters de GPU, instale
pytorch
etorchvision
especificando o seguinte:torch==1.5.0
torchvision==0.6.0
Nos clusters de CPU, instale
pytorch
etorchvision
utilizando os seguintes pacotes wheel do Python: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
Erros e solução de problemas para PyTorch distribuído
As seções a seguir descrevem mensagens de erro comuns e diretrizes de solução de problemas para as classes: PyTorch DataParallel ou PyTorch DistributedDataParallel. A maioria desses erros provavelmente podem ser resolvidos com TorchDistributor, que está disponível no Databricks Runtime ML 13.0 e posterior. No entanto, se TorchDistributor
não for uma solução viável, as soluções recomendadas também serão fornecidas em cada seção.
Veja a seguir um exemplo de como usar 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”
Esse erro ocorre ao usar notebooks, independentemente do ambiente: Databricks, computador local, etc. Para evitar esse erro, use torch.multiprocessing.start_processes
com start_method=fork
em vez de torch.multiprocessing.spawn
.
Por exemplo:
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).”
Este erro aparece quando você reinicia o treinamento distribuído após interromper a célula durante o treinamento.
Para corrigir o problema, reinicie o cluster. Se a reinicialização não resolver o problema, um erro poderá ocorrer no código da função de treinamento.
Erros relacionados ao CUDA
Você pode encontrar problemas adicionais com o CUDA, pois start_method=”fork”
não é compatível com CUDA. O uso de comandos .cuda
em qualquer célula pode levar a falhas. Para evitar esses erros, adicione a seguinte verificação antes de chamar torch.multiprocessing.start_method
:
if torch.cuda.is_initialized():
raise Exception("CUDA was initialized; distributed training will fail.") # or something similar