Elosztott betanítás

Az Azure Databricks azt javasolja, hogy ha lehetséges, egyetlen gépen tanítsa be a neurális hálózatokat. Ha a betanításhoz és a következtetésekhez elosztott kódot használ, az összetettebb, mint az egygépes kód, és lassabb is a kommunikációhoz kapcsolódó többletterhelés miatt. Akkor azonban érdemes lehet az elosztott betanítást és következtetést használni, ha a modell vagy az adatok túl nagyok ahhoz, hogy egyetlen gép memóriájában elférjenek. Ezekhez a számítási feladatokhoz a Databricks Runtime ML tartalmazza a TorchDistributor, a Horovod és a spark-tensorflow-distributor csomagokat.

Az Azure Databricks elosztott betanítást is kínál a Spark ML-modellekhez a pyspark.ml.connect modullal, lásd: Spark ML-modellek betanítása a Databricks Csatlakozás pyspark.ml.connect használatával.

Feljegyzés

A Databricks nem javasolja többcsomópontos elosztott betanítás futtatását NC-sorozatú virtuális gépek használatával az alacsony csomópontközi hálózati teljesítmény miatt. Ehelyett használjon egy több GPU-csomópontot, vagy használjon más GPU virtuálisgép-méretet, például a NCasT4_v3 sorozatot, amely támogatja a gyorsított hálózatkezelést.

DeepSpeed forgalmazó

A DeepSpeed forgalmazó a TorchDistributorra épül, és ajánlott megoldás olyan ügyfelek számára, akik magasabb számítási teljesítményt igénylő modelleket használnak, de memóriakorlátok korlátozzák őket. A DeepSpeed a Microsoft által kifejlesztett nyílt forráskódú kódtár, amely optimalizált memóriahasználatot, csökkentett kommunikációs terhelést és fejlett folyamat-párhuzamosságot kínál. További információ az elosztott képzésről a DeepSpeed forgalmazójával

TorchDistributor

A TorchDistributor egy nyílt forráskódú modul a PySparkban, amely segít a felhasználóknak elosztott betanítást végezni a PyTorch-tal a Spark-fürtöiken, így Lehetővé teszi a PyTorch-betanítási feladatok Spark-feladatokként való elindítását. A motorháztető alatt inicializálja a környezetet és a kommunikációs csatornákat a feldolgozók között, és a CLI-paranccsal torch.distributed.run elosztott betanítást futtat a feldolgozó csomópontokon. További információ az elosztott betanításról a TorchDistributor használatával.

spark-tensorflow-distributor

A spark-tensorflow-distributor a TensorFlow egy nyílt forráskódú natív csomagja a TensorFlow-val végzett elosztott betanításhoz a Spark-fürtökön. További információ a TensorFlow 2 elosztott betanításáról.

Ray

A Ray egy nyílt forráskódú keretrendszer, amely az ML-munkafolyamatok és AI-alkalmazások skálázására szolgáló párhuzamos számítási feldolgozásra specializálódott. Lásd: A Ray használata az Azure Databricksben.

Horovod

A Horovod egy elosztott betanítási keretrendszer a Tensorflow, a Keras és a PyTorch számára. Az Azure Databricks a HorovodRunner és a horovod.spark csomag használatával támogatja az elosztott mélytanulást. A Keras vagy a PyTorch használatával végzett Spark ML-folyamatalkalmazásokhoz használhatja a horovod.sparkbecslő API-t.

Követelmények

Databricks Runtime ML.

A Horovod használata

Az alábbi cikkek általános információt nyújtanak a Horovod használatával történő elosztott mély tanulásról, továbbá példajegyzetfüzeteket biztosítanak a HorovodRunner és a horovod.spark csomag használatának bemutatásához.

A Horovod másik verziójának telepítése

A Horovodnak az ML-fürt előre telepített verziójáról való frissítéséhez vagy visszalépéséhez az alábbi lépések végrehajtásával újra kell komplikáltania a Horovodot:

  1. Távolítsa el a Horovod aktuális verzióját.
%pip uninstall -y horovod
  1. GPU-gyorsított fürt használata esetén telepítse a Horovod fordításához szükséges CUDA fejlesztői kódtárakat. A kompatibilitás biztosítása érdekében hagyja változatlanul a csomagverziókat.
%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. Töltse le a Horovod forráskódjának kívánt verzióját, és fordítsa le a megfelelő jelzőkkel. Ha nincs szüksége egyik bővítményre sem (például HOROVOD_WITH_PYTORCH), eltávolíthatja ezeket a jelzőket.

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. A %pip Horovod újratelepítéséhez használja a Python-kerék elérési útját az előző parancs kimenetéből. 0.21.3 jelenik meg ebben a példában.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

A Horovod telepítési folyamatának hibaelhárítása

Probléma: Emelések importálása horovod.{torch|tensorflow}ImportError: Extension horovod.{torch|tensorflow} has not been built

Megoldás: A Horovod előre telepítve van a Databricks Runtime ML-ben, ezért ez a hiba általában akkor fordul elő, ha egy környezet frissítése hibás. A hiba azt jelzi, hogy a Horovod egy szükséges kódtár (PyTorch vagy TensorFlow) előtt lett telepítve. Mivel a Horovod fordítása a telepítés során történik, a horovod.{torch|tensorflow} nem lesz lefordítva, ha ezek a csomagok nem állnak rendelkezésre a Horovod telepítésekor. A probléma megoldásához kövesse az alábbi lépéseket:

  1. Ellenőrizze, hogy Databricks Runtime ML-fürtön van-e.
  2. Ellenőrizze, hogy telepítve van-e a PyTorch- vagy a TensorFlow-csomag.
  3. Távolítsa el a Horovodot (%pip uninstall -y horovod).
  4. Telepítse a cmake (%pip install cmake) összetevőt.
  5. Telepítse újra a horovod összetevőt.