Microsoft NNI 入門 —— Mnist樣例運(yùn)行內(nèi)置Tunner算法

前四種TPE、Random、Anneal、Naive Evolution方法,比較容易,只需要修改config.yml文件,其余方法會在算法介紹中詳細(xì)解釋使用過程中遇到的問題:
NNI提供了幾種最新的Tunner算法,以下是官方github文檔對算法的解釋和實(shí)驗(yàn)結(jié)果截圖+除官方文檔給出的步驟以外的步驟記錄:
1、TPE:是一種sequential model-based optimization(SMBO,即基于序列模型優(yōu)化)的方法。 SMBO 方法根據(jù)歷史指標(biāo)數(shù)據(jù)來按順序構(gòu)造模型,來估算超參的性能,隨后基于此模型來選擇新的超參。

TPE

記得把config.yml設(shè)置參數(shù)gpuNum=1,即可使用GPU計算,否則默認(rèn)是不會使用GPU的。

2、Random:在超參優(yōu)化時,隨機(jī)搜索算法展示了其驚人的簡單和效果。 建議當(dāng)不清楚超參的先驗(yàn)分布時,采用隨機(jī)搜索作為基準(zhǔn)。


Random

3、Anneal:這種簡單的退火算法從先前的采樣開始,會越來越靠近發(fā)現(xiàn)的最佳點(diǎn)取樣。 此算法是隨機(jī)搜索的簡單變體,利用了反應(yīng)曲面的平滑性。 退火率不是自適應(yīng)的。


Anneal

4、Naive Evolution:樸素進(jìn)化算法來自于大規(guī)模圖像分類進(jìn)化。 它會基于搜索空間隨機(jī)生成一個種群。 在每一代中,會選擇較好的結(jié)果,并對其下一代進(jìn)行一些變異(例如,改動一個超參,增加或減少一層)。 進(jìn)化算法需要很多次 Trial 才能有效,但它也非常簡單,也很容易擴(kuò)展新功能。


Naive Evolution

5、SMAC: 基于 Sequential Model-Based Optimization (SMBO,即序列的基于模型優(yōu)化方法)。 它會利用使用過的結(jié)果好的模型(高斯隨機(jī)過程模型),并將隨機(jī)森林引入到 SMBO 中,來處理分類參數(shù)。 SMAC 算法包裝了 Github 的 SMAC3。 注意:SMAC 需要通過 nnictl package 命令來安裝。
分別運(yùn)行一下兩個命令:
conda install gxx_linux-64 gcc_linux-64 swig
nnictl package install --name SMAC
即可成功安裝。

(CentOS(Conda 4.5.4)上提示 ModuleNotFoundError: No module named '_regression' ,可能是之前安裝的包影響了環(huán)境,直接新建了conda的虛擬環(huán)境,重新進(jìn)行安裝。)

SMAC

  • 安裝時候遇到的問題
  1. 使用nnictl package的時候,如果服務(wù)器網(wǎng)速不給力,SMAC很有可能安裝失敗,(如果可以直接使用pip中的smac包就好了)。
  2. SMAC成功安裝以后,其中使用到的一個包SpaceConfig在我使用的conda(conda 5+,清華的源)中沒有找到,因此安裝失敗,運(yùn)行的時候會報錯,使用pip install SpaceConfig手動安裝這個包即可解決。
  3. 運(yùn)行Mnist-annotation中的例子會失敗,config中配置的useAnnotation=true,換成了mnist中的例子即可(查看了ERR覺得是這個元嬰,但是并不確定),并且指定參數(shù)空間(SearchSpace)。
  4. SMAC不可以使用combine_params類型的參數(shù)文件。

TIPS:

  • 使用nnictl experiment show可以查到本次實(shí)驗(yàn)的編號id,可以找到log文件和一些配置文件、運(yùn)行文件的位置,在調(diào)試的時候,非常有效,或者網(wǎng)頁中查看日志文件,位置一般是:/home/XXX/nni/experiments/nptml4D,其中最后一個是隨機(jī)id。
  • nnictl 可以同時運(yùn)行多個實(shí)驗(yàn),只要使用不同的端口,(如果可以把所有的實(shí)驗(yàn)都能用一個網(wǎng)頁顯示,選擇不同id的實(shí)驗(yàn)查看是不是更方便?)nnictl create --config config.yml --port 8081,運(yùn)行時候會生成id,此時需要對相應(yīng)id的時候進(jìn)行操作就需要直接加上id號:nnictl experiment show nptml4D即可。

6、Batch tuner: Batch Tuner 能讓用戶簡單的提供幾組配置(如,超參選項(xiàng)的組合)。 當(dāng)所有配置都執(zhí)行完后,Experiment 即結(jié)束。 Batch Tuner 僅支持 choice 類型。
searchSpacePath中定義搜索空間json文件,
searchSpacePath: search_space.json
注意: useAnnotation和searchSpacePath兩個字段互斥,useAnnotation=True,searchSpacePath 字段必須被刪除。useAnnotation 定義使用標(biāo)記來分析代碼并生成搜索空間。
使用了/mnist/例子中的的配置運(yùn)行,運(yùn)行后發(fā)生錯誤,查看log(experiment中有l(wèi)ogPath),發(fā)現(xiàn)搜索空間的.json文件,必須要用combine_params

logPath

實(shí)驗(yàn)結(jié)果
BatchTuner

7、Grid Search:網(wǎng)格搜索會窮舉定義在搜索空間文件中的所有超參組合。 網(wǎng)格搜索可以使用的類型有 choice, quniform, qloguniform。 quniform 和 qloguniform 中的數(shù)值 q 具有特別的含義(不同于搜索空間文檔中的說明)。 它表示了在最高值與最低值之間采樣的值的數(shù)量。
實(shí)驗(yàn)運(yùn)行時,第一次參數(shù)是uniform類型的,發(fā)現(xiàn)直接改成quniform,需要再加一個q的參數(shù)值,文檔中有對q參數(shù)進(jìn)行說明。
本次實(shí)驗(yàn)直接定義了 choice類型的數(shù)值,

GridSearch

8、Hyperband:Hyperband 試圖用有限的資源來探索盡可能多的組合,并發(fā)現(xiàn)最好的結(jié)果。 它的基本思路是生成大量的配置,并運(yùn)行少量的步驟來找到有可能好的配置,然后繼續(xù)訓(xùn)練找到其中更好的配置。


Hyperband

9、Network Morphism:Network Morphism 提供了深度學(xué)習(xí)模型的自動架構(gòu)搜索功能。 每個子網(wǎng)絡(luò)都繼承于父網(wǎng)絡(luò)的知識和形態(tài),并變換網(wǎng)絡(luò)的不同形態(tài),包括深度,寬度,跨層連接(skip-connection)。 然后使用歷史的架構(gòu)和指標(biāo),來估計子網(wǎng)絡(luò)的值。 最后會選擇最有希望的模型進(jìn)行訓(xùn)練。

Network Morphism

由于計算資源受限,因此目前還沒有跑出完整的結(jié)果,但是可以看到最高的得分0.91,最低的0.88。
安裝過程中,pytorch版本的樣例代碼中,from network_morphism import utils,這樣會報錯,選擇/nni/examples/trials,運(yùn)行代碼即可。后續(xù)文檔希望可以晚上一下~
在運(yùn)行cifar的程序過程中,由于網(wǎng)速太慢,可能會出現(xiàn)Time out的錯誤。
運(yùn)行過程中出現(xiàn)BrokenPipeError: [Errno 32] Broken pipe,由于nni 0.4.1之前的版本有一些錯誤,所以出現(xiàn)錯誤,可以根據(jù)nni中issue解決-->ISSUE。我直接刪除了調(diào)用的包中的相關(guān)語句,或者安裝高版本的nni。
10、Metis Tuner:大多數(shù)調(diào)參工具僅僅預(yù)測最優(yōu)配置,而 Metis 的優(yōu)勢在于有兩個輸出:(a) 最優(yōu)配置的當(dāng)前預(yù)測結(jié)果, 以及 (b) 下一次 Trial 的建議。 它不進(jìn)行隨機(jī)取樣。 大多數(shù)工具假設(shè)訓(xùn)練集沒有噪聲數(shù)據(jù),但 Metis 會知道是否需要對某個超參重新采樣。
Metis Tuner

默認(rèn)配置下沒有找到比較好的配置的結(jié)果。
簡單分析:

算法 最高分?jǐn)?shù) 最低分?jǐn)?shù) >0.80次數(shù) >0.90次數(shù) >0.95次數(shù) 總次數(shù)
TPE 0.9834 0.0958 7 5 3 10
Random 0.9823 0.0982 3 3 2 10
Anneal 0.9837 0.0892 2 2 2 10
Naive Evolution 0.9692 0.0958 2 1 1 10
Batch Tuner 0.9877 0.1135 3 3 2 6
Grid Search 0.988 0.0892 343 274 162 600
SMAC 0.9733 0.098 5 4 1 10
Hyperband 0.9831 0.0958 5 5 4 10

(使用NNI的Mnist-annotation例子分析,不同tuner算法的NNI WebUI的訓(xùn)練結(jié)果界面截圖圖像(以tuner命名),簡單總結(jié)結(jié)果)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容