深度學習在Databricks上的最佳實踐

Databricks機器學習提供了預構建的深度學習基礎設施與Databricks機器學習運行時。用於機器學習的Databricks Runtime包括最常見的深度學習庫,如TensorFlow、PyTorch和Keras,以及支持庫,如Petastorm、Hyperopt和Horovod。它還內置了預先配置的GPU支持,包括驅動程序和支持庫。

Databricks Runtime ML還包括Databricks工作區的所有功能,如集群創建和管理、庫和環境管理、使用Databricks Repos進行代碼管理、自動化支持(包括Databricks作業和api)以及用於模型開發跟蹤、模型部署和服務的集成MLflow。

使用Databricks,您可以使用任何庫來創建邏輯來訓練您的模型。預配置的Databricks運行時可以輕鬆擴展常見的機器學習和深度學習步驟。本文包括深度學習的技巧和內置工具和庫的信息,旨在優化深度學習工作負載,如:

資源及環境管理

Databricks幫助您定製您的深度學習環境,並保持環境在用戶之間的一致性。

定製開發環境

使用Databricks Runtime,您可以在筆記本、集群和作業級別定製您的開發環境。

使用集群政策

您可以創建集群政策來指導數據科學家做出正確的選擇,例如使用單節點集群進行開發,使用自動伸縮集群進行大型任務。

加載數據的最佳實踐

雲數據存儲通常沒有針對I/O進行優化,這對於需要大型數據集的深度學習模型來說是一個挑戰。Databricks Runtime ML包括三角洲湖而且Petastorm為深度學習應用優化數據吞吐量。

Databricks推薦使用Delta Lake表進行數據存儲。Delta Lake簡化了ETL,使您能夠高效地訪問數據。特別是對於圖像,Delta Lake有助於優化訓練和推斷的攝入。的圖像應用的參考解決方案提供了一個使用Delta Lake優化ETL圖像的示例。

Petastorm提供了一些api,可以讓你準備parquet格式的數據,供TensorFlow、Keras或PyTorch使用。SparkConverter API提供Spark DataFrame集成。peastorm還提供了用於分布式處理的數據分片。看到使用Petastorm加載數據獲取詳細信息。

訓練深度學習模型的最佳實踐

Databricks建議使用機器學習運行時而且MLflow跟蹤而且autologging適合所有模特訓練。

從單節點集群開始

一個單獨的節點(司機)GPU集群對於深度學習模型的開發來說,通常是最快和最經濟的。一個帶有4個GPU的節點對於深度學習訓練來說可能比4個帶有1個GPU的工作節點更快。這是因為分布式培訓會增加網絡通信開銷。

在快速迭代開發期間,以及在中小型數據上訓練模型時,Single Node集群是一個很好的選擇。如果您的數據集足夠大,使得在一台機器上的訓練變慢,那麼可以考慮遷移到多gpu甚至分布式計算。

使用TensorBoard和Ganglia來監控訓練過程

TensorBoard是預安裝在Databricks Runtime ML.你可以在一個筆記本或在一個單獨的標簽中使用它。看到TensorBoard獲取詳細信息。

Ganglia在所有Databricks運行時中都可用。您可以使用它來檢查網絡、處理器和內存使用情況,以檢查瓶頸。看到Ganglia指標獲取詳細信息。

優化深度學習性能

您可以,而且應該在Databricks上使用深度學習性能優化技術。

早期停止

早期停止監視在驗證集上計算的指標的值,並在指標停止改進時停止訓練。這是一種比猜測要完成的多個時代更好的方法。每個深度學習庫都提供了一個原生API用於早期停止;例如,請參見earlystop回調apiTensorFlow / KerasPyTorch閃電.舉例筆記本,請看從Databricks中的TensorFlow Keras開始

批量大小調整

批量調優有助於優化GPU利用率。如果批處理大小過小,計算將無法充分利用GPU的能力。您可以使用Ganglia指標查看GPU指標信息。

結合學習速率調整批大小。一個很好的經驗法則是,當批大小增加n時,學習率增加√(n)。手動調優時,請嚐試將批大小更改為原來的2或0.5倍。然後繼續調優以優化性能,可以手動調優,也可以使用類似的自動化工具測試各種超參數Hyperopt

轉移學習

在遷移學習中,您從之前訓練過的模型開始,並根據應用程序的需要對其進行修改。遷移學習可以顯著減少訓練和調整新模型所需的時間。看到遷移學習的特征化查看更多信息和示例。

轉向分布式培訓

Databricks Runtime ML包括HorovodRunner、spark-tensorflow-distributor,以及Hyperopt,以促進從單節點到分布式培訓的轉變。

HorovodRunner

Horovod是一個開源項目,可以將深度學習訓練擴展到多gpu或分布式計算。HorovodRunner由Databricks構建,包含在Databricks Runtime ML中,是一個提供Spark兼容性的Horovod包裝器。該API允許您以最小的更改擴展單節點代碼。HorovodRunner使用TensorFlow、Keras和PyTorch。

spark-tensorflow-distributor

spark-tensorflow-distributor是一個開源的TensorFlow原生包,用於在Spark集群上使用TensorFlow進行分布式培訓。看到例如筆記本電腦

Hyperopt

Hyperopt為機器學習提供自適應超參數調整。使用SparkTrials類,您可以在集群中並行地迭代調優深度學習模型的參數。

推理的最佳實踐

本節包含關於使用模型進行數據ricks推理的一般提示。

  • 為了最小化成本,可以同時考慮cpu和經過推理優化的gpu,比如Amazon EC2 G4和G5實例。沒有明確的建議,因為最佳選擇取決於模型大小、數據維度和其他變量。

  • 使用MLflow簡化部署和模型服務。MLflow可以記錄任何深度學習模型,包括自定義的預處理和後處理邏輯。在MLflow模型注冊可以部署為批處理、流處理或在線推理。

批處理和流推理

批處理和流式評分支持高吞吐量,低成本評分,延遲低至分鍾。有關更多信息,請參見離線(批)預測

  • 如果希望多次訪問數據進行推斷,請考慮在運行推斷作業之前創建一個預處理作業,將數據ETL到Delta Lake表中。通過這種方式,攝取和準備數據的成本分攤到多次讀取數據的過程中。將預處理與推斷分離還允許為每個作業選擇不同的硬件,以優化成本和性能。例如,您可能使用cpu進行ETL,使用gpu進行推斷。

  • 使用火花熊貓udf跨集群擴展批處理和流推斷。

在線服務

低延遲服務的最佳選擇是REST API背後的在線服務。磚提供磚模型服務在線推理。

MLflow提供api用於部署到各種托管服務以進行在線推理,以及用於創建Docker容器的api用於定製服務解決方案。

你也可以使用SageMaker服務。看到例如筆記本電腦MLflow文檔