分布式訓練

如果可能的話,Databricks建議你在一台機器上訓練神經網絡;用於訓練和推斷的分布式代碼比單機代碼更複雜,並且由於通信開銷而更慢。但是,如果您的模型或數據太大,無法容納在一台機器上的內存中,則應該考慮分布式訓練和推斷。對於這些工作負載,Databricks Runtime ML包含Horovod和spark-tensorflow- distribution包。

Horovod

Horovod是TensorFlow、Keras和PyTorch的分布式訓練框架。Databricks支持分布式深度學習訓練,使用HorovodRunner和horovod.spark包中。對於使用Keras或PyTorch的Spark ML管道應用程序,可以使用horovod.spark估計量的API

需求

Databricks運行時ML。

使用Horovod

下麵的文章提供了關於使用Horovod進行分布式深度學習的一般信息,並舉例說明如何使用HorovodRunner和horovod.spark包中。

安裝不同版本的Horovod

要從ML集群中的預安裝版本升級或降級Horovod,必須按照以下步驟重新編譯Horovod:

  1. 卸載當前版本的Horovod。

皮普卸載-yhorovod
  1. 如果使用gpu加速的集群,請安裝編譯Horovod所需的CUDA開發庫。為了保證兼容性,請保持包版本不變。

上海wgethttps//開發人員下載英偉達com/計算/cuda/回購/ubuntu1804/x86_64/cuda-ubuntu1804mvcuda-ubuntu1804//恰當的/首選項d/cuda-存儲庫--600恰當的-關鍵阿德--獲取-https//開發人員下載英偉達com/計算/cuda/回購/ubuntu1804/x86_64/7fa2af80酒吧添加-恰當的-存儲庫"deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"wgethttps//開發人員下載英偉達com/計算/-學習/回購/ubuntu1804/x86_64/英偉達--學習-回購-ubuntu1804_1.0.0-1_amd64黛比dpkg-。/英偉達--學習-回購-ubuntu1804_1.0.0-1_amd64黛比恰當的-得到更新恰當的-得到安裝--允許-降級--沒有-安裝-建議-ycuda-nvml-dev-11-011.0.167-1cuda-學校網站-11-011.0.221-1cuda-cudart-dev-11-011.0.221-1cuda--dev-11-011.0.3-1libnccl-dev2.11.4-1+cuda115libcusparse-dev-11-011.1.1.245-1
  1. 下載所需版本的Horovod源代碼,並使用適當的標記進行編譯。如果您不需要任何擴展(例如HOROVOD_WITH_PYTORCH),你可以移除這些標誌。

%sh HOROVOD_VERSION=v0.21.3 #根據需要更改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 \ #對於Databricks Runtime 8.4 ML及以下,替換為/ Databricks /conda/envs/ Databricks - ML /bin/python sudo / Databricks /python3/bin/python setup.py bdist_wheel readlink -f dist/horovod-*.whl
% sh HOROVOD_VERSION = v0.21.3 #在必要時改變git克隆——遞歸https://github.com/horovod/horovod.git分支$ {HOROVOD_VERSION} cd horovod rm射頻構建/ dist / HOROVOD_GPU_ALLREDUCE = NCCL HOROVOD_CUDA_HOME = / usr /地方/ cuda HOROVOD_WITH_MPI = 1 HOROVOD_WITH_TENSORFLOW = 1 HOROVOD_WITH_PYTORCH = 1 \ #磚運行時的8.4毫升和下麵,替換為/磚/ conda / env / databricks-ml-gpu / bin / python sudo /磚/ python3 / bin / python setup . py bdist_wheel指向- f dist / horovod - * .whl
  1. 使用%皮普通過從上一個命令的輸出中指定車輪路徑來重新安裝Horovod。0.21.3如本例所示。

皮普安裝--沒有-緩存-dir//司機/horovod/經銷/horovod-0.21.3-cp38-cp38-linux_x86_64whl

排除Horovod安裝故障

問題:進口horovod。{火炬| tensorflow}提出了ImportError:擴展horovod。{火炬| tensorflow}

解決方案: Horovod是在Databricks Runtime ML上預安裝的,因此如果更新環境出錯,通常會出現此錯誤。該錯誤指示Horovod安裝在所需的庫(PyTorch或TensorFlow)之前。由於Horovod是在安裝過程中編譯的,horovod。{火炬| tensorflow}如果這些包在安裝Horovod期間不存在,則不會被編譯。要解決這個問題,請遵循以下步驟:

  1. 驗證您是在Databricks Runtime ML集群上。

  2. 確保PyTorch或TensorFlow包已經安裝。

  3. 卸載Horovod (%皮普卸載可能是horovod)。

  4. 安裝cmake%皮普安裝cmake)。

  5. 重新安裝horovod

spark-tensorflow-distributor

spark-tensorflow-distributor是TensorFlow中的一個開源原生包,用於在Spark集群上使用TensorFlow進行分布式訓練。了解更多使用TensorFlow 2進行分布式訓練

TorchDistributor

TorchDistributor是PySpark中的一個開源模塊,它可以幫助用戶在他們的Spark集群上使用PyTorch進行分布式培訓,因此它可以讓你將PyTorch培訓作業作為Spark作業啟動。在底層,它初始化環境和工作者之間的通信通道,並使用CLI命令torch.distributed.run在工作節點上運行分布式訓練。了解更多使用火炬分發器進行分布式培訓