Abstract
我們建議訓(xùn)練一個(gè)once-for-all網(wǎng)絡(luò),通過(guò)解耦訓(xùn)練和搜索來(lái)支持多種架構(gòu)設(shè)置,減少成本。無(wú)需附加訓(xùn)練,我們可以通過(guò)從OFA網(wǎng)絡(luò)里選擇來(lái)快速地得到一個(gè)專門的子網(wǎng)絡(luò)。為了對(duì)OFA網(wǎng)絡(luò)進(jìn)行有效的訓(xùn)練,我們還提出了一種新穎的漸進(jìn)式收縮算法、一種廣義的修剪方法。這一切使得我們能夠得到驚人龐大的可選子網(wǎng)絡(luò)群以適應(yīng)不同硬件平臺(tái)和延遲限制。
Introduction
深度神經(jīng)網(wǎng)絡(luò)在許多任務(wù)中效果拔群,然而,模型規(guī)模和計(jì)算消耗的增長(zhǎng)同樣帶來(lái)了許多問(wèn)題,如何有效地將模型部署到適合的硬件平臺(tái)上成為我們需要考慮的問(wèn)題。EX,一個(gè)app store里的應(yīng)用能夠廣泛的支持從N年前的手機(jī)到現(xiàn)在的手機(jī)等一系列設(shè)備,它們的運(yùn)算能力有天壤之別。在不同的硬件資源限制下,神經(jīng)網(wǎng)絡(luò)表現(xiàn)也不盡相同。即使運(yùn)行在相同的設(shè)備上,在不同的電量、不同的性能釋放策略影響下,我們對(duì)于“最佳模型”的理解也相差很大。
給定不同的硬件平臺(tái)和效率的限制,研究者們?cè)O(shè)計(jì)緊湊的模型或者把現(xiàn)有的模型進(jìn)行壓縮是目前比較流行的方法,然而, 設(shè)計(jì)特定結(jié)構(gòu)的DNN模型并非易事,需要有經(jīng)驗(yàn)的工程師靈光一現(xiàn),而使用NAS搜索對(duì)于計(jì)算資源的消耗又讓人無(wú)法忽視。我們觀察到,這些工作在相當(dāng)程度上是在做重復(fù)勞動(dòng):我們總是在重復(fù)著網(wǎng)絡(luò)設(shè)計(jì)和重訓(xùn)練的任務(wù),這也許就是毅種循環(huán)吧。因此,我們想一勞永逸地解決這一問(wèn)題。
這篇paper提出了一種新的思路,設(shè)計(jì)一個(gè)once-for-all的網(wǎng)絡(luò),引入一些配置文件嗎,它可以直接生成一個(gè)自網(wǎng)絡(luò)實(shí)現(xiàn)面向不同平臺(tái)的部署。它能夠靈活地支持不同的深度、寬度、核大小、分辨率,而且,不需要重新訓(xùn)練。特別的,我們把模型訓(xùn)練和NAS這兩個(gè)步驟做了解耦,在模型訓(xùn)練這一步中,專注于提升每一個(gè)子網(wǎng)絡(luò)的ACC,在模型采樣(選擇一個(gè)子模型)時(shí),從所有子網(wǎng)絡(luò)中得到若干個(gè)子網(wǎng)絡(luò)的集合來(lái)訓(xùn)練ACC的性能算子和延遲算子。給定目標(biāo)硬件和約束,通過(guò)算子的引導(dǎo)進(jìn)行NAS。這么一來(lái),整個(gè)工作的復(fù)雜度就從O(N)驟降到O(1)——即,不隨著問(wèn)題復(fù)雜度增長(zhǎng)而增長(zhǎng)。
Method
Problem Formalization
我們把OFA網(wǎng)絡(luò)的權(quán)重稱為,架構(gòu)配置信息叫做
,然后,問(wèn)題就成了這樣:
這里,代表一種選擇方案,它從OFA的權(quán)重里選出一個(gè)子網(wǎng)絡(luò)的配置。訓(xùn)練目標(biāo)時(shí)最小化
,讓每一個(gè)子網(wǎng)絡(luò)都能保持大差不差的性能,就像它們?cè)讵?dú)立地訓(xùn)練一樣。
Architecture Space
我們的OFA網(wǎng)絡(luò)提供了一個(gè)模型,但它支持生成很多子網(wǎng)絡(luò),這些子網(wǎng)絡(luò)的規(guī)模并不相同,覆蓋了四個(gè)重要的維度,即:深度、寬度、核尺寸和分辨率。像是前輩們所作的一樣,我們將CNN網(wǎng)絡(luò)劃分成一系列的單元,它們有著遞減的特征圖尺寸和遞增的通道數(shù)(在編碼過(guò)程中越來(lái)越小但越來(lái)越“厚”的feature map似乎是一種慣例),每個(gè)單元都有一組網(wǎng)絡(luò)層,這些網(wǎng)絡(luò)層中,只有第一個(gè)跨步(stride)為2,其他的為1。
我們?cè)试S每一個(gè)單元包含多種層數(shù)(彈性深度),每一層都允許多種多的通道數(shù)(彈性寬度)和多種尺寸的核(彈性核尺寸),而且,我們還允許CNN模型接受多種尺寸的輸入(彈性分辨率)。例如,在我們的實(shí)驗(yàn)中,輸入圖像尺寸范圍從124-224(跨步為4),可以任選,每一個(gè)單元的網(wǎng)絡(luò)層數(shù)量可以時(shí)2/3/4,每一層的膨脹率可以是3/4/6,核尺寸可以是3/5/7,因此,在5個(gè)單元的網(wǎng)絡(luò)中,多樣性達(dá)到了2*10。如果再考慮到我們可以接收25中不同分辨率的圖像,那可用性就更是無(wú)敵。既然所有的子網(wǎng)絡(luò)分享相同的權(quán)重,我們的參數(shù)量只有7.7M。如果不進(jìn)行權(quán)重分享,那指定沒(méi)有你好果汁吃。
Training the Once-For-All Network
低情商
訓(xùn)練,OFA網(wǎng)絡(luò)可以被理解為一種多目標(biāo)任務(wù),每一個(gè)可用的子網(wǎng)絡(luò)都是一個(gè)優(yōu)化目標(biāo),從這一角度出發(fā),我們直接像優(yōu)化其他多任務(wù)網(wǎng)絡(luò)一樣優(yōu)化OFA網(wǎng)絡(luò)(只不過(guò)優(yōu)化任務(wù)是從網(wǎng)絡(luò)中實(shí)例化出來(lái)的子網(wǎng)絡(luò)決定的),所有的子網(wǎng)絡(luò)進(jìn)行同步的更新,但這一方法效率之低下令人發(fā)指,它的消耗與子網(wǎng)絡(luò)數(shù)量關(guān)系密切,因此,只適用于子網(wǎng)絡(luò)數(shù)量很少的情況。
另一種傻逼方案是從一堆子網(wǎng)絡(luò)中抽出一部分在每一步中進(jìn)行更新,這樣的方法計(jì)算資源的消耗是確實(shí)降低了,但數(shù)量如此之多的子網(wǎng)絡(luò)在進(jìn)行權(quán)重共享,它們之間會(huì)相互干擾,我們觀察到,性能迅速下降。
因此,我們有一個(gè)高情商的idea。
高情商
我們的方案是“漸進(jìn)收縮”,OFA網(wǎng)絡(luò)既然是由若干個(gè)子網(wǎng)絡(luò)組成,而子網(wǎng)絡(luò)之間又有許多嵌套關(guān)系(小網(wǎng)絡(luò)是大網(wǎng)絡(luò)的一部分,這種情況并不少見(jiàn)),為了防止它們相互干擾,我們認(rèn)為在逐步訓(xùn)練的過(guò)程中同時(shí)進(jìn)行從大網(wǎng)絡(luò)到小網(wǎng)絡(luò)的收縮是可行的。這種方案被叫做“漸進(jìn)收縮”。一個(gè)典型的例子是始于最大的網(wǎng)絡(luò)(它有最大的核尺寸,最深的深度,它還最寬),最后,通過(guò)一步一步地將小一些的網(wǎng)絡(luò)添加到采樣空間中,我們逐漸對(duì)網(wǎng)絡(luò)進(jìn)行了調(diào)整,最終,得到的網(wǎng)絡(luò)就小了。具體而言,訓(xùn)練了最大網(wǎng)絡(luò)之后,我們首先提供了對(duì)彈性內(nèi)核的支持,此時(shí)深度、寬度都保持最大,然后是彈性地選擇深度,最后才是寬度。整個(gè)訓(xùn)練過(guò)程中,分辨率都是彈性變化的,這一點(diǎn)通過(guò)每批訓(xùn)練的圖像都有不同的圖像尺寸來(lái)保證。在訓(xùn)練最大網(wǎng)絡(luò)之后,我們也使用了知識(shí)蒸餾方法。使用最大的網(wǎng)絡(luò)提供的軟標(biāo)簽和真實(shí)標(biāo)簽組合進(jìn)行優(yōu)化。
相比于前兩種方案,漸進(jìn)收縮的效果更好。既然最大的網(wǎng)絡(luò)已經(jīng)得到了訓(xùn)練,把它微調(diào)一下(權(quán)重分享)得到一個(gè)小網(wǎng)絡(luò)就不難了。漸進(jìn)收縮也開(kāi)始于訓(xùn)練全模型,但這時(shí)收縮的內(nèi)容不僅包括深寬大,也包括分辨率(?)。額外說(shuō)一點(diǎn),漸進(jìn)收縮對(duì)于大網(wǎng)絡(luò)和小網(wǎng)絡(luò)都進(jìn)行了微調(diào)。結(jié)果就是,可以提供更有力的OFA網(wǎng)絡(luò),適合多種硬件平臺(tái),比起剪枝,更靈活。
Specialized Model Deployment with Once-For-All Network
擁有了一個(gè)OFA網(wǎng)絡(luò)后,我們下一步的任務(wù)就是在給定部署環(huán)境的情況下抽出一個(gè)子網(wǎng)絡(luò)來(lái),這一目標(biāo)的作用是搜索一個(gè)滿足效率要求,精度也說(shuō)得過(guò)去的子網(wǎng)絡(luò)。既然OFA已經(jīng)把模型訓(xùn)練和搜索解耦了,我們?cè)谶@一步所做的一切都不會(huì)造成訓(xùn)練消耗。更進(jìn)一步,我們構(gòu)建了neural-network-twins來(lái)預(yù)測(cè)神經(jīng)網(wǎng)絡(luò)的大致性能和延遲情況,給模型質(zhì)量一個(gè)快速的反饋。通過(guò)將測(cè)得的精度和延遲替換為預(yù)測(cè)精度和延遲,降低成本。
要說(shuō)明一點(diǎn),我們隨機(jī)采樣了16k個(gè)架構(gòu)和輸入尺寸不同的子網(wǎng)絡(luò),然后在10k張圖像中計(jì)量它們的性能,這種[架構(gòu),性能]的組合被用來(lái)訓(xùn)練性能預(yù)測(cè)算子,算子來(lái)預(yù)測(cè)給定模型的大致性能,我們還做了一個(gè)延遲表,用來(lái)比照預(yù)測(cè)大致的延遲。給定平臺(tái)和延遲需求,我們基于這種組合算子的搜索就能選出一個(gè)特定的子網(wǎng)絡(luò)。既然。(我的理解,這里的算子其實(shí)就是以待查表,因此)搜索的消耗幾乎可以忽略不計(jì)。
實(shí)驗(yàn)
實(shí)驗(yàn)細(xì)節(jié)略
提供兩個(gè)原則:
- 內(nèi)存(顯存)是一種昂貴的資源,而計(jì)算本身是廉價(jià)的。一個(gè)有效的CNN應(yīng)該是較少占用內(nèi)存,較多進(jìn)行計(jì)算。這一比例被定義為arithmetic(OPs/Byte)。越高的arithmetic,內(nèi)存占用越少,越容易并行計(jì)算。多虧了OFA的子網(wǎng)絡(luò)多樣性,OFA的算子可以提供一個(gè)性能與延遲之比例的快速反饋,進(jìn)化搜索可以自動(dòng)找到一個(gè)有著較高arithmetic的CNN網(wǎng)絡(luò).
- CNN模型的設(shè)計(jì)應(yīng)該充分考慮到硬件的需求,F(xiàn)PGA設(shè)備有特定的工具包,可能更適合3*3卷積,這么一來(lái),就應(yīng)該只選擇3*3卷積,即使5*5或7*7卷積也在搜索空間中。而且,大核可能帶來(lái)爆內(nèi)存的問(wèn)題,我們無(wú)法接受——而在Intel Xeon CPU的實(shí)驗(yàn)中,超過(guò)一般的操作都選擇了大核。FPGA和GPU都有比CPU更好地并行性,因此模型更寬一點(diǎn)。
Conclusion
我們推出了OFA模型,一種新穎的方法,把訓(xùn)練和搜索相解耦。比起面向平臺(tái)進(jìn)行手工編程,它可以支持不同的架構(gòu)配置,有著可以靈活調(diào)配的深度、寬度、核尺寸核分辨率。有效降低了訓(xùn)練消耗。
與之配套,我們還提出了一種漸進(jìn)收縮的算法來(lái)確保大量子網(wǎng)絡(luò)的性能都能得到同步提升,比起逐個(gè)訓(xùn)練(以及逐個(gè)訓(xùn)練帶來(lái)的問(wèn)題),效果更佳。
OFA提供了一個(gè)自動(dòng)化的完備的系統(tǒng),高人竟在我身邊!