跳到主要內容
工程的博客

使用MLflow、Apache Spark MLlib和Hyperopt進行超參數調優

分享這篇文章

超參數調優是一種常見的技術,用於基於超參數或模型訓練中未學習到的配置來優化機器學習模型。調整這些配置可以極大地提高模型性能。然而,超參數調優在計算上可能是昂貴的,緩慢的,甚至對專家來說也是不直觀的。

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版本,默認情況下啟用了自動跟蹤。

查看文檔(AWS|Azure)開始!

分布式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中。有了這個特性,我們的目標是提高超參數調優工作流的效率、可伸縮性和簡單性。

查看文檔(Azure|AWS)開始!

#新的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。請繼續關注。

開始吧!

要了解關於超參數調優的更多信息:

要了解關於MLflow的更多信息,請查看這些資源:

要開始使用這些特定功能,請查看以下文檔頁及其嵌入式示例筆記本。嚐試使用新的Databricks Runtime 5.4 ML發行版。

  • 對於MLlib用例,請查看MLlib +自動化MLflow跟蹤文檔(AWS|Azure).
  • 對於單機Python ML用例(例如,scikit-learn,單機TensorFlow),請查看分布式Hyperopt +自動化MLflow跟蹤文檔(Azure|AWS).
  • 對於非mllib分布式ML用例(例如,HorovodRunner),請查看MLflow的例子在Hyperopt和其他工具中添加跟蹤。
免費試用Databricks

相關的帖子

看到所有數據科學與機器學習的帖子
Baidu
map