분산 학습

가능한 경우 Azure Databricks는 단일 머신에서 신경망 네트워크를 학습하는 것을 권장합니다. 학습 및 유추를 위한 분산 코드는 통신 오버헤드로 인해 단일 머신 코드에 비해 더 복잡하며 속도가 더 느립니다. 그러나 모델이나 데이터가 너무 커서 단일 머신의 메모리에 맞지 않는 경우 분산 학습 및 유추를 고려해야 합니다. 이러한 워크로드의 경우 Databricks Runtime ML에는 TorchDistributor, Horovod 및 spark-tensorflow 배포자 패키지가 포함됩니다.

또한 Azure Databricks는 모듈을 사용하여 Spark ML 모델에 대한 분산 학습을 pyspark.ml.connect 제공합니다. pyspark.ml.connect를 사용하여 Databricks 커넥트 Spark ML 모델 학습을 참조하세요.

참고 항목

Databricks는 노드 간 네트워크 성능이 낮기 때문에 NC 시리즈 VM을 사용하여 다중 노드 분산 학습을 실행하는 것을 권장하지 않습니다. 대신 하나의 다중 GPU 노드를 사용하거나, 가속화된 네트워킹을 지원하는 NCasT4_v3-시리즈와 같은 다양한 GPU VM 크기를 사용합니다.

DeepSpeed 배포자

DeepSpeed 배포자는 TorchDistributor를 기반으로 하며 더 높은 컴퓨팅 능력을 필요로 하지만 메모리 제약 조건으로 제한되는 모델을 사용하는 고객에게 권장되는 솔루션입니다. DeepSpeed는 Microsoft에서 개발한 오픈 소스 라이브러리로, 최적화된 메모리 사용량, 통신 오버헤드 감소 및 고급 파이프라인 병렬 처리를 제공합니다. DeepSpeed 배포자를 통한 분산 학습에 대해 자세히 알아보기

TorchDistributor

TorchDistributor 는 사용자가 Spark 클러스터에서 PyTorch를 사용하여 분산 학습을 수행하는 데 도움이 되는 PySpark의 오픈 소스 모듈이므로 PyTorch 학습 작업을 Spark 작업으로 시작할 수 있습니다. 내부적으로는 작업자 간의 환경 및 통신 채널을 초기화하고 CLI 명령을 torch.distributed.run 사용하여 작업자 노드 간에 분산 학습을 실행합니다. TorchDistributor를 사용한 분산 학습에 대해 자세히 알아봅니다.

spark-tensorflow-distributor

spark-tensorflow-distributor 는 Spark 클러스터에서 TensorFlow를 사용한 분산 학습을 위한 TensorFlow의 오픈 소스 네이티브 패키지입니다. TensorFlow 2를 사용한 분산 학습에 대해 자세히 알아봅니다.

레이

Ray 는 ML 워크플로 및 AI 애플리케이션의 크기를 조정하기 위한 병렬 컴퓨팅 처리를 전문으로 하는 오픈 소스 프레임워크입니다. Azure Databricks에서 Ray 사용을 참조 하세요.

Horovod

Horovod는 TensorFlow, Keras 및 PyTorch를 위한 분산 학습 프레임워크입니다. Azure Databricks는 HorovodRunner 및 horovod.spark 패키지를 사용하여 분산된 딥 러닝 교육을 지원합니다. Keras 또는 PyTorch를 사용하는 Spark ML 파이프라인 애플리케이션에서는 horovod.spark예측 도구 API를 사용할 수 있습니다.

요구 사항

Databricks Runtime ML.

Horovod 사용

다음 문서에서는 Horovod를 사용한 분산 딥 러닝에 대한 일반적인 정보와 HorovodRunner 및 패키지를 사용하는 방법을 보여 주는 예제 Notebook을 horovod.spark 제공합니다.

다른 버전의 Horovod 설치

ML 클러스터에 미리 설치된 버전에서 Horovod를 업그레이드하거나 다운그레이드하려면 다음 단계에 따라 Horovod를 다시 컴파일해야 합니다.

  1. 현재 버전의 Horovod를 제거합니다.
%pip uninstall -y horovod
  1. GPU 가속 클러스터를 사용하는 경우 Horovod를 컴파일하는 데 필요한 CUDA 개발 라이브러리를 설치합니다. 호환성을 보장하려면 패키지 버전을 변경하지 않고 그대로 둡니다.
%sh
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
dpkg -i ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb

apt-get update
apt-get install --allow-downgrades --no-install-recommends -y \
cuda-nvml-dev-11-0=11.0.167-1 \
cuda-nvcc-11-0=11.0.221-1 \
cuda-cudart-dev-11-0=11.0.221-1 \
cuda-libraries-dev-11-0=11.0.3-1 \
libnccl-dev=2.11.4-1+cuda11.5\
libcusparse-dev-11-0=11.1.1.245-1
  1. 원하는 버전의 Horovod 소스 코드를 다운로드하고 적절한 플래그로 컴파일합니다. 확장이 필요하지 않은 경우(예: HOROVOD_WITH_PYTORCH) 해당 플래그를 제거할 수 있습니다.

Cpu

%sh
HOROVOD_VERSION=v0.21.3 # Change as necessary
git clone --recursive https://github.com/horovod/horovod.git --branch ${HOROVOD_VERSION}
cd horovod
rm -rf build/ dist/
HOROVOD_WITH_MPI=1 HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1 \
# For Databricks Runtime 8.4 ML and below, replace with /databricks/conda/envs/databricks-ml/bin/python
sudo /databricks/python3/bin/python setup.py bdist_wheel
readlink -f dist/horovod-*.whl

Gpu

%sh
HOROVOD_VERSION=v0.21.3 # Change as necessary
git clone --recursive https://github.com/horovod/horovod.git --branch ${HOROVOD_VERSION}
cd horovod
rm -rf build/ dist/
HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_CUDA_HOME=/usr/local/cuda HOROVOD_WITH_MPI=1 HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1 \
# For Databricks Runtime 8.4 ML and below, replace with /databricks/conda/envs/databricks-ml-gpu/bin/python
sudo /databricks/python3/bin/python setup.py bdist_wheel
readlink -f dist/horovod-*.whl
  1. 이전 명령의 출력에서 Python 휠 경로를 지정하여 Horovod를 다시 설치하는 데 사용합니다 %pip . 이 예제에는 0.21.3이 나와 있습니다.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Horovod 설치 문제 해결

문제: horovod.{torch|tensorflow}를 가져오면 ImportError: Extension horovod.{torch|tensorflow} has not been built가 발생합니다.

해결 방법: Horovod는 Databricks 런타임 ML에 미리 설치되어 있으므로 이 오류는 일반적으로 환경 업데이트가 잘못되면 발생합니다. 이 오류는 Horovod가 필요한 라이브러리(PyTorch 또는 TensorFlow) 전에 설치되었음을 나타냅니다. Horovod는 설치 horovod.{torch|tensorflow} 중에 컴파일되므로 Horovod 설치 중에 해당 패키지가 없는 경우 컴파일되지 않습니다. 이 문제를 해결하려면 다음 단계를 수행합니다.

  1. Databricks Runtime ML 클러스터에 있는지 확인합니다.
  2. PyTorch 또는 TensorFlow 패키지가 이미 설치되어 있는지 확인합니다.
  3. Horovod(%pip uninstall -y horovod)를 제거합니다.
  4. cmake(%pip install cmake)를 설치합니다.
  5. horovod을 다시 설치합니다.