Hyperopt概念
本文描述了使用分布式Hyperopt時需要了解的一些概念。
有關如何在Databricks中使用Hyperopt的示例,請參見使用Hyperopt進行超參數調優.
fmin ()
你使用fmin ()
執行Hyperopt運行。關於fmin ()
表中所示;看到Hyperopt文檔更多信息。有關如何使用每個參數的示例,請參見筆記本的例子.
參數名稱 |
描述 |
---|---|
|
目標函數。Hyperopt使用從space參數中提供的超參數空間生成的值調用該函數。此函數可以將損失作為標量值或在字典中返回(參見Hyperopt文檔詳情)。這個函數通常包含用於模型訓練和損失計算的代碼。 |
|
定義要搜索的超參數空間。Hyperopt在如何定義這個空間方麵提供了很大的靈活性。您可以選擇分類選項(如algorithm),或者為數值(如uniform和log)選擇概率分布。 |
|
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
和MLflow
Databricks Runtime ML支持從工作者記錄到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)
在目標函數中記錄一個參數到子運行。您可以在目標函數中記錄參數、度量、標記和工件。