Hyperopt概念
本文描述了使用分布式Hyperopt時需要了解的一些概念。
有關如何在Databricks中使用Hyperopt的示例,請參見使用Hyperopt進行超參數調優.
fmin ()
你使用fmin ()
來執行Hyperopt運行。的論點fmin ()
表中所示;看到Hyperopt文檔獲取更多信息。有關如何使用每個參數的示例,請參見筆記本的例子.
參數名稱 |
描述 |
---|---|
|
目標函數。Hyperopt使用space參數中提供的超形參空間生成的值調用此函數。此函數可以以標量值或在字典中返回損失值(請參閱Hyperopt文檔詳情)。此函數通常包含用於模型訓練和損失計算的代碼。 |
|
定義要搜索的超參數空間。Hyperopt在如何定義這個空間方麵提供了很大的靈活性。您可以選擇一個分類選項,如算法,或數值的概率分布,如均勻和對數。 |
|
Hyperopt搜索算法用於搜索超參數空間。最常用的有 |
|
要嚐試的超參數設置數量(擬合的模型數量)。 |
|
Hyperopt提前生成的超參數設置個數。由於Hyperopt TPE生成算法可能需要一些時間,因此將該值增加到默認值1之外會有所幫助,但通常不大於 |
|
一個 |
|
一個可選的早期停止函數來確定是否 |
的SparkTrials
類
SparkTrials
是由Databricks開發的API,它允許您在不更改Hyperopt代碼的情況下分發Hyperopt運行。SparkTrials
通過將試驗分發給Spark工人來加速單機調試。
請注意
SparkTrials
設計用於並行計算單機ML模型,如scikit-learn。對於使用分布式ML算法(如MLlib或Horovod)創建的模型,不要使用SparkTrials
.在這種情況下,模型構建過程在集群上自動並行化,您應該使用默認的Hyperopt類試用
.
本節描述如何配置傳遞給的參數SparkTrials
以及執行方麵SparkTrials
.
參數
SparkTrials
接受兩個可選參數:
並行性
:可同時評估的最大試驗數。更高的數值可以讓您擴展測試更多的超參數設置。因為Hyperopt基於過去的結果提出了新的試驗,所以在並行性和適應性之間需要權衡。對於固定的max_evals
,更高的並行度可以加快計算速度,但較低的並行度可能會導致更好的結果,因為每次迭代都可以訪問更多的過去結果。默認值:可用的Spark executor數量。最大:128。如果該值大於集群配置允許的並發任務數,
SparkTrials
減少對該值的並行性。超時
:最大秒數fmin ()
電話可以接聽。當超過這個數字時,所有運行都將終止fmin ()
退出。關於已完成運行的信息將被保存。
SparkTrials
和MLflow
Databricks Runtime ML支持從worker記錄到MLflow。您可以在傳遞給Hyperopt的目標函數中添加自定義日誌記錄代碼。
SparkTrials
在嵌套MLflow運行時記錄調優結果,如下所示:
主運行或父運行:對
fmin ()
記錄為主運行。如果有主動運行,SparkTrials
記錄到此活動運行,並且不會在時結束運行fmin ()
的回報。如果沒有活動運行,SparkTrials
創建一個新的運行,記錄到它,並在之前結束運行fmin ()
的回報。子運行:測試的每個超參數設置(一個“試驗”)被記錄為主運行下的子運行。來自工作者的MLflow日誌記錄也存儲在相應的子運行下。
當調用fmin ()
, Databricks推薦主動MLflow運行管理;即,將呼叫轉到fmin ()
在一個與mlflow.start_run ():
聲明。這就確保了fmin ()
調用被記錄到單獨的MLflow主運行中,並使記錄額外的標記、參數或指標更容易。
請注意
當你打電話時fmin ()
在同一個活動MLflow運行中,MLflow會多次將這些調用記錄到同一個主運行中。為了解決已記錄參數和標記的名稱衝突,MLflow將UUID附加到有衝突的名稱上。
當從工作者記錄日誌時,您不需要顯式地管理目標函數中的運行。調用mlflow.log_param(“param_from_worker”,x)
在目標函數中記錄參數到子運行。您可以在目標函數中記錄參數、度量、標記和工件。