運行不嵌套在Hyperopt啟用SparkTrials時

當啟用SparkTrials Hyperopt, MLflow不是嵌套在父運行運行。

寫的pradeepkumar.palaniswamy

去年發表在:2022年5月16日

問題

SparkTrials的延伸Hyperopt,它允許運行分布式引發工人。

當你開始一個MLflow運行嵌套= True在工人函數,結果應該是嵌套的父母下運行。

有時結果是正確嵌套的父母下運行,即使你跑SparkTrials嵌套= True在工人的功能。

例如:

%的python hyperopt進口fmin, tpe,惠普,試驗,STATUS_OK def火車(params):“”一個例子訓練方法,計算輸入的平方。該方法將被傳遞給“hyperopt.fmin ()”。:param參數:hyperparameters。它的結構是一致的搜索空間是如何定義的。見下文。:返回:dict字段“損失”(標量損失)和“狀態”(成功/失敗運行狀態)與mlflow”“”。start_run (run_name = inner_run,嵌套= True)運行:x =參數返回{“損失”:x * * 2,“狀態”:STATUS_OK}與mlflow.start_run (run_name = outer_run_with_sparktrials): spark_trials_run_id = mlflow.active_run () .info.run_id argmin = fmin (fn =火車,空間= search_space算法=藻類,max_evals = 16,試驗= spark_trials)

預期結果:

從SparkTrials預期的輸出。

實際結果:

從SparkTrials實際產出。

導致

Hyperopt的開源版本不支持所需的功能必須正常巢SparkTrials MLflow磚上運行。

解決方案

磚運行時對機器學習與附加功能包括一個內部叉Hyperopt。如果你想使用SparkTrials,您應該使用磚為機器學習,而不是運行時安裝Hyperopt手動從開源庫。