분산 학습
가능한 경우 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를 다시 컴파일해야 합니다.
- 현재 버전의 Horovod를 제거합니다.
%pip uninstall -y horovod
- 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
- 원하는 버전의 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
- 이전 명령의 출력에서 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 설치 중에 해당 패키지가 없는 경우 컴파일되지 않습니다.
이 문제를 해결하려면 다음 단계를 수행합니다.
- Databricks Runtime ML 클러스터에 있는지 확인합니다.
- PyTorch 또는 TensorFlow 패키지가 이미 설치되어 있는지 확인합니다.
- Horovod(
%pip uninstall -y horovod
)를 제거합니다. cmake
(%pip install cmake
)를 설치합니다.horovod
을 다시 설치합니다.