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 Runtime에 포함된 PyTorch를 사용을 권장합니다. 그러나 표준 Databricks Runtime을 사용해야 하는 경우 PyTorch를 Databricks PyPI 라이브러리로 설치할 수 있습니다. 다음 예제에서는 PyTorch 1.5.0을 설치하는 방법을 보여 줍니다.
GPU 클러스터에서 다음을 지정하여
pytorch
및torchvision
을 설치합니다.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)
“프로세스 0이 종료코드 1으로 끝났습니다”
이 오류는 Databricks, 로컬 컴퓨터 등 환경에 관계없이 Notebook을 사용할 때 발생합니다. 이 오류를 방지하려면 torch.multiprocessing.spawn
대신torch.multiprocessing.start_processes
과 start_method=fork
를 사용하십시오.
예시:
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")
"서버 소켓이 [::]:{PORT NUMBER} (errno: 98 - 이미 사용 중인 주소)에 바인딩하지 못했습니다."
이 오류는 학습 중에 셀을 중단한 후 분산 학습을 다시 시작할 때 나타납니다.
이 문제를 해결하려면 클러스터를 다시 시작합니다. 다시 시작해도 문제가 해결되지 않으면, 학습 함수 코드에 오류가 있을 수 있습니다.
CUDA 관련 오류
start_method=”fork”
이 CUDA와 호환되지 않으므로 CUDA 에 추가 문제가 발생할 수 있습니다. 모든 셀에서 .cuda
명령을 사용하면 오류가 발생할 수 있습니다. 이러한 오류를 방지하려면, torch.multiprocessing.start_method
을 호출 하기 전에 다음 검사를 추가합니다:
if torch.cuda.is_initialized():
raise Exception("CUDA was initialized; distributed training will fail.") # or something similar