當在Hyperopt中啟用SparkTrials時,運行不是嵌套的

問題

SparkTrials是Hyperopt這使得運行可以分配給Spark的工作人員。

當您開始運行MLflow時嵌套= True在工作者函數中,結果應該嵌套在父運行下。

有時結果是正確嵌套在父運行下,即使你運行SparkTrials與嵌套= True在工作者函數中。

例如:

hyperopt進口fmin山丘惠普試用STATUS_OKdef火車參數個數):"""一個計算輸入平方的示例訓練方法。這個方法將被傳遞給' hyperopt.fmin() '。: param參數:hyperparameters。它的結構與搜索空間的定義一致。見下文。:return: dict帶有字段'loss'(標量丟失)和'status'(運行的成功/失敗狀態)"""mlflowstart_runrun_name“inner_run”嵌套的真正的作為運行x參數個數返回“損失”x**2“狀態”STATUS_OKmlflowstart_runrun_name“outer_run_with_sparktrials”):spark_trials_run_idmlflowactive_run()信息run_idargminfminfn火車空間search_space算法算法max_evals16試用spark_trials

預期結果:

SparkTrials的預期輸出

實際結果:

SparkTrials的實際輸出

導致

Hyperopt的開源版本不支持正確嵌套SparkTrials MLflow在Databricks上運行所需的特性。

解決方案

Databricks機器學習運行時包括一個內部分支的Hyperopt附加功能。如果你想使用SparkTrials,你應該使用Databricks運行時進行機器學習,而不是從開源存儲庫手動安裝Hyperopt。