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.spark
becslő 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.
- HorovodRunner: elosztott mély tanulás a Horovoddal
- HorovodRunner – példák
horovod.spark
: elosztott mély tanulás a Horovoddal
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:
- Távolítsa el a Horovod aktuális verzióját.
%pip uninstall -y horovod
- 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
- 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
- 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:
- Ellenőrizze, hogy Databricks Runtime ML-fürtön van-e.
- Ellenőrizze, hogy telepítve van-e a PyTorch- vagy a TensorFlow-csomag.
- Távolítsa el a Horovodot (
%pip uninstall -y horovod
). - Telepítse a
cmake
(%pip install cmake
) összetevőt. - Telepítse újra a
horovod
összetevőt.