분산 학습

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

참고

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

Horovod

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

요구 사항

Databricks Runtime ML.

Horovod 사용

다음 문서에서는 Horovod와 함께 배포된 딥 러닝에 대한 일반적인 정보와 HorovodRunner 및 horovod.spark 패키지의 사용 방법을 보여주는 예시 Notebook을 제공합니다.

다른 버전의 Horovod 설치

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

  1. 현재 버전의 Horovod를 제거합니다.
%pip uninstall -y horovod
  1. Databricks Runtime 9.1 LTS ML 이상에서 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. %pip을 사용하여 이전 명령의 출력에서 휠 경로를 지정하여 Horovod를 다시 설치합니다. 이 예제에는 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 Runtime ML에 사전 설치되어 있으므로 일반적으로 환경을 업데이트하지 못할 경우 이 오류가 발생합니다. 이 오류는 필수 라이브러리(PyTorch 또는 TensorFlow) 앞에 Horovod가 설치되었음을 나타냅니다. Horovod는 설치 중에 컴파일되기 때문에 Horovod 설치 중에 해당 패키지가 없으면 horovod.{torch|tensorflow}가 컴파일되지 않습니다. 이 문제를 해결하려면 다음 단계를 수행합니다.

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

spark-tensorflow-distributor

spark-tensorflow-distributor는 Spark 클러스터에서 TensorFlow를 사용하는 분산 학습을 위한 TensorFlow의 오픈 소스 네이티브 패키지입니다.