NNI (Neural Network Intelligence) 是自動(dòng)機(jī)器學(xué)習(xí)(AutoML)的工具包蔬啡。 它通過(guò)多種調(diào)優(yōu)的算法來(lái)搜索最好的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和(或)超參星爪,并支持單機(jī)、本地多機(jī)近零、云等不同的運(yùn)行環(huán)境诺核。NNI也是非常友好的開源工具,用戶可以方便地拓展自己的搜索算法久信。
知乎的官方介紹如下:
如何看待微軟最新發(fā)布的AutoML平臺(tái)NNI窖杀?
特點(diǎn)
作為微軟亞洲研究院為研究人員和算法工程師量身定制的自動(dòng)機(jī)器學(xué)習(xí)工具, NNI 通過(guò)前沿的算法裙士、自動(dòng)化的框架和高效的分布式配置入客,可以節(jié)省訓(xùn)練時(shí)間與人力成本,賦能超參調(diào)優(yōu)(Hyperparameter Optimization)腿椎、神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(Neural Architecture Search)桌硫、特征工程(Feature Engineering)和模型壓縮(Model Compression)等各個(gè)機(jī)器學(xué)習(xí)生命周期,具有易于使用、可擴(kuò)展、靈活和高效的特點(diǎn):
易于使用:NNI 可通過(guò) pip 安裝;只需要添加幾行代碼际长,就可以利用 NNI 來(lái)調(diào)優(yōu)參數(shù)搓彻;支持使用簡(jiǎn)單的命令行工具或 Web 界面來(lái)查看實(shí)驗(yàn)(Experiment)稀轨,并擁有大量示例和詳細(xì)的中英文檔肚吏。
可擴(kuò)展:調(diào)優(yōu)超參或網(wǎng)絡(luò)結(jié)構(gòu)通常需要大量的計(jì)算資源斋泄,NNI 支持多種計(jì)算資源卒废,如遠(yuǎn)程服務(wù)器組参袱、訓(xùn)練平臺(tái)(包括OpenPAI环壤,Kubernetes)等,可并行運(yùn)行數(shù)百個(gè) Trial辛友,適用于具有不同能力的培訓(xùn)平臺(tái)九默。
靈活性:除內(nèi)置的算法外,NNI 還能輕松集成自定義的超參調(diào)優(yōu)算法、神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索算法邑飒、提前終止算法等。此外扮惦,NNI 還可以連接到更多訓(xùn)練平臺(tái)上豫领,如云中的虛擬機(jī)集群备蚓、Kubernetes 服務(wù)扎即,或外部環(huán)境中的特殊應(yīng)用和模型上知市。
高效性:在系統(tǒng)及算法級(jí)別上媳叨,NNI 始終在加速改進(jìn) ,以提高調(diào)優(yōu)效率泌神。例如:NNI 支持通過(guò)早期反饋來(lái)加速調(diào)優(yōu)過(guò)程墙杯。
支持“探索性訓(xùn)練”框架 Retiarii
深度學(xué)習(xí)框架(Deep Learning Framework)是目前研究人員開發(fā)深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network)的主要工具,對(duì)深度神經(jīng)網(wǎng)絡(luò)的成功應(yīng)用和快速發(fā)展有重要的促進(jìn)作用嫌褪。設(shè)計(jì)深度學(xué)習(xí)網(wǎng)絡(luò)是一個(gè)“探索性訓(xùn)練”(Exploratory-Training)的過(guò)程琅拌,通常以構(gòu)建一個(gè)基礎(chǔ)網(wǎng)絡(luò)(Base Graph)為出發(fā)點(diǎn)進(jìn)行訓(xùn)練即彪,根據(jù)訓(xùn)練情況的反饋深胳,對(duì)該神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)進(jìn)行調(diào)整,然后通過(guò)一系列反復(fù)訓(xùn)練、調(diào)整煮纵,最終找到符合要求的神經(jīng)網(wǎng)絡(luò)采幌。
訓(xùn)練過(guò)程中,研究人員往往需要探索一類神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)震桶,而不是單個(gè)具體的神經(jīng)網(wǎng)絡(luò)休傍。目前的深度學(xué)習(xí)框架,如 TensorFlow 和 PyTorch蹲姐,僅支持開發(fā)單個(gè)神經(jīng)網(wǎng)絡(luò)磨取,但這只是探索性訓(xùn)練過(guò)程中的一步而已。另一方面柴墩,現(xiàn)有自動(dòng)機(jī)器學(xué)習(xí)的方案如神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索或超參數(shù)優(yōu)化忙厌,缺乏可編程性和模塊化,這使得一種 NAS(神經(jīng)結(jié)構(gòu)搜索)/HPO (超參數(shù)優(yōu)化)解決方案通常只能應(yīng)用在某一類神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)上江咳。此外逢净,在探索性訓(xùn)練過(guò)程中,很多神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)是相似的歼指,但現(xiàn)有深度神經(jīng)網(wǎng)絡(luò)開發(fā)工具卻沒(méi)有系統(tǒng)性地利用相似性加速探索過(guò)程爹土。
Retiarii 能夠幫助用戶靈活、自由地表示各種搜索空間踩身、重用前沿搜索算法胀茵,并利用系統(tǒng)級(jí)優(yōu)化加速搜索過(guò)程。目前惰赋,Retiarii 已經(jīng)正式集成在 NNI 2.0 中宰掉。
Retiarii 創(chuàng)新性地將神經(jīng)網(wǎng)絡(luò)的開發(fā)看成一系列網(wǎng)絡(luò)模型的“變形”(Mutation),這一系列變形組成了在網(wǎng)絡(luò)空間(Model Space)內(nèi)的搜索過(guò)程赁濒。Retiarii 提出將“變形器”(Mutator)作為基本編程范式,神經(jīng)網(wǎng)絡(luò)開發(fā)人員可以利用“變形器”對(duì)基礎(chǔ)網(wǎng)絡(luò)進(jìn)行編程變形孟害,如增加或刪除某個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)拒炎。在每次變形時(shí),“變形器”通過(guò)選擇(choose())接口將網(wǎng)絡(luò)變形的選擇權(quán)交給“探索策略”(Exploration Strategy)挨务,甚至可以實(shí)時(shí)地交給開發(fā)者本人击你。由此玉组,整個(gè)探索性訓(xùn)練將一系列的“變形器”作用于一個(gè)基礎(chǔ)網(wǎng)絡(luò)上,并交由探索策略來(lái)驅(qū)動(dòng)整個(gè)探索過(guò)程丁侄。
實(shí)驗(yàn)結(jié)果表明惯雳,Retiarii 通過(guò)單個(gè)變形器的抽象將 DNN 模型空間、探索策略和跨模型優(yōu)化完美地分離開來(lái)鸿摇,能夠簡(jiǎn)化編程過(guò)程石景,重用各個(gè)組件,極大地改善整個(gè)探索性訓(xùn)練過(guò)程的效率拙吉,在實(shí)驗(yàn)中達(dá)到了8.58倍的搜索加速潮孽。
使用 Retiarii 框架并不需要學(xué)習(xí)一門全新的框架語(yǔ)言,只需要對(duì)原始 TensorFlow 或 PyTorch 代碼進(jìn)行細(xì)小的改動(dòng)筷黔。對(duì) NNI 的“老粉”來(lái)說(shuō)往史,Retiarii 也將是一種全新的體驗(yàn):搜索空間直接定義在用戶模型代碼中,實(shí)驗(yàn)直接由 Python 啟動(dòng)佛舱,NAS 和 HPO 候選項(xiàng)的支持也更為友好…… NNI 目前正在將原始的 NAS 框架遷移到 Retiarii 框架椎例,在此,推薦大家嘗試新的框架并幫助 NNI 進(jìn)行改進(jìn)请祖。
Retiarii 使用示例
想要了解更多 Retiarii 的詳細(xì)信息粟矿,請(qǐng)點(diǎn)擊:
? 文檔鏈接:https://nni.readthedocs.io/en/latest/NAS/retiarii/retiarii_index.html
? 論文鏈接:https://www.usenix.org/conference/osdi20/presentation/zhang-quanlu
基于掩碼的模型壓縮加速工具
隨著更多層和節(jié)點(diǎn)大型神經(jīng)網(wǎng)絡(luò)的使用,降低模型的存儲(chǔ)和計(jì)算成本變得至關(guān)重要损拢。NNI 的模型壓縮工具包能夠有效解決此問(wèn)題陌粹。該工具包提供了最先進(jìn)的模型壓縮算法和策略,可以在不顯著損失模型性能的條件下壓縮并加速模型福压。
模型壓縮技術(shù)可以分為兩類:剪枝和量化掏秩。NNI 內(nèi)置了豐富的剪枝算法,它們通常使用權(quán)重掩碼來(lái)模擬實(shí)際的剪枝荆姆,然而掩碼雖然可以用來(lái)檢驗(yàn)壓縮模型的性能(如精度)蒙幻,但并沒(méi)有真正加速模型,而加速模型才是剪枝算法的最終目標(biāo)胆筒。為此邮破,NNI 從1.4版本開始就提供了通用的、基于掩碼的模型加速工具仆救,以減少推理延遲和模型大小抒和,并在1.7版本和1.8版本中持續(xù)改進(jìn)和更新。
NNI 的模型壓縮加速工具目前支持粗粒度剪枝算法彤蔽。該工具利用稀疏的掩碼將待剪枝模塊更換為壓縮后的模塊摧莽。更換模塊后,權(quán)重或輸入輸出張量的形狀常常會(huì)被改變顿痪,所以此工具還具備形狀推理功能镊辕,以檢查其他未修剪的層由于形狀變化是否需要被替換油够。加速后的模型有著較低的時(shí)延,Resnet18 的實(shí)驗(yàn)效果如下:
欲了解更多關(guān)于基于掩碼的模型壓縮加速工具的信息征懈,請(qǐng)點(diǎn)擊鏈接:
https://nni.readthedocs.io/en/latest/Compression/ModelSpeedup.html
支持通過(guò) Python 發(fā)起實(shí)驗(yàn)(預(yù)覽功能)
在 NNI 1.0 版本中石咬,使用 NNI 發(fā)起實(shí)驗(yàn)需要四個(gè)步驟:編寫 JSON 格式的搜索空間文件、修改 Trial 代碼獲取超參卖哎、定義 YAML 格式的配置文件鬼悠、使用交互式命令 nnictl 啟動(dòng)實(shí)驗(yàn)。對(duì)于 Trial 的管理棉饶,交互式的命令是非常自然合理的厦章,但只能利用日志進(jìn)行調(diào)試,過(guò)程相對(duì)繁瑣照藻。
在 2.0 版本中袜啃,NNI 提供了一種全新的、更為靈活的啟動(dòng)模式幸缕,用戶可以直接在 Python 文件中定義搜索空間群发、配置和發(fā)起實(shí)驗(yàn)。開發(fā)者可以直接在代碼里初始化調(diào)參器(tuner)對(duì)象发乔,tuner 處于當(dāng)前進(jìn)程熟妓,更加易于 debug 和做一些“魔改”。
目前利用 Python 啟動(dòng)實(shí)驗(yàn)的功能尚處于 Alpha 階段栏尚,暫不支持?jǐn)帱c(diǎn)和交互式執(zhí)行起愈。NNI 團(tuán)隊(duì)將會(huì)在以后的版本中改進(jìn)這個(gè)功能,并提供更多 API 來(lái)編程式地操控實(shí)驗(yàn)译仗,以收集實(shí)驗(yàn)結(jié)果并基于實(shí)驗(yàn)結(jié)果進(jìn)行更加高階的分析抬虽,也希望廣大 NNI 粉絲們?cè)?GitHub 提出寶貴的意見和建議,共同將該功能做的更實(shí)用纵菌。
欲了解更多該功能的相關(guān)信息阐污,請(qǐng)點(diǎn)擊鏈接:
https://nni.readthedocs.io/en/latest/Tutorial/HowToLaunchFromPython.html
支持多種算力的混合訓(xùn)練
自動(dòng)機(jī)器學(xué)習(xí)屬于計(jì)算密集型工作,發(fā)現(xiàn)最佳的超參數(shù)/挖掘最優(yōu)的神經(jīng)網(wǎng)絡(luò)架構(gòu)往往會(huì)消耗大量算力資源與時(shí)間咱圆。為了節(jié)約時(shí)間笛辟,研究人員總希望自己擁有的各種設(shè)備能夠“齊心協(xié)力”。在 2.0 版本中序苏,NNI 提供了混合訓(xùn)練模式(Hybrid Mode)手幢,支持同一個(gè)實(shí)驗(yàn)(Experiment) 在不同訓(xùn)練平臺(tái)上并行運(yùn)行,以實(shí)現(xiàn)資源利用效率最大化杠览。例如弯菊,以前的實(shí)驗(yàn)只能單獨(dú)使用遠(yuǎn)程機(jī)器或者 AML,現(xiàn)在則可以同時(shí)使用兩個(gè)訓(xùn)練平臺(tái)踱阿。
需要注意的是管钳,NNI 混合訓(xùn)練模式目前只支持本地、遠(yuǎn)程软舌、AML 和 PAI 四種訓(xùn)練平臺(tái)的混合訓(xùn)練才漆。此外,在發(fā)起實(shí)驗(yàn)之前佛点,需要開啟訓(xùn)練平臺(tái)并配置對(duì)應(yīng)的環(huán)境醇滥。
更多關(guān)于混合訓(xùn)練模式的詳細(xì)信息,請(qǐng)點(diǎn)擊鏈接:
https://nni.readthedocs.io/en/latest/TrainingService/HybridMode.html
新增對(duì)全部實(shí)驗(yàn)的統(tǒng)一管理界面
為了更加友好地可視化實(shí)驗(yàn)結(jié)果超营、方便快捷地操控和管理實(shí)驗(yàn)鸳玩,除了命令行工具 nnictl 之外,NNI 還提供了簡(jiǎn)單易用的 Web 界面演闭,使得用戶能夠直接查看實(shí)驗(yàn)的狀態(tài)不跟、更改實(shí)驗(yàn)的配置,對(duì)實(shí)驗(yàn)結(jié)果做更高級(jí)的分析米碰。
在2.0 版本中窝革,NNI 新增了實(shí)驗(yàn)管理頁(yè),所有運(yùn)行過(guò)(包括運(yùn)行中吕座、運(yùn)行完成虐译、已停止?fàn)顟B(tài))的實(shí)驗(yàn)都會(huì)在此頁(yè)面上展示,并通過(guò)點(diǎn)擊實(shí)驗(yàn) ID 可以輕松切換到任意一個(gè)未停止實(shí)驗(yàn)的詳情頁(yè)吴趴,這無(wú)疑為用戶查看歷史實(shí)驗(yàn)信息和管理所有實(shí)驗(yàn)提供了一個(gè)新的窗口漆诽,實(shí)驗(yàn)之間的切換也更加快速便捷。
NNI 實(shí)驗(yàn)管理界面示例
更多相關(guān)信息锣枝,請(qǐng)點(diǎn)擊:
https://nni.readthedocs.io/en/latest/Tutorial/WebUI.html
簡(jiǎn)化自定義算法的安裝
NNI 內(nèi)置了豐富的前沿 Tuner厢拭、Advisor 和 Assessor,可以直接應(yīng)用于超參數(shù)優(yōu)化中惊橱。同時(shí)蚪腐,為了滿足不同場(chǎng)景下的需求,NNI 允許自定義 Tuner税朴、Advisor 和 Assessor回季,并通過(guò)簡(jiǎn)單易用的接口將其安裝注冊(cè)為內(nèi)置算法。
在 NNI 2.0中正林,自定義算法的安裝進(jìn)一步得到了簡(jiǎn)化泡一。通過(guò)運(yùn)行簡(jiǎn)單的命令用戶可以將自定義的算法打包成 whl 文件,其他用戶則可以通過(guò) pip install 安裝算法觅廓,并通過(guò) nnictl algo register 將其注冊(cè)到 NNI 中鼻忠,就可以用與 NNI 內(nèi)置算法相同的方式使用自定義的算法了。這使得自定義算法在不同用戶之間的分享和傳播變得更加輕松杈绸、容易帖蔓。通過(guò)提供一個(gè)強(qiáng)大完備的系統(tǒng)矮瘟,NNI 希望幫助研究人員專注于 Tuner、Advisor 和 Assessor 算法研發(fā)塑娇,推動(dòng)各類想法方案應(yīng)用的落地澈侠。
關(guān)于簡(jiǎn)化自定義算法安裝方面的更多信息,請(qǐng)點(diǎn)擊鏈接:
https://nni.readthedocs.io/en/latest/Tutorial/InstallCustomizedAlgos.html
降低人工智能門檻埋酬,加速深度學(xué)習(xí)普及化是微軟一直追求的目標(biāo)哨啃。NNI 內(nèi)置的前沿自動(dòng)機(jī)器學(xué)習(xí)(AutoML)算法,能夠幫助用戶在沒(méi)有專業(yè)機(jī)器學(xué)習(xí)專家指導(dǎo)的情況下写妥,獲得高質(zhì)量的模型拳球,著重解決了一系列支持 AutoML 的系統(tǒng)問(wèn)題,并通過(guò)開放的方式有效加速算法研究者在這一領(lǐng)域的創(chuàng)新珍特。未來(lái)祝峻,NNI 將會(huì)以更強(qiáng)的自動(dòng)化框架、更豐富的算法次坡、更高效的分布式調(diào)參效率幫助研究人員和算法工程師們呼猪,以更靈活的方式從海量數(shù)據(jù)中洞察未來(lái)的人工智能世界。
兼容性
Linux Ubuntu 16.04 或更高版本
MacOS 10.14.1
Windows 10.1809
安裝
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple nni
為了更好地理解NNI的工作流程砸琅,首先需要認(rèn)識(shí)幾個(gè)概念:
Trial:Trial 是一次嘗試宋距,它會(huì)使用某組配置(例如,一組超參值症脂,或者特定的神經(jīng)網(wǎng)絡(luò)架構(gòu))來(lái)進(jìn)行訓(xùn)練谚赎,并返回該配置下的得分。本質(zhì)上就是加入了NNI_API的用戶的原始代碼诱篷。
Experiment:實(shí)驗(yàn)是一次找到模型的最佳超參組合壶唤,或最好的神經(jīng)網(wǎng)絡(luò)架構(gòu)的任務(wù)。 它由Trial和自動(dòng)機(jī)器學(xué)習(xí)算法所組成棕所。
Searchspace:搜索空間是模型調(diào)優(yōu)的范圍闸盔。 例如,超參的取值范圍琳省。
Configuration:配置是來(lái)自搜索空間的一個(gè)參數(shù)實(shí)例迎吵,每個(gè)超參都會(huì)有一個(gè)特定的值。
Tuner:Tuner是一個(gè)自動(dòng)機(jī)器學(xué)習(xí)算法针贬,會(huì)為下一個(gè)Trial生成新的配置击费。新的 Trial 會(huì)使用這組配置來(lái)運(yùn)行。
Assessor:Assessor分析Trial的中間結(jié)果(例如桦他,測(cè)試數(shù)據(jù)集上定期的精度)蔫巩,來(lái)確定 Trial 是否應(yīng)該被提前終止。
Training Platform:訓(xùn)練平臺(tái)是Trial的執(zhí)行環(huán)境。根據(jù)Experiment的配置圆仔,可以是本機(jī)垃瞧,遠(yuǎn)程服務(wù)器組,或其它大規(guī)模訓(xùn)練平臺(tái)(例如荧缘,OpenPAI皆警,Bitahub)拦宣。
那么你的實(shí)驗(yàn)(Experiment)便是在一定的搜索空間(Searchspace)內(nèi)尋找最優(yōu)的一組超參數(shù)(Configuration)截粗,使得該組參數(shù)對(duì)應(yīng)的Mnist(Trail)有最大的準(zhǔn)確率,在有限的時(shí)間和資源限制下鸵隧,Tuner和Assessor幫助你更快更好的找到這組參數(shù)绸罗。
工作流程&快速上手
為了理解NNI的工作流程,我們不妨來(lái)訓(xùn)練一個(gè)Mnist手寫體識(shí)別豆瘫,網(wǎng)絡(luò)結(jié)構(gòu)確定之后珊蟀,NNI可以來(lái)幫你找到最優(yōu)的超參。一個(gè)樸素的想法是:在有限的時(shí)間內(nèi)外驱,NNI測(cè)試一定量的超參育灸,返回給你最優(yōu)的參數(shù)組合。