2018年11月03日20:38 來(lái)源:移動(dòng)通信網(wǎng)T|T
【移動(dòng)通信網(wǎng)】11月1日,騰訊AILab在南京舉辦的騰訊全球合作伙伴論壇上宣布正式開(kāi)源“PocketFlow”項(xiàng)目,該項(xiàng)目是一個(gè)自動(dòng)化深度學(xué)習(xí)模型壓縮與加速框架,整合多種模型壓縮與加速算法并利用強(qiáng)化學(xué)習(xí)自動(dòng)搜索合適壓縮參數(shù),解決傳統(tǒng)深度學(xué)習(xí)模型由于模型體積太大,計(jì)算資源消耗高而難以在移動(dòng)設(shè)備上部署的痛點(diǎn),同時(shí)極大程度的降低了模型壓縮的技術(shù)門(mén)檻,賦能移動(dòng)端AI應(yīng)用開(kāi)發(fā)。
這是一款適用于各個(gè)專業(yè)能力層面開(kāi)發(fā)者的模型壓縮框架,基于Tensorflow開(kāi)發(fā),集成了當(dāng)前主流與AILab自研的多個(gè)模型壓縮與訓(xùn)練算法,并采用超參數(shù)優(yōu)化組件實(shí)現(xiàn)了全程自動(dòng)化托管式的模型壓縮。開(kāi)發(fā)者無(wú)需了解具體模型壓縮算法細(xì)節(jié),即可快速地將AI技術(shù)部署到移動(dòng)端產(chǎn)品上,實(shí)現(xiàn)用戶數(shù)據(jù)的本地高效處理。
目前該框架在騰訊內(nèi)部已對(duì)多個(gè)移動(dòng)端AI應(yīng)用模型進(jìn)行壓縮和加速,并取得了令人滿意的效果,對(duì)應(yīng)用整體的上線效果起到了非常重要的作用。
隨著移動(dòng)互聯(lián)網(wǎng)的普及和AI算法的愈加成熟,移動(dòng)端AI的需求和應(yīng)用場(chǎng)景也愈加豐富,如智能美顏,瘦身,手勢(shì)識(shí)別,場(chǎng)景識(shí)別,游戲AI,視頻檢測(cè),車(chē)載語(yǔ)音交互,智能家居,實(shí)時(shí)翻譯等。將模型部署在移動(dòng)端代替服務(wù)器端可以實(shí)現(xiàn)實(shí)時(shí)交互,在無(wú)網(wǎng)絡(luò)環(huán)境的情況下也可正常運(yùn)行,并且保護(hù)了數(shù)據(jù)的隱私和安全性,降低運(yùn)維成本。而在移動(dòng)端AI模型部署方面,小而快變成了模型推理最渴望的要求之一,因?yàn)樾〉哪P涂梢允沟谜麄(gè)應(yīng)用的存儲(chǔ)空間減;而提高模型的推理速度則可以使得整個(gè)模型應(yīng)用場(chǎng)景的反應(yīng)速度加快,同時(shí)也可以在低配設(shè)備上取得很好的效果。因此,模型的推理速度逐漸已經(jīng)成為了各大AI應(yīng)用市場(chǎng)競(jìng)爭(zhēng)力上最重要的評(píng)測(cè)指標(biāo)之一。然而往往訓(xùn)練出來(lái)的模型推理速度或者尺寸大小不能滿足需求,大部分開(kāi)發(fā)者對(duì)極致的模型壓縮和加速方法又感到困惑。
PocketFlow的出現(xiàn)就是為了解決這個(gè)令眾多AI應(yīng)用開(kāi)發(fā)者頭痛的問(wèn)題。
框架開(kāi)源內(nèi)容
PocketFlow框架本次開(kāi)源內(nèi)容主要由兩部分組件構(gòu)成,分別是模型壓縮/加速算法部分和超參數(shù)優(yōu)化部分,具體結(jié)構(gòu)如下圖所示:
模型壓縮/加速算法部分包括多種深度學(xué)習(xí)模型壓縮和加速算法:
通道剪枝(channelpruning):在CNN網(wǎng)絡(luò)中,通過(guò)對(duì)特征圖中的通道維度進(jìn)行剪枝,可以同時(shí)降低模型大小和計(jì)算復(fù)雜度,并且壓縮后的模型可以直接基于現(xiàn)有的深度學(xué)習(xí)框架進(jìn)行部署。PocketFlow還支持通道剪枝的分組finetune/retrain功能,通過(guò)實(shí)驗(yàn)我們發(fā)現(xiàn)此方法可以使原本壓縮后的模型精度有明顯的提升。
權(quán)重稀疏化(weightsparsification):通過(guò)對(duì)網(wǎng)絡(luò)權(quán)重引入稀疏性約束,可以大幅度降低網(wǎng)絡(luò)權(quán)重中的非零元素個(gè)數(shù);壓縮后模型的網(wǎng)絡(luò)權(quán)重可以以稀疏矩陣的形式進(jìn)行存儲(chǔ)和傳輸,從而實(shí)現(xiàn)模型壓縮。
權(quán)重量化(weightquantization):通過(guò)對(duì)網(wǎng)絡(luò)權(quán)重引入量化約束,可以降低用于表示每個(gè)網(wǎng)絡(luò)權(quán)重所需的比特?cái)?shù);我們同時(shí)提供了對(duì)于均勻和非均勻兩大類(lèi)量化算法的支持,可以充分利用ARM和FPGA等設(shè)備的硬件優(yōu)化,以提升移動(dòng)端的計(jì)算效率,并為未來(lái)的神經(jīng)網(wǎng)絡(luò)芯片設(shè)計(jì)提供軟件支持。
網(wǎng)絡(luò)蒸餾(networkdistillation):對(duì)于上述各種模型壓縮組件,通過(guò)將未壓縮的原始模型的輸出作為額外的監(jiān)督信息,指導(dǎo)壓縮后模型的訓(xùn)練,在壓縮/加速倍數(shù)不變的前提下均可以獲得0.5%-2.0%不等的精度提升。
多GPU訓(xùn)練(multi-GPUtraining):深度學(xué)習(xí)模型訓(xùn)練過(guò)程對(duì)計(jì)算資源要求較高,單個(gè)GPU難以在短時(shí)間內(nèi)完成模型訓(xùn)練,因此我們提供了對(duì)于多機(jī)多卡分布式訓(xùn)練的全面支持,以加快使用者的開(kāi)發(fā)流程。無(wú)論是基于ImageNet數(shù)據(jù)的Resnet-50圖像分類(lèi)模型還是基于WMT14數(shù)據(jù)的Transformer機(jī)器翻譯模型,均可以在一個(gè)小時(shí)內(nèi)訓(xùn)練完畢。
超參數(shù)優(yōu)化(hyper-parameteroptimization)部分可以通過(guò)強(qiáng)化學(xué)習(xí)或者AutoML,在整體壓縮率一定的情況下,搜索出每一層最合適的壓縮比例使得整體的精度最高。多數(shù)開(kāi)發(fā)者對(duì)模型壓縮算法往往了解較少,調(diào)節(jié)壓縮算法參數(shù)需要長(zhǎng)期的學(xué)習(xí)和實(shí)驗(yàn)才能有所經(jīng)驗(yàn),但超參數(shù)取值對(duì)最終結(jié)果往往有著巨大的影。PocketFlow的超參數(shù)優(yōu)化部分正是幫助開(kāi)發(fā)者解決了這一大痛點(diǎn),并且通過(guò)實(shí)驗(yàn)我們發(fā)現(xiàn),其優(yōu)化結(jié)果也要好于專業(yè)的模型壓縮工程師手工調(diào)參的結(jié)果。其結(jié)構(gòu)如下圖:
PocketFlow性能
通過(guò)引入超參數(shù)優(yōu)化組件,不僅避免了高門(mén)檻、繁瑣的人工調(diào)參工作,同時(shí)也使得PocketFlow在各個(gè)壓縮算法上全面超過(guò)了人工調(diào)參的效果。以圖像分類(lèi)任務(wù)為例,在CIFAR-10和ImageNet等數(shù)據(jù)集上,PocketFlow對(duì)ResNet和MobileNet等多種CNN網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行有效的模型壓縮與加速。
在CIFAR-10數(shù)據(jù)集上,PocketFlow以ResNet-56作為基準(zhǔn)模型進(jìn)行通道剪枝,并加入了超參數(shù)優(yōu)化和網(wǎng)絡(luò)蒸餾等訓(xùn)練策略,實(shí)現(xiàn)了2.5倍加速下分類(lèi)精度損失0.4%,3.3倍加速下精度損失0.7%,且顯著優(yōu)于未壓縮的ResNet-44模型;在ImageNet數(shù)據(jù)集上,PocketFlow可以對(duì)原本已經(jīng)十分精簡(jiǎn)的MobileNet模型繼續(xù)進(jìn)行權(quán)重稀疏化,以更小的模型尺寸取得相似的分類(lèi)精度;與Inception-V1、ResNet-18等模型相比,模型大小僅為后者的約20~40%,但分類(lèi)精度基本一致(甚至更高)。
相比于費(fèi)時(shí)費(fèi)力的人工調(diào)參,PocketFlow框架中的AutoML自動(dòng)超參數(shù)優(yōu)化組件僅需10余次迭代就能達(dá)到與人工調(diào)參類(lèi)似的性能,在經(jīng)過(guò)100次迭代后搜索得到的超參數(shù)組合可以降低約0.6%的精度損失;通過(guò)使用超參數(shù)優(yōu)化組件自動(dòng)地確定網(wǎng)絡(luò)中各層權(quán)重的量化比特?cái)?shù),PocketFlow在對(duì)用于ImageNet圖像分類(lèi)任務(wù)的MobileNet-v1模型進(jìn)行壓縮時(shí),取得了一致性的性能提升;用PocketFlow平均量化比特?cái)?shù)為8時(shí),準(zhǔn)確率不降反升,從量化前的70.89%提升到量化后的71.29%。
PocketFlow落地助力內(nèi)部移動(dòng)應(yīng)用AI落地
在騰訊公司內(nèi)部,PocketFlow框架正在為多項(xiàng)移動(dòng)端業(yè)務(wù)提供模型壓縮與加速的技術(shù)支持。例如,在手機(jī)拍照APP中,人臉關(guān)鍵點(diǎn)定位模型是一個(gè)常用的預(yù)處理模塊,通過(guò)對(duì)臉部的百余個(gè)特征點(diǎn)(如眼角、鼻尖等)進(jìn)行識(shí)別與定位,可以為后續(xù)的人臉識(shí)別、智能美顏等多個(gè)應(yīng)用提供必要的特征數(shù)據(jù)。我們基于PocketFlow框架,對(duì)人臉關(guān)鍵點(diǎn)定位模型進(jìn)行壓縮,在保持定位精度不變的同時(shí),大幅度地降低了計(jì)算開(kāi)銷(xiāo),在本身已經(jīng)十分精簡(jiǎn)的網(wǎng)絡(luò)上取得了1.3~2倍不等的加速效果,壓縮后的模型已經(jīng)在實(shí)際產(chǎn)品中得到部署。
在人體體態(tài)識(shí)別項(xiàng)目中,PocketFlow更是在滿足上線精度的要求下,使得模型推理速度有3倍以上的加速,為項(xiàng)目的移動(dòng)端落地起到了決定性的作用。