深度學習在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,您可以在筆記本、集群和作業級別定製您的開發環境。
使用notebook-scoped Python庫或notebook-scoped R庫在不影響其他集群用戶的情況下使用特定的庫集或版本。
在集群級別安裝庫將團隊或項目的版本標準化。
建立一個數據集工作確保重複的任務在一個一致的、不變的環境中運行。
使用集群政策
您可以創建集群政策來指導數據科學家做出正確的選擇,例如使用單節點集群進行開發,使用自動伸縮集群進行大型任務。
加載數據的最佳實踐
雲數據存儲通常沒有針對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 / Keras和PyTorch閃電.舉例筆記本,請看從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跨集群擴展批處理和流推斷。
當您從Databricks記錄模型時,MLflow會自動提供推斷代碼將該模型應用為熊貓UDF.
您還可以進一步優化推理管道,特別是對於大型深度學習模型。看到參考解決方案的圖像ETL了一個例子。
在線服務
低延遲服務的最佳選擇是REST API背後的在線服務。磚提供磚模型服務在線推理。
MLflow提供api用於部署到各種托管服務以進行在線推理,以及用於創建Docker容器的api用於定製服務解決方案。