使用MLflow、Apache Spark MLlib和Hyperopt進行超參數調優
2019年6月7日 在數據科學與機器學習
超參數調優是一種常見的技術,用於基於超參數或模型訓練中未學習到的配置來優化機器學習模型。調整這些配置可以極大地提高模型性能。然而,超參數調優在計算上可能是昂貴的,緩慢的,甚至對專家來說也是不直觀的。
Databricks運行時5.4和5.4 ML (Azure|AWS)引入了有助於擴展和簡化超參數調優的新功能。這些特性支持Python中的ML調優,重點是通過Apache Spark實現可伸縮性,並通過MLflow實現自動跟蹤。
MLflow:跟蹤調優工作流
超參數調優會創建複雜的工作流程,包括測試許多超參數設置、生成許多模型以及在ML管道上迭代。為了簡化調優工作流的跟蹤和再現性,我們使用MLflow,一個開源平台,幫助管理完整的機器Beplay体育安卓版本學習生命周期。中了解有關MLflow的更多信息MLflow文檔最近的Spark+AI峰會2019 MLflow會談.
我們的集成鼓勵使用一些最佳實踐來組織運行和跟蹤超參數調優。在高層次上,我們按照以下方式組織運行,匹配調優本身使用的結構:
調優 | MLflow運行 | MLflow日誌 |
超參數調諧算法 | 父母運行 | 元數據,例如numFolds forCrossValidator |
擬合和評估模型,超參數設置#1 | 子運行1 | 超參數#1,評估指標#1 |
用超參數設置#2擬合和評估模型 | 子運行2 | 超參數2,評估指標2 |
... | ... | ... |
如欲了解更多,請觀看有關“MLflow超參數調優的最佳實踐在2019年Spark+AI峰會上。
托管MLflow現在通常可以在Databricks上找到,當MLflow庫安裝在集群上時,我們接下來討論的兩個集成在默認情況下利用托管MLflow。
Apache Spark MLlib + MLflow集成
Apache Spark MLlib用戶經常使用MLlib的內置工具調優超參數CrossValidator
而且TrainValidationSplit
.它們使用網格搜索來嚐試用戶指定的超參數值集;看到關於調優的Spark文檔更多信息。
Databricks Runtime 5.3和5.3 ML及以上版本支持MLlib Python調優的自動MLflow跟蹤。
有了這個功能,PySparkCrossValidator
而且TrainValidationSplit
將自動記錄到MLflow,在層次結構中組織運行,並記錄超參數和評估指標。例如,調用CrossValidator.fit ()
將記錄一個父運行。在這種情況下,CrossValidator
將記錄每個超參數設置的一個子運行,並且每個子運行將包括超參數設置和評估度量。在MLflow UI中比較這些運行有助於可視化調優每個超參數的效果。
https://www.youtube.com/watch?v=DFn3hS-s7OA
在Databricks Runtime 5.3和5.3 ML中,自動跟蹤默認不啟用。若要開啟自動跟蹤,請設置Spark配置spark.databricks.mlflow.trackMLlib.enabled
“真正的”。對於5.4版本,默認情況下啟用了自動跟蹤。
分布式Hyperopt + MLflow集成
Hyperopt是一個流行的開源超參數調優庫,具有強大的社區支持(截至2019年5月,PyPI下載超過600,000次,Github上的星星超過3300顆)。數據科學家使用Hyperopt是因為它的簡單和有效。Hyperopt提供了兩種調優算法:隨機搜索和Parzen Estimators的貝葉斯方法樹,與網格搜索等暴力方法相比,它提供了更高的計算效率。然而,分發Hyperopt以前不能開箱即用,需要手動設置。
在Databricks Runtime 5.4 ML中,我們介紹了一個由Apache Spark驅動的Hyperopt實現。使用新的試用
類SparkTrials
,您可以輕鬆地分發一個Hyperopt運行,而不需要對當前的Hyperopt api做任何更改。你隻需要通過SparkTrials
類時,應用hyperopt.fmin ()
函數(請參閱下麵的示例代碼)。此外,所有調優實驗以及它們的超參數和評估指標都會自動記錄到Databricks中的MLflow中。有了這個特性,我們的目標是提高超參數調優工作流的效率、可伸縮性和簡單性。
#新的SparkTrials類,用於分發調優spark_trials = SparkTrials(並行度=24) < / b >
fmin (fn =火車,#訓練和評估模型的方法空間= search_space,定義超參數的空間算法= tpe.suggest,#搜索算法:Parzen估計樹max_evals =8,#嚐試設置超參數的次數show_progressbar =假,
試驗= < b > spark_trials < / b >)
結果可以使用平行坐標圖等工具可視化。在下麵的圖表中,我們可以看到,具有最佳(最低)損失的深度學習模型是使用中到大批量、小到中學習率和各種動量設置進行訓練的。注意,這個圖是通過手工製作的情節
,但是MLflow將在不久的將來為並行坐標圖提供原生支持。
在Databricks,我們擁抱開源社區和api。我們正在與Hyperopt社區合作,將這個spark驅動的實現貢獻給開源Hyperopt。請繼續關注。
開始吧!
要了解關於超參數調優的更多信息:
- 不要錯過我們即將到來的網絡研討會數據庫上的自動超參數調優、縮放和跟蹤將於6月20日(星期四)進行更深入的研究和現場演示。
- 看看2019年Spark+AI峰會上的這些演講:
- 使用MLflow進行超參數調優的最佳實踐約瑟夫·布拉德利
- 基於MLflow的深度學習高級超參數優化作者:Maneesh Bhide
要了解關於MLflow的更多信息,請查看這些資源:
要開始使用這些特定功能,請查看以下文檔頁及其嵌入式示例筆記本。嚐試使用新的Databricks Runtime 5.4 ML發行版。