PyTorch

PyTorch 프로젝트는 딥 러닝 네트워크를 빌드하기 위한 GPU 가속 텐서 계산 및 높은 수준의 기능을 제공하는 Python 패키지입니다. 라이선스에 대한 자세한 내용은 GitHub의 PyTorch 라이선스 문서를 참조하세요.

PyTorch 모델을 모니터링하고 디버그하려면 TensorBoard를 사용하는 것이 좋습니다.

PyTorch는 Machine Learning용 Databricks Runtime에 포함되어 있습니다. Databricks Runtime을 사용하는 경우 PyTorch 설치에 대한 지침은 PyTorch 설치를 참조하세요.

참고 항목

이 가이드는 PyTorch에 대한 포괄적인 가이드가 아닙니다. 자세한 내용은 PyTorch 웹 사이트를 참조하세요.

단일 노드 및 분산 학습

단일 컴퓨터 워크플로를 테스트하고 마이그레이션하려면 단일 노드 클러스터를 사용합니다.

딥 러닝에 대한 분산 학습 옵션은 분산 학습을 참조하세요.

예제 Notebook

PyTorch Notebook

전자 필기장 가져오기

PyTorch 설치

ML용 Databricks Runtime

Machine Learning용 Databricks Runtime에는 PyTorch가 포함되어 있으므로 PyTorch를 사용해 클러스터를 만들고 시작할 수 있습니다. 사용 중인 Databricks Runtime ML 버전에 설치된 PyTorch 버전은 릴리스 정보를 참조하세요.

Databricks Runtime

Databricks는 Machine Learning용 Databricks 런타임에 포함된 PyTorch를 사용하는 것이 좋습니다. 그러나 표준 Databricks 런타임을 사용해야 하는 경우 PyTorch를 Databricks PyPI 라이브러리설치할 수 있습니다. 다음 예제에서는 PyTorch 1.5.0을 설치하는 방법을 보여 줍니다.

  • GPU 클러스터에서 다음을 지정하여 pytorchtorchvision을 설치합니다.

    • torch==1.5.0
    • torchvision==0.6.0
  • CPU 클러스터에서 다음 Python 휠 파일을 설치 pytorch 하고 torchvision 사용합니다.

    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
    

분산 PyTorch에 대한 오류 및 문제 해결

다음 섹션에서는 PyTorch DataParallel 또는 PyTorch DistributedDataParallel 클래스에 대한 일반적인 오류 메시지 및 문제 해결 지침에 대해 설명합니다. 이러한 오류의 대부분은 Databricks Runtime ML 13.0 이상에서 사용할 수 있는 TorchDistributor를 사용하여 해결할 수 있습니다. 그러나 실행 가능한 솔루션이 아닌 경우 TorchDistributor 각 섹션 내에서 권장되는 솔루션도 제공됩니다.

다음은 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

이 오류는 환경(Databricks, 로컬 컴퓨터 등)에 관계없이 Notebook을 사용할 때 발생합니다. 이 오류를 torch.multiprocessing.start_processesstart_method=forktorch.multiprocessing.spawn방지하려면 .

예시:

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

이 오류는 학습이 진행되는 동안 셀을 중단한 후 분산 학습을 다시 시작할 때 나타납니다.

해결하려면 클러스터를 다시 시작합니다. 문제가 해결되지 않으면 학습 함수 코드에 오류가 있을 수 있습니다.

CUDA와 호환되지 않으므로 CUDA start_method=”fork”에 추가 문제가 발생할 수 있습니다. 모든 셀에서 명령을 .cuda 사용하면 오류가 발생할 수 있습니다. 이러한 오류를 방지하려면 호출torch.multiprocessing.start_method하기 전에 다음 검사 추가합니다.

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