Hyperopt概念

本文描述了你需要知道的一些概念使用分布式Hyperopt。

的例子說明如何使用Hyperopt磚,明白了與Hyperopt Hyperparameter調優

fmin ()

你使用fmin ()執行Hyperopt運行。的理由fmin ()表中所示;看到Hyperopt文檔為更多的信息。如何使用每個參數的例子,請參閱筆記本電腦的例子

參數名稱

描述

fn

目標函數。Hyperopt調用這個函數的值生成hyperparameter空間提供的參數。這個函數可以返回損失作為標量值或在一個字典Hyperopt文檔詳情)。這個函數通常包含代碼模型訓練和損失計算。

空間

定義了hyperparameter空間搜索。Hyperopt在這個空間是如何定義提供極大的靈活性。你可以選擇一個分類選擇等算法,或概率分布均勻和日誌等數值。

算法

Hyperopt搜索算法用於搜索hyperparameter空間。最常用的是hyperopt.rand.suggest隨機搜索和hyperopt.tpe.suggest為TPE。

max_evals

hyperparameter設置嚐試(模型)的數量。

max_queue_len

許多hyperparameter設置Hyperopt應該提前產生。因為Hyperopt TPE生成算法可以花一些時間,它可以幫助增加這超出的默認值1,但一般不大於SparkTrials設置並行性

試用

一個試用SparkTrials對象。使用SparkTrials當你叫單機算法如scikit-learn目標函數的方法。使用試用當你調用分布式訓練算法如MLlib方法或Horovod目標函數。

early_stop_fn

一個可選的早期停止函數來確定fmin應該停止之前max_evals是達到了。默認是沒有一個。函數的輸入簽名試用* args和輸出簽名bool,* args。布爾的輸出表明是否要停止。* args任何國家,調用的輸出early_stop_fn作為下一次調用的輸入。試用可以是一個SparkTrials對象。當使用SparkTrials,早期停止函數是不能保證每次試驗運行,,而是調查。早期停止函數的例子

SparkTrials

SparkTrials是一個磚開發的API,允許你分發Hyperopt Hyperopt代碼運行不作其他變化。SparkTrials加速單機優化分配試驗引發工人。

請注意

SparkTrials設計為單機並行化計算毫升scikit-learn等模型。為模型創建分布式ML算法如MLlib或Horovod,不要使用SparkTrials。在這種情況下,模型建立過程是自動並行集群,您應該使用默認Hyperopt類試用

本節描述如何配置參數傳遞給SparkTrials和實施方麵的SparkTrials

參數

SparkTrials有兩個可選參數:

  • 並行性並發:最大數量的試驗評估。更多讓你擴展測試更多的hyperparameter設置。基於過去的結果,因為Hyperopt提出新的試驗之間有一個權衡並行性和自適應性。對於一個固定的max_evals,更大的並行加速計算,但降低每次迭代並行性可能會導致更好的結果,因為能夠訪問更多的過去的結果。

    默認值:火花執行人可用的數量。最大:128。如果該值大於所允許的並發任務數集群配置,SparkTrials這個值降低了並行性。

  • 超時:最大的秒數fmin ()可以打電話。當超過這個數字,所有運行和終止fmin ()退出。完成運行保存的信息。

實現

當定義目標函數fn傳遞給fmin (),當選擇一個集群設置,它有助於理解SparkTrials分配調優任務。

Hyperopt,試驗一般對應於擬合模型hyperparameters設置之一。Hyperopt迭代生成試驗,評價,和重複。

SparkTrials,司機的集群節點生成新的試驗,和工人節點評估這些試驗。每個試驗產生火花的工作有一個任務,工人和評估任務的機器。如果您的集群是人均設置運行多個任務,那麼多個試驗可能是評估工作。

SparkTrials和MLflow

磚運行時毫升支持日誌MLflow從工人。你可以添加自定義日誌代碼的目標函數傳遞給Hyperopt。

SparkTrials日誌優化結果嵌套MLflow運行如下:

  • 主要或父運行:調用fmin ()記錄為主要運行。如果有一個活躍的運行,SparkTrials這個活躍日誌運行,不結束運行時fmin ()的回報。如果沒有積極運行,SparkTrials創建一個新的運行時,日誌,並結束之前運行fmin ()的回報。

  • 孩子:每個hyperparameter設置測試記錄(“審判”)作為一個孩子的主要運行下運行。MLflow日誌記錄從工人也存儲在相應的孩子。

當調用fmin (),磚建議積極MLflow運行管理;也就是說,包裝的調用fmin ()在一個mlflow.start_run ():聲明。這將確保每一個fmin ()調用記錄到一個單獨的MLflow主要運行,並使它容易日誌額外的標簽,運行參數或指標。

請注意

當你打電話fmin ()多次在同一活躍MLflow運行,MLflow這些調用相同的主要運行日誌。為記錄參數和標簽解決名稱衝突,MLflow附加一個UUID名稱與衝突。

當伐木工人,您不需要顯式地管理運行的目標函數。調用mlflow.log_param (“param_from_worker”,x)目標函數的日誌給孩子一個參數運行。您可以登錄參數、指標、標簽、目標函數和工件。