摘要:本文介紹支付寶中的深度學(xué)習(xí)引擎。因而無(wú)論在運(yùn)行速度和內(nèi)存占用等性能指標(biāo)還是在兼容性上,支付寶的移動(dòng)端都必須做到極致,才能較大幅度地降低使用門(mén)檻。五大目標(biāo)支付寶是針對(duì)國(guó)民環(huán)境定制開(kāi)發(fā)的移動(dòng)端解決方案,項(xiàng)目制定了如下技術(shù)目標(biāo)。
本文介紹支付寶App中的深度學(xué)習(xí)引擎——xNN。xNN通過(guò)模型和計(jì)算框架兩個(gè)方面的優(yōu)化,解決了深度學(xué)習(xí)在移動(dòng)端落地的一系列問(wèn)題。xNN的模型壓縮工具 (xqueeze) 在業(yè)務(wù)模型上實(shí)現(xiàn)了近50倍的壓縮比, 使得在包預(yù)算極為有限的移動(dòng)App中大規(guī)模部署深度學(xué)習(xí)算法成為可能。xNN的計(jì)算性能經(jīng)過(guò)算法和指令兩個(gè)層面的深度優(yōu)化,極大地降低了移動(dòng)端DL的機(jī)型門(mén)檻。 ??
深度學(xué)習(xí)——云端還是移動(dòng)端?
近來(lái),深度學(xué)習(xí)(DL)在圖像識(shí)別、語(yǔ)音識(shí)別、自然語(yǔ)言處理等諸多領(lǐng)域都取得了突破性進(jìn)展。DL通常給人以計(jì)算復(fù)雜、模型龐大的印象——從Siri語(yǔ)音助手到各種聊天機(jī)器人、再到支付寶“掃五福”,移動(dòng)端收集數(shù)據(jù)+云端加工處理似乎成為一種常識(shí)。然而對(duì)很多應(yīng)用來(lái)說(shuō),這種模式其實(shí)只是無(wú)奈之選。
去年春節(jié)的“掃五福”活動(dòng)中,為了識(shí)別手寫(xiě)“福”字,支付寶多媒體團(tuán)隊(duì)調(diào)動(dòng)了近千臺(tái)服務(wù)器用于部署圖像識(shí)別模型??墒侨绱艘?guī)模的集群也沒(méi)能抵擋住全國(guó)人民集五福的萬(wàn)丈熱情。為了防止云端計(jì)算能力超載,活動(dòng)中后期不得不啟動(dòng)了降級(jí)預(yù)案——用計(jì)算量小但精度也較低的傳統(tǒng)視覺(jué)算法替代了DL模型。降級(jí)雖然不妨礙大伙繼續(xù)熱火朝天地收集???,但對(duì)用戶體驗(yàn)無(wú)疑是有一定影響的,比如一些不可言說(shuō)的漢字也被誤判成了“?!弊?。
另一方面,DL在云端則意味著數(shù)據(jù)必須上傳。即使不考慮計(jì)算壓力,從網(wǎng)絡(luò)延時(shí)、流量、隱私保護(hù)等角度也給用戶體驗(yàn)帶來(lái)種種限制。因此,對(duì)相當(dāng)多的應(yīng)用來(lái)說(shuō),DL模型前移到移動(dòng)端部署可以看作是一種剛需。
兩大挑戰(zhàn)
最近,隨著手機(jī)處理器性能的提升和模型輕量化技術(shù)的發(fā)展,移動(dòng)端DL正在變得越來(lái)越可行,并得到了廣泛的關(guān)注。蘋(píng)果和谷歌已經(jīng)分別宣布了各自操作系統(tǒng)上的DL框架Core ML和Tensorflow Lite,這無(wú)疑將極大地促進(jìn)移動(dòng)端DL的發(fā)展。但是,尤其對(duì)于支付寶這樣的國(guó)民App來(lái)說(shuō),仍然存在一些嚴(yán)峻的挑戰(zhàn)是無(wú)法通過(guò)直接套用廠商方案來(lái)解決的。
1. 機(jī)型跨度大:支付寶App擁有數(shù)億受眾群體,在其中落地的業(yè)務(wù)必須對(duì)盡可能多的用戶、盡可能多的機(jī)型提供優(yōu)質(zhì)的體驗(yàn)。對(duì)支付寶來(lái)說(shuō),參考Core ML只將功能開(kāi)放給少數(shù)高端機(jī)型的做法是不合適的。因而無(wú)論在運(yùn)行速度和內(nèi)存占用等性能指標(biāo)、還是在兼容性上,支付寶的移動(dòng)端DL都必須做到極致,才能較大幅度地降低使用門(mén)檻。
2. 包尺寸要求嚴(yán):支付寶App集成了眾多的業(yè)務(wù)功能,安裝包資源非常緊張,一個(gè)新模型要集成進(jìn)安裝包往往意味著需要下線其他的功能。而即便通過(guò)動(dòng)態(tài)下發(fā)的形式進(jìn)行部署,DL模型的大小也會(huì)強(qiáng)烈影響用戶的體驗(yàn)。隨著移動(dòng)端智能化程度的不斷提升,直接在端上運(yùn)行的DL應(yīng)用必然會(huì)越來(lái)越多,這以當(dāng)前單個(gè)模型大小就動(dòng)輒數(shù)十、數(shù)百M(fèi)的尺寸來(lái)看幾乎是不可想象的。同時(shí),移動(dòng)端DL引擎本身的SDK也需要盡可能地瘦身。
五大目標(biāo)
支付寶xNN是針對(duì)國(guó)民App環(huán)境定制開(kāi)發(fā)的移動(dòng)端DL解決方案,項(xiàng)目制定了如下技術(shù)目標(biāo)。
1. 輕模型:通過(guò)高效的模型壓縮算法,在保證算法精度的前提下大幅減小模型尺寸。
2. 小引擎:移動(dòng)端SDK的深度裁減。
3. 快速:結(jié)合指令層和算法層的優(yōu)化,綜合提升DL計(jì)算的效率。
4. 通用:為保證較大的機(jī)型覆蓋率,以更為通用的CPU而非性能更強(qiáng)勁的GPU作為重點(diǎn)優(yōu)化平臺(tái)。不僅支持經(jīng)典的CNN、DNN網(wǎng)絡(luò),也支持RNN、LSTM等網(wǎng)絡(luò)形態(tài)。
5. 易用:工具鏈對(duì)業(yè)務(wù)保持高度友好——使得算法工程師們能更好地專注于算法本身,在不需要成為模型壓縮專家和移動(dòng)端開(kāi)發(fā)專家的情況下都能快速完成云端模型到移動(dòng)端模型的轉(zhuǎn)換和部署。
主要特性一覽
xNN為DL模型提供了從壓縮到部署、再到運(yùn)行時(shí)的統(tǒng)計(jì)監(jiān)控這一全生命周期的解決方案。xNN環(huán)境由開(kāi)發(fā)后臺(tái)和部署前臺(tái)兩部分組成。
開(kāi)發(fā)后臺(tái)以xqueeze工具鏈為核心,支持多種訓(xùn)練框架。業(yè)務(wù)可以使用xqueeze壓縮、優(yōu)化自己的DL模型,得到尺寸大幅減小、運(yùn)行速度顯著加快的模型版本。壓縮后的模型根據(jù)使用場(chǎng)景,可以通過(guò)App安裝包內(nèi)置或按需下發(fā)的形式部署到移動(dòng)端。
在部署前臺(tái),xNN的計(jì)算框架提供高效的前向預(yù)測(cè)能力。xNN的應(yīng)用層在計(jì)算的基礎(chǔ)上還提供了模型下發(fā)、數(shù)據(jù)統(tǒng)計(jì)、錯(cuò)誤上報(bào)等一站式能力。xNN還通過(guò)一個(gè)jsapi提供了直接對(duì)接H5應(yīng)用的能力——通過(guò)DL模型的動(dòng)態(tài)下發(fā)和H5,能夠?qū)崿F(xiàn)完全的動(dòng)態(tài)化,從而在客戶端不發(fā)版的情況下完成算法+邏輯的同時(shí)更新。
上圖給出了xNN的主要特性。在xqueeze模型壓縮的基礎(chǔ)上,xNN還支持通過(guò)快速處理稀疏網(wǎng)絡(luò)來(lái)提高性能。xNN支持了豐富的網(wǎng)絡(luò)結(jié)構(gòu)類型,包括經(jīng)典CNN/DNN、SSD目標(biāo)檢測(cè)和LSTM。xNN的部署框架原生兼容Caffe,業(yè)務(wù)可以在不做轉(zhuǎn)換的情況下直接在移動(dòng)端運(yùn)行已有的Caffe模型,以快速評(píng)估效果。而經(jīng)過(guò)壓縮的私有格式模型更小、更快。在Tensorflow和Keras平臺(tái)上訓(xùn)練的模型也能夠在原有的環(huán)境上進(jìn)行壓縮,然后轉(zhuǎn)換為xNN支持的格式部署到移動(dòng)端。不同于core ML,xNN理論上支持安卓和iOS上的所有機(jī)型。
xqueeze模型壓縮
xNN-xqueeze的模型壓縮流程如下圖之(a)所示,包括神經(jīng)元剪枝 (neuron pruning)、突觸剪枝 (synapse pruning)、量化 (quantization)、網(wǎng)絡(luò)結(jié)構(gòu)變換 (network transform)、自適應(yīng)Huffman編碼 (adaptive Huffman)、共5個(gè)步驟。其中前三步理論上是有損的,而使用xqueeze對(duì)網(wǎng)絡(luò)權(quán)重和壓縮超參進(jìn)行finetune,能夠?qū)⒕鹊南陆当3衷诳煽厣踔量珊雎缘某潭?。后兩步則完全不影響網(wǎng)絡(luò)的輸出精度。整個(gè)流程不僅會(huì)減小模型的尺寸,還通過(guò)網(wǎng)絡(luò)的稀疏化和結(jié)構(gòu)優(yōu)化,顯著提高前向預(yù)測(cè)的速度。
在領(lǐng)域的經(jīng)典方案DeepCompression的基礎(chǔ)上,xqueeze 進(jìn)一步擴(kuò)充了neuronpruning和network transform的能力。其中,neuron pruning能夠逐次裁剪掉“不重要”的神經(jīng)元和與之對(duì)應(yīng)的權(quán)重參數(shù)。通過(guò)neuron pruning和synapse pruning的結(jié)合,在模型精度和壓縮比之間達(dá)成更好的平衡。xqueeze還具有network transform——在網(wǎng)絡(luò)的宏觀層面進(jìn)行優(yōu)化的能力,networktransform腳本掃描整個(gè)網(wǎng)絡(luò),診斷出可優(yōu)化的點(diǎn),包括在有條件的情況下自動(dòng)地進(jìn)行層 (layer) 的組合與等效替換。此外,xqueeze通過(guò)自適應(yīng)地使用Huffman編碼,有效提升不同稀疏程度的模型之壓縮比。
如下圖所示,對(duì)于業(yè)務(wù)分類模型,使用xqueeze工具鏈能夠?qū)崿F(xiàn)45.5倍的壓縮,在同等程度的精度損失下,壓縮率超越經(jīng)典方案達(dá)60%。
xNN計(jì)算性能優(yōu)化
xNN的性能優(yōu)化不局限于底層,而是通過(guò)與xqueeze工具鏈的配合,在算法和指令兩個(gè)層面同步發(fā)力,為更為深入的優(yōu)化創(chuàng)造空間。
如下圖所示,在算法層,xqueeze的剪枝在壓縮模型尺寸的同時(shí),也促進(jìn)了網(wǎng)絡(luò)的稀疏化——即催生出大量的零值權(quán)重。相應(yīng)地,xNN在指令層實(shí)現(xiàn)了稀疏運(yùn)算模塊,在卷積和全連接計(jì)算中,自動(dòng)忽略這些零值權(quán)重,減小計(jì)算開(kāi)銷,提升速度。又如之前已經(jīng)提到的,在xqueeze的network transform階段,會(huì)對(duì)網(wǎng)絡(luò)進(jìn)行宏觀層面的優(yōu)化,包括將相鄰的層進(jìn)行結(jié)果上等效的組合與替換,來(lái)減少計(jì)算的冗余度和提高訪問(wèn)存儲(chǔ)器的效率。要充分發(fā)揮network transform的效能,也離不開(kāi)指令層實(shí)現(xiàn)的支持。
在以SqueezeNet為基礎(chǔ)的業(yè)務(wù)分類模型上,xNN在Qualcomm 820 CPU上能夠輸出29.4 FPS的前向預(yù)測(cè)幀率,在蘋(píng)果A10 CPU (iPhone 7)上的幀率則達(dá)到52.6 FPS,比CPU與GPU并用的Core ML還要更快。
業(yè)務(wù)落地
支付寶App已經(jīng)集成了xNN。在支付寶的“AR掃一掃”入口,90%以上的Android和iOS機(jī)型都在使用xNN來(lái)完成前置物品分類,向用戶推薦“AR掃花識(shí)花”等便利功能。xNN本身的健壯性也經(jīng)受住了“七夕送你一朵花”這樣高強(qiáng)度、廣機(jī)型覆蓋的大型運(yùn)營(yíng)活動(dòng)的考驗(yàn)。該模型的版本在確保精度的前提下,尺寸已壓縮到100KB以下。Android平臺(tái)上,全功能xNN的SDK包增量?jī)H200KB出頭,若根據(jù)特定應(yīng)用做裁剪,將能夠輕松減小到100多KB。
?
xNN上線后,已在螞蟻和阿里內(nèi)部引起了強(qiáng)烈反響,一大波移動(dòng)端DL應(yīng)用正在基于xNN緊張開(kāi)發(fā)中,并在未來(lái)的幾個(gè)月中逐步提供給用戶使用。歡迎加入本站公開(kāi)興趣群
商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/4645.html
閱讀 2260·2021-11-18 10:02
閱讀 3353·2021-11-11 16:55
閱讀 2757·2021-09-14 18:02
閱讀 2520·2021-09-04 16:41
閱讀 2213·2021-09-04 16:40
閱讀 1346·2019-08-30 15:56
閱讀 2283·2019-08-30 15:54
閱讀 3226·2019-08-30 14:15