在Python擴展Hyperopt調整機器學習模型
2019年10月29日 在工程的博客
試Hyperopt筆記本複製下麵的步驟,看我們的按需網絡研討會要學習更多的知識。
Hyperopt是最受歡迎的開源庫調優在Python中機器學習模型。我們興奮地宣布Hyperopt 0.2.1支持分布式優化通過Apache火花。新SparkTrials類允許您擴展hyperparameter優化跨集群火花,導致更快的優化和更好的模型。SparkTrials是由約瑟夫•布拉德利韓愈崔,魏晨Xu Lu Wang和張亮(磚),與馬克斯Pumperla合作(為)。
Hyperopt是什麼?
Hyperopt是一個開源hyperparameter調優庫編寫的Python。每個月有445000 + PyPI下載和3800 +明星在Github截至2019年10月,它有很強的采用和社區的支持。數據科學家,Hyperopt提供了一個通用的API搜索hyperparameters和模型類型。Hyperopt提供了兩種優化算法:隨機搜索和Parzen樹估計的貝葉斯方法。
對於開發人員來說,Hyperopt提供可插入算法和計算後端api。我們利用這個插件編寫一個新的計算後台由Apache火花。
擴展出Hyperopt火花
的新類SparkTrials,你可以告訴Hyperopt火花集群分發一個調優工作。原本在磚,這一點API hyperparameter調優使得許多磚客戶分配計算複雜的優化工作,這已經導致了開源Hbeplay体育app下载地址yperopt項目可用的最新版本。
Hyperparameter調優和模型選擇通常涉及訓練成百上千的模型。SparkTrials批這些訓練任務並行運行,一個在每個火花執行人,允許大規模擴展調優。使用SparkTrialsHyperopt,簡單地通過SparkTrials反對Hyperoptfmin ()功能:
從hyperopt進口SparkTrials
best_hyperparameters = fmin (fn=training_function,空間=search_space,算法=hyperopt。山丘,max_evals= 64,試用=SparkTrials())
對於一個完整的示例代碼,請查看Hyperopt文檔SparkTrials。
在引擎蓋下,fmin ()將會產生新的hyperparameter設置測試和通過他們嗎SparkTrials。下圖顯示了SparkTrials集群上運行這些任務異步:(a) Hyperopt火花驅動程序上運行的主要邏輯,計算新的hyperparameter設置。(B)當一個工人已經準備好一個新任務,Hyperopt開始一個單一任務引發工作hyperparameter設置。(C)在這一任務,運行在一個火花執行人,用戶代碼將執行培訓和評估一個新的ML模式。(D)完成後,火花任務將返回結果,包括司機。使用這些新結果Hyperopt計算更好的hyperparameter設置未來的任務。
自SparkTrials適合和評估每個模型在一個火花工人,它僅限於調優單機毫升模型和工作流,如scikit-learn或單機TensorFlow。為分布式ML算法例如Apache火花MLlib或Horovod,您可以使用Hyperopt的違約試驗類。
在實踐中使用SparkTrials
SparkTrials需要2關鍵參數:並行性(最大數量的平行試驗運行,違約引發執行人的數量)超時(最長時間秒fmin是允許的,沒有違約)。超時預算提供了一個機製,允許上限調優可以花多長時間。
的並行性參數可以設置結合max_evals參數對於fmin ()使用下圖中描述的準則。Hyperopt將測試max_evals總hyperparameters設置,批量的大小並行性。如果並行性=max_evals,然後Hyperopt隨機搜索:它將選擇所有hyperparameter設置並行獨立測試和評估。如果並行性= 1,然後Hyperopt可以充分利用自適應迭代算法像Parzen樹估計探索hyperparameter空間:每個新hyperparameter設置測試將選擇基於以前的結果。設置並行性在1和max_evals允許你權衡可伸縮性(獲取結果更快)和適應性(有時得到更好的模型)。不錯的選擇往往是在中間,如√max_evals)。
為了說明優化的好處,我們跑HyperoptSparkTrials在MNIST從我們最近的數據集使用PyTorch工作流網絡研討會。培訓我們的工作流程基本深度學習模型來預測手寫的數字,我們調整三個參數:批量大小,學習速率和動量。這是運行在一個磚集群與p2 AWS。超大工人和磚運行時5.5毫升。
在下麵的圖中,我們固定max_evals到128年,各種工人的數量。正如預期的那樣,更多的工人(大並行性)允許更快的運行時,與線性擴展。
然後我們固定超時在4分鍾和多樣的工人的數量,數試驗重複這個實驗。下麵的圖顯示了損失(負對數似然,“180”=“0.180”)和工人的數量;藍色的點個人試驗,紅線是黃土曲線顯示的趨勢。一般來說,模型性能提高我們使用更大並行性因為這可以讓我們更hyperparameter測試設置。注意,由於Hyperopt使用行為在不同試驗隨機化搜索。
開始使用Hyperopt 0.2.1
SparkTrials現在可用在Hyperopt 0.2.1(可用嗎PyPi項目頁麵),在磚運行時對機器學習(5.4及以後)。
想要了解更多關於Hyperopt看看示例和演示,看看:
- 文檔的Github的項目。io頁麵,包括一個完整的代碼示例
Hyperopt也可以結合MLflow跟蹤實驗和模型。了解更多關於這個集成開源MLflow例子在我們的Hyperparameter優化博客和網絡研討會。
你可以通過Github參與項目頁麵:
- 開源的問題報告Github問題頁麵
- 導致Hyperopt上Github