最佳實踐:使用Hyperopt進行超參數調優

最佳實踐

  • 貝葉斯方法可以比網格搜索和隨機搜索更有效。因此,使用超opt樹的Parzen Estimators (TPE)算法,您可以探索更多的超參數和更大的範圍。利用領域知識來限製搜索領域可以優化調優,獲得更好的結果。

  • 當你使用hp.choice (), Hyperopt返回選擇列表的索引。因此,在MLflow中登錄的參數也是索引。使用hyperopt.space_eval ()檢索參數值。

  • 對於長時間訓練的模型,開始使用小數據集和許多超參數進行實驗。使用MLflow來確定性能最好的模型,並確定可以修複哪些超參數。通過這種方式,您可以在準備進行大規模調優時減少參數空間。

  • 利用Hyperopt支持條件維度和超參數。例如,當您評估多種類型的梯度下降時,您可以讓Hyperopt包含條件超參數,而不是將超參數空間限製為普通超參數,這些條件超參數隻適用於其中的一個子集。有關使用條件參數的詳細信息,請參見定義搜索空間

  • 當使用SparkTrials,為隻支持cpu的集群和支持gpu的集群配置適當的並行性。在Databricks中,CPU和GPU集群在每個worker節點上使用不同數量的執行線程。CPU集群在每個節點上使用多個執行線程。GPU集群每個節點隻使用一個執行線程,以避免多個Spark任務在使用同一GPU時發生衝突。雖然這對於為GPU編寫的庫來說通常是最優的,但這意味著GPU集群上的最大並行度會降低,所以在選擇GPU實例類型時,要知道每次試驗可以使用多少個GPU。看到GPU-enabled集群獲取詳細信息。

  • 不要使用SparkTrials在自動定量集群。Hyperopt在開始執行時選擇並行度值。如果集群以後自動伸縮,Hyperopt將無法利用新的集群大小。

故障排除

  • 報告丟失NaN(不是數字)通常意味著傳遞給的目標函數fmin ()返回NaN。這不會影響其他運行,您可以放心地忽略它。為了防止這種結果,可以嚐試調整超參數空間或修改目標函數。

  • 由於Hyperopt算法采用的是隨機搜索算法,因此每次運行的損失並不是單調減少的。然而,這些方法往往比其他方法更快地找到最佳超參數。

  • Hyperopt和Spark都會產生開銷,這些開銷可以支配短期的試驗運行(低幾十秒)的持續時間。您觀察到的加速可能很小,甚至為零。

SparkTrials:不同大小的數據集的最佳實踐

SparkTrials在Spark worker節點上運行試驗。這本筆記本提供了一些指南,教你如何在使用時將不同量級的數據集移動到工作節點SparkTrials

處理不同數量級的數據集筆記本

在新標簽頁中打開筆記本