国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

小米MACE開源項(xiàng)目實(shí)踐與思考

2019-06-20 21:49:44何亮亮
軟件和集成電路 2019年4期
關(guān)鍵詞:開發(fā)者開源算子

何亮亮

人工神經(jīng)網(wǎng)絡(luò),作為人工智能與機(jī)器學(xué)習(xí)的一個(gè)重要分支,最早可以追溯到19世紀(jì)40年代。人工神經(jīng)網(wǎng)絡(luò)的歷史,在過去的幾十年中,經(jīng)歷了起起伏伏。

直到2006年,隨著深度學(xué)習(xí)這一概念的提出,人工神經(jīng)網(wǎng)絡(luò)的研究再次進(jìn)入了活躍期,并且引領(lǐng)了這一波人工智能的理論研究和創(chuàng)業(yè)熱潮。這一波深度學(xué)習(xí)的高速發(fā)展,除了諸如殘差網(wǎng)絡(luò)、Drouout等新的理論的提出,更多的是依靠大數(shù)據(jù)和工程上的推動。

首先,互聯(lián)網(wǎng)的發(fā)展、ImageNet等數(shù)據(jù)集以及眾包平臺的建立,為深度學(xué)習(xí)提供了必需的數(shù)據(jù)。其次,支持通用并行計(jì)算的高性能GPU使得深層網(wǎng)絡(luò)的訓(xùn)練成為可能。最后,也是更重要的,是深度學(xué)習(xí)框架的推出和成熟。

回想一下,在10多年前深度學(xué)習(xí)復(fù)興之前,計(jì)算機(jī)視覺、自然語言處理等領(lǐng)域的研究人員,要么采用現(xiàn)成的工具,受限于僅能調(diào)整少部分元參數(shù),往往只是通過變換特征提取等方式進(jìn)行創(chuàng)新,要么為了驗(yàn)證全新的模型,需要重新造輪子,編寫冗長的C++或者M(jìn)atlab代碼,研究效率極其低下,這兩者無疑給新理論的創(chuàng)新帶來了巨大的阻礙。

而現(xiàn)在,隨著Theano、Caffe、Torch、TensorFlow等眾多的深度學(xué)習(xí)框架的推出,算法研究人員,能夠通過編寫簡單的腳本,即可輕松實(shí)現(xiàn)復(fù)雜的自定義網(wǎng)絡(luò),開發(fā)并驗(yàn)證自己的模型。

MACE的推出

根據(jù)CBA(Cloud-BigData-AI)戰(zhàn)略,筆者所在的小米人工智能與云平臺部門在2016年開始,逐步加大了對AI領(lǐng)域的投入。AI也逐步賦能公司的多項(xiàng)產(chǎn)品,其中,小米作為一家以手機(jī)和IoT智能設(shè)備為主的公司,設(shè)備端的AI能力是至關(guān)重要的。

隨著深度學(xué)習(xí)領(lǐng)域的發(fā)展,在圖像、NLP和語音領(lǐng)域,傳統(tǒng)方法也逐漸被深度學(xué)習(xí)方法所取代。

然而,AI的落地過程并非是一帆風(fēng)順的。成熟的深度學(xué)習(xí)框架有很多,算法工程師也很容易使用它們開發(fā)出有效的AI模型,但是,如何把訓(xùn)練好的模型放到設(shè)備上高效運(yùn)行,卻不是一件簡單的事情。

2017年年中,算法團(tuán)隊(duì)在相機(jī)的單鏡頭人像模式方面取得了突破性的進(jìn)展,能夠通過算法,使得單鏡頭能夠達(dá)到雙鏡頭的效果,通過后期圖像處理,從而實(shí)現(xiàn)媲美單反鏡頭的景深效果。

接下來亟待解決的問題是,如何使該項(xiàng)技術(shù)能夠盡快地落地到手機(jī)上,這項(xiàng)重任便落在我們團(tuán)隊(duì)身上。

我們首先考察了現(xiàn)有流行的開源框架,諸如TensorFlow、Caffe等,這些框架最初主要面向的是算法研究人員,重點(diǎn)優(yōu)化的方向是服務(wù)端的模型訓(xùn)練,后續(xù)也支持了服務(wù)器端的模型推理部署。

所以,最初的設(shè)計(jì),以及后續(xù)的優(yōu)化,都是針對服務(wù)器環(huán)境,沒有考慮到嵌入式設(shè)備內(nèi)存資源緊缺、計(jì)算能力有限,以及功耗敏感等問題。

此外,這些針對服務(wù)器端的開源框架,在最重要的算子部分,主要優(yōu)化對象是X86 CPU和英偉達(dá)的GPU,對ARM體系結(jié)構(gòu)上的優(yōu)化非常有限。當(dāng)時(shí),也有一些優(yōu)秀的、專門針對嵌入式ARM優(yōu)化的推理框架,比如國內(nèi)的ncnn,但也有很大局限,這些框架僅僅對ARM CPU進(jìn)行了專門優(yōu)化,遠(yuǎn)遠(yuǎn)不能達(dá)到逐幀實(shí)時(shí)計(jì)算的要求。

同時(shí),我們注意到嵌入式設(shè)備,尤其是中高端的手機(jī)設(shè)備,其芯片采用了SoC的形式,整個(gè)芯片,除了CPU,還有更強(qiáng)大的GPU和DSP等異構(gòu)計(jì)算單元,而對于圖像視頻類的卷積神經(jīng)網(wǎng)絡(luò),其模型計(jì)算復(fù)雜度高,依靠CPU計(jì)算還遠(yuǎn)遠(yuǎn)不能滿足性能指標(biāo),如何充分利用這些異構(gòu)計(jì)算單元的算力,是一個(gè)成熟的移動端深度學(xué)習(xí)推理框架必須具備的能力。

開源的框架不能滿足要求,我們把視線轉(zhuǎn)移到了芯片廠商提供的專有軟件框架上。當(dāng)時(shí),目標(biāo)機(jī)型是高通的芯片,所以,我們重點(diǎn)考察了SNPE。我們對比了SNPE與TensorFlow和Caffe等開源的框架,發(fā)現(xiàn)SNPE采用GPU或者DSP計(jì)算,在速度上大大優(yōu)于這些基于CPU方案的開源框架,并且能夠滿足實(shí)時(shí)逐幀的計(jì)算。

所以,我們決定采用SNPE來部署我們的模型,但隨著項(xiàng)目的推進(jìn),我們遇到了一些棘手的問題。

由于當(dāng)時(shí)SNPE發(fā)布不久,還處于早期階段,缺少模型必需的一些算子,同時(shí)自定義算子功能不成熟。

另外,SNPE在內(nèi)存使用上缺少優(yōu)化,沒有考慮不同層之間的緩存復(fù)用,導(dǎo)致程序內(nèi)存占用過大。

同時(shí),由于SNPE采用的是動態(tài)庫的形式,很容易被hook進(jìn)行反向工程,無法做到安全的模型加密和保護(hù)。

為了滿足需求,我們跟高通公司進(jìn)行了緊密的溝通,但是,由于跨公司溝通環(huán)節(jié)的復(fù)雜性,以及看待問題視角和優(yōu)先級的不同,雖然高通給予了我們很多優(yōu)先級的支持,但我們的需求遲遲沒有得到很好的滿足。

隨著時(shí)間的推移,項(xiàng)目準(zhǔn)時(shí)落地的風(fēng)險(xiǎn)越來越大,為了能對底層框架有更好的把控,我們決定在通過變通方式使用SNPE的同時(shí),開發(fā)我們自己的框架,于是MACE(Mobile AI Compute Engine)在2017年8月底正式立項(xiàng)。

最初技術(shù)方案有兩個(gè)選擇,一個(gè)是基于現(xiàn)有開源框架進(jìn)行修改,另一個(gè)是從頭自己實(shí)現(xiàn)。

經(jīng)過分析,我們認(rèn)為,移動端的推理框架是最核心的異構(gòu)計(jì)算的運(yùn)行以及底層的算子,而這塊在開源框架中完全缺失。

實(shí)際上,框架本身實(shí)現(xiàn)難度不高,并且現(xiàn)有的框架非常臃腫,為了能夠適應(yīng)移動端,需要進(jìn)行大量的刪減,反而不如重新實(shí)現(xiàn)容易。

最終,我們決定采用第二種方式。接下來的一個(gè)月,項(xiàng)目進(jìn)展非常順利,代碼框架迅速搭建起來,并且實(shí)現(xiàn)了支持NEON的CPU,能夠成功運(yùn)行MobileNet。但很快現(xiàn)實(shí)給了我們巨大的打擊,評測顯示速度只能達(dá)到TensorFlow Mobile速度的1/4,當(dāng)時(shí)正好恰逢國慶節(jié),但團(tuán)隊(duì)心情卻比較低落。很快,我們完成了MACE的GPU運(yùn)行,并且實(shí)現(xiàn)了1×1的卷積算子,速度相比CPU有所提升,但仍然不理想。

由于在CNN網(wǎng)絡(luò)里面,卷積操作是決定性的瓶頸,所以,接下來重點(diǎn)工作便是對卷積操作進(jìn)行優(yōu)化,于是團(tuán)隊(duì)便分頭行動,對CPU和GPU的卷積算子分別優(yōu)化。在GPU方面,由于現(xiàn)有的開源實(shí)現(xiàn)很少且性能表現(xiàn)太差,無參考意義。

我們系統(tǒng)鉆研了并行計(jì)算優(yōu)化領(lǐng)域的通用優(yōu)化方法,參考了高通的OpenCL優(yōu)化指南,嘗試了不同的內(nèi)存布局和計(jì)算方式,最終使得1×1卷積有了幾倍的提升,達(dá)到了SNPE相近的性能。卷積取得性能突破之后,事情就成功了多半,接下來便是算子的完備,很快自研的MACE框架就能成功運(yùn)行AI人像模型,相對于最開始的版本,取得了近10倍的性能提升,性能基本接近產(chǎn)品的要求。

接著,隨著產(chǎn)品集成和系統(tǒng)測試工作的進(jìn)行,除了進(jìn)一步優(yōu)化算子速度,我們還做了幾項(xiàng)效果顯著的改進(jìn),包括Winograd卷積優(yōu)化、算子融合、內(nèi)存復(fù)用、模型加密、啟動優(yōu)化、卡頓優(yōu)化等,使得用戶體驗(yàn)大大提升。

同時(shí),MACE在CPU的性能優(yōu)化上也取得了突破性進(jìn)展,在我們的模型上,浮點(diǎn)計(jì)算速度達(dá)到了TensorFlow的2倍。

2017年年底,離產(chǎn)品代碼凍結(jié)時(shí)間已經(jīng)很近,同時(shí)進(jìn)行的SNPE集成仍然不順利,經(jīng)過對比,在AI人像這個(gè)項(xiàng)目上,MACE在各項(xiàng)指標(biāo)上均優(yōu)于SNPE,并且在快速迭代,所以我們最終決定在產(chǎn)品上上線MACE,至此,MACE項(xiàng)目取得了階段性的成功。

隨著第一款產(chǎn)品的落地,MACE項(xiàng)目重心轉(zhuǎn)移到了功能的完善和業(yè)務(wù)支持上,在后續(xù)的幾個(gè)月中,MACE增加了DSP的支持、比特量化支持等重要特性。

MACE的開源

在小米自己的AI落地過程中,我們深深體會到,在手機(jī)上落地AI應(yīng)用絕非易事,而小米之外的應(yīng)用開發(fā)者面臨同樣的問題。

對于一款手機(jī)而言,手機(jī)廠商提供的功能畢竟是有限的,一個(gè)手機(jī)的生態(tài)需要廣大的開發(fā)者共同參與,才能為用戶帶來更優(yōu)異的體驗(yàn)。

我們從其他渠道了解到,一些實(shí)力雄厚的開發(fā)者,例如,算法提供商商湯、曠世等企業(yè),均有自研的推理框架,并且性能優(yōu)異,但是出于商業(yè)利益的考量,他們也不對外共享。

谷歌作為安卓陣營的引領(lǐng)者,推出了Android NNAPI接口,希望能統(tǒng)一移動端的NN接口,然而,這一努力進(jìn)展緩慢、無法落地,而谷歌在TensorFlow以及TensorFlow Lite上面,對異構(gòu)硬件的支持,進(jìn)展遲緩,遠(yuǎn)遠(yuǎn)落后于蘋果的生態(tài)。而芯片廠商,諸如高通和聯(lián)發(fā)科,由于各自的商業(yè)考量,技術(shù)方案比較封閉,對普通App開發(fā)者不夠友好。

出于這些原因,開發(fā)者面臨的現(xiàn)狀就是只能采用一些基于CPU的方案來進(jìn)行開發(fā),這在一些計(jì)算密集的CNN模型上非常吃力。

同時(shí),公司CEO雷軍和時(shí)任人工智能與云平臺總經(jīng)理的崔寶秋博士對開源非常支持,尤其是崔博士在開源領(lǐng)域有著多年的經(jīng)驗(yàn),在他們的建議下,我們決定讓MACE項(xiàng)目對外開源,這一決定,在現(xiàn)在看來無疑是非常正確的決定。項(xiàng)目在2018年8月底,正式開源后,得到了社區(qū)的廣泛關(guān)注。

開源戰(zhàn)略與意義

對于一個(gè)企業(yè),尤其是新興企業(yè)來說,開源有著非常重要的意義。恰當(dāng)?shù)牟杉{開源軟件,可以大大降低公司的研發(fā)成本,對外貢獻(xiàn)或者參與開源項(xiàng)目,可以提升公司的技術(shù)品牌。

以MACE項(xiàng)目來說,具體可以體現(xiàn)在如下幾個(gè)方面。

第一,對外貢獻(xiàn)代碼,尤其是自己主導(dǎo)的項(xiàng)目,可以大大提升研發(fā)人員的成就感,從而提升士氣和開發(fā)效率。

第二,軟件開源可以促使程序員寫代碼時(shí)更注重代碼質(zhì)量,這可大大降低項(xiàng)目的生存周期的管理成本。

第三,隨著開源項(xiàng)目的用戶逐漸積累,會有更多的外部開發(fā)者進(jìn)行不同形式的貢獻(xiàn),這對兩家企業(yè)都是互惠互利的事情,從本質(zhì)上來講,這是更大范圍的社會資源共享。

第四,任何一門基礎(chǔ)技術(shù),都會經(jīng)歷初期探索、發(fā)展繁榮、成熟標(biāo)準(zhǔn)化的過程,而開源將是大大推進(jìn)這一進(jìn)程的重要力量。

對未來的展望

目前,在深度學(xué)習(xí)推理領(lǐng)域,正經(jīng)歷著由通用硬件到專有AI加速器的變革過程,無論是IT巨頭,還是AI創(chuàng)業(yè)公司,技術(shù)方案百花齊放,各種硬件層出不窮,相應(yīng)的框架也是眼花繚亂。

這雖然是行業(yè)蓬勃發(fā)展的體現(xiàn),但由于軟硬件接口千差萬別,給開發(fā)者帶來了很大的障礙。

一方面,開發(fā)者尤其是智能硬件的開發(fā)者,很難對不同的廠家進(jìn)行客觀的評估,另一方面,工具鏈軟件接口的不同,帶來了額外的開發(fā)成本。

小米作為一家手機(jī)和智能硬件廠商,也需要經(jīng)常評估使用不同的硬件方案,為了簡化評測流程,減少重復(fù)勞動,我們開發(fā)了AI評測框架Mobile-AI-Bench項(xiàng)目,并將其開源,我們希望能夠連同社區(qū)的力量,共同將軟硬件評測客觀透明化。

同時(shí),我們也看到,針對硬件碎片化的局面,不同廠商也正在做不同的嘗試。比如,谷歌推出的Android NNAPI試圖在Android平臺上統(tǒng)一硬件接口。ARM也做出了類似的努力,旨在在ARM平臺上統(tǒng)一接口。在MACE項(xiàng)目中,我們也在增加不同加速硬件的支持。

我們相信,在不久的將來,在這一領(lǐng)域,也會逐漸成熟,并標(biāo)準(zhǔn)化,AI計(jì)算能力最終會成為一種不可或缺的基礎(chǔ)設(shè)施。

猜你喜歡
開發(fā)者開源算子
擬微分算子在Hp(ω)上的有界性
各向異性次Laplace算子和擬p-次Laplace算子的Picone恒等式及其應(yīng)用
五毛錢能買多少頭牛
一類Markov模算子半群與相應(yīng)的算子值Dirichlet型刻畫
Roper-Suffridge延拓算子與Loewner鏈
大家說:開源、人工智能及創(chuàng)新
開源中國開源世界高峰論壇圓桌會議縱論開源與互聯(lián)網(wǎng)+創(chuàng)新2.0
16%游戲開發(fā)者看好VR
CHIP新電腦(2016年3期)2016-03-10 13:06:42
開源計(jì)算機(jī)輔助翻譯工具研究
iOS開發(fā)者調(diào)查
電腦迷(2015年8期)2015-05-30 12:27:10
垦利县| 巴楚县| 延吉市| 合山市| 盐池县| 门头沟区| 山西省| 连山| 大冶市| 泰顺县| 甘孜| 潮州市| 乐清市| 务川| 涿州市| 砀山县| 惠州市| 黔东| 霍州市| 永丰县| 吉安市| 扬中市| 繁昌县| 长岛县| 临安市| 五常市| 积石山| 襄垣县| 定兴县| 湘潭县| 虎林市| 特克斯县| 宁陕县| 泾源县| 玉门市| 安多县| 临夏县| 昌黎县| 吉安县| 老河口市| 柯坪县|