龐濤,沙通,崔思靜,楊婷婷
(中國電信股份有限公司研究院,廣東 廣州 510630)
人工智能的三大要素是算力、數(shù)據(jù)與算法。互聯(lián)網(wǎng)與移動通信的結(jié)合產(chǎn)生了海量的數(shù)據(jù),深度神經(jīng)網(wǎng)絡的快速發(fā)展推動著算法精度的不算提升,英偉達GPU、谷歌TPU 等高性能硬件的大規(guī)模產(chǎn)業(yè)化解決了云端算力問題[1,20]。但是,移動終端設備在實際運行中會受到傳輸時延、功耗、成本、安全性等各項制約因素的影響,其中,算力尤其是單位能耗可提供的算力是制約移動智能終端AI 能力的主要因素[2]。
近年來,移動終端的人工智能計算能力呈現(xiàn)出大幅增長的態(tài)勢,移動芯片制造廠商推出的中高端手機芯片都提供了深度神經(jīng)網(wǎng)絡模型的加速計算能力。業(yè)界也隨之出現(xiàn)了針對端側(cè)人工智能加速計算的各種評測方法和工具[3],本文接下來將針對移動智能終端的AI 芯片算力及其評測方法展開研究。
2010 年之前,手機終端僅能提供600 MHz 左右的單核CPU 及百兆內(nèi)存資源用于運行簡化版的機器學習模型;2010 年之后,移動終端上開始配置多核處理器CPU、GPU;2017 年,蘋果、華為海思、高通、聯(lián)發(fā)科等芯片廠商陸續(xù)推出NPU、AIP 和APU 等適合機器學習和深度學習任務的專用AI 加速硬件單元[4-6],越來越多的AI 應用在移動終端上落地。
在深度學習模型中,計算量最大的算子是卷積,而卷積的本質(zhì)是矩陣的乘加計算(MAC)。在基于深度學習的AI 應用中,95% 以上的運算為MAC,因此現(xiàn)階段移動智能終端上大量的軟硬件優(yōu)化方案均是用來加速這部分運算[19]。硬件層面,芯片內(nèi)置專用的神經(jīng)網(wǎng)絡運算單元對神經(jīng)網(wǎng)絡中的矩陣運算進行加速,例如,華為手機配置的海思麒麟820、990 等芯片內(nèi)置了NPU;蘋果A13、A14 等系列芯片搭載了Neural Engine。軟件方面,需要通過SDK 運行移動終端上所支持的機器學習框架[5],調(diào)度CPU、GPU、DSP 及其他加速計算單元。其中,端側(cè)框架包括操作系統(tǒng)上層的AI 加速運行時(Runtime)、AI 加速能力API、AI 算法模型和AI應用能力接口等。除了芯片廠商提供的專有機器學習框架,眾多互聯(lián)網(wǎng)企業(yè)也推出了各自的移動端深度框架,例如谷歌TensorFlow Lite、百度Paddle Lite 等框架。
當前業(yè)界已有眾多移動智能終端的AI 能力評測工具,能夠?qū)κ謾C、平板等移動智能終端進行不同場景下的運算精度和速度的評測,主流的評測工具包括AIbenchmark[4-5]、MLPerf[8]、DNN Benchmark、AIT 以及一些商業(yè)評測軟件,例如魯大師的AImark、安兔兔AI 評測等。其中,AIT(AI Testing)是由中國電信研究院研發(fā)的一款AI 芯片評測工具,通過該工具我們定期跟蹤評測最新款手機終端芯片的AI 能力,相關評測結(jié)果在每年度的中國電信終端洞察報告中發(fā)布。AIT 的評測項目包含了圖像分類、圖像識別、圖像分割和超分等模型,并從模型推斷的性能、能耗和耐久模式出發(fā),對芯片的AI 能力進行綜合評估。接下來本文重點研究的AI 芯片算力評測方法已在AIT 上實現(xiàn),文中實驗數(shù)據(jù)均來源于AIT 評測。
算力是指硬件設備的計算能力,業(yè)界一般采用每秒操作數(shù)量(OPS,Operations Per Second)作為衡量硬件算力水平的一個性能指標[18]。特別地,針對浮點計算領域,常用每秒浮點運算次數(shù)(FLOPS,Floating-Point Operations Per Second)來衡量硬件執(zhí)行浮點計算的速度。業(yè)界往往用計算單元的理論值來標稱AI 芯片的算力,但在實際應用中,硬件所能表現(xiàn)的算力水平受到數(shù)據(jù)量、吞吐量等諸多因素的影響,表現(xiàn)出來的算力水平距離理論值差距較大,故需要研究一種標準化、可復現(xiàn)的算力評估方法,用其評測AI 芯片時能夠盡量接近理論算力。
文中使用OPS 作為浮點和整型計算算力的統(tǒng)一度量單位,通常一次MAC 運算可看作是兩次深度學習的運算操作。
(1)在不考慮能耗的情況下,移動終端進行AI 運算所能表現(xiàn)的峰值算力計算公式如下:

其中OPs為操作數(shù)量,Tinf為推斷時間,MACs 為乘加運算次數(shù)。
(2)在考慮移動終端單位能耗下的算力水平時,單位能效算力計算公式如下:

其中OPs為操作數(shù)量,Tinf為推斷時間,W推斷時間內(nèi)的功率消耗。
(1)模型及其理論運算數(shù)量
模型的MACs 或OPs 由其本身的結(jié)構(gòu)確定,通常用作模型復雜度的一種描述。在不考慮激活函數(shù)運算的情況下,一個包含偏置(bias)的卷積層的MACs 可通過下述公式確定:

其中Ci為輸入通道數(shù),C0為輸出通道數(shù),K為卷積核大小,H和W分別為輸出特征圖的長和寬。
而同樣在不考慮激活函數(shù)運算的情況下,一個包含偏置(bias)的全連接層的MACs值為:

其中I為輸入神經(jīng)元總數(shù),O為輸出神經(jīng)元數(shù)量。
為驗證MACs 和算力表現(xiàn)的關系,我們在PC 端CPU上進行了測試,在參數(shù)量和MACs 都相同的情況下,三層全連接模型和三層核大小為1×1 的卷積模型體現(xiàn)出的CPU 算力幾乎沒有差別,測得全連接模型算力大小為247.25 GOPS,卷積模型算力為247.86 GOPS。最大池化層中本身不含乘加運算,在計算OPs 的時候忽略其內(nèi)部的操作數(shù)。因此,在算力評測時主要利用卷積計算進行算力評估是合適的。
(2)不同模型的算力表現(xiàn)
為驗證不同模型對算力的影響,我們選擇移動端常見的三個圖像分類模型在手機終端運行,對比其各自表現(xiàn)出來的算力水平,模型的MACs 數(shù)量見表1:

表1 MobileNet、ResNet50和VGG16等模型的MACs
使用AIT 評測軟件分別運行在裝備AI 芯片的五款手機終端上,分別測試MobileNet_V2、ResNet50、VGG16和19 剪裁后三層的模型,對比不同模型運行在不同終端上的芯片算力表現(xiàn),結(jié)果如圖1 所示:

圖1 芯片在INT8模型上的算力測試結(jié)果
圖中縱坐標是不同的DNN 模型(標注了MAC 數(shù)量),橫坐標是測出的算力值,每種顏色代表一款手機跑出的AI 算力,單位TOPs/s(TOPS),從測試結(jié)果看出,MACs 越多的模型,表現(xiàn)出的算力值越高。因此在手機端盡管當前的應用趨勢是模型輕量化,但是從測試的角度,要想充分展示出加速計算硬件的理論性能,還需要重載模型的加持。
(3)定制化VGG 模型的算力表現(xiàn)
1)VGG 模型剪裁
圖1 中的VGG_notop 指的是裁剪掉最后三個全連接層和損失層(Softmax)后的VGG16 或VGG19,去掉全連接層的VGG_notop 模型結(jié)構(gòu)主要出于以下因素的考慮。其一,現(xiàn)如今三個全連接層接在CNN 末端已不是常見的結(jié)構(gòu)設計,如圖2 所示,位于VGGNet[9]模型末端的三個全連接層主要起到的是特征融合和特征降維的作用,在卷積神經(jīng)網(wǎng)絡發(fā)展初期,這種設計是常見的。

圖2 VGG16_notop結(jié)構(gòu)示意圖
然而,多層的全連接層易使模型本身結(jié)構(gòu)變得臃腫,在VGG19 中全連接層參數(shù)占到了模型參數(shù)總量的86%,在VGG16 中該占比達到了89%。2014 年,參考文獻[13] 中提出了使用全局平均池化層(GAP,Global Average Pooling)替代全連接層的做法,GAP在降維的同時極大地減少了網(wǎng)絡參數(shù),且保留了特征中部分空間信息,起到防止過擬合的作用。隨后,一層GAP 后接一層全連接層(或一到兩個核大小為1×1的卷積層)做進一步特征降維被業(yè)界普遍應用,在InceptionNet[14-16]和MobileNet[10,17]等模型中,都可以看到這種結(jié)構(gòu)設計。
同時,對于移動端有限的存儲和運算能力來說,VGG_notop 的模型大小和其純卷積層的結(jié)構(gòu)都更加友好和實用。我們使用AIT 測試軟件同樣運行在5 款手機上,對標準VGG 模型和裁剪后的VGG_notop 模型的算力進行了實驗對比,根據(jù)圖3 的測試結(jié)果可以看到,無論哪一款終端,VGG_notop 模型由于其更精簡的結(jié)構(gòu),在算力測試中都更好地展現(xiàn)了芯片的計算能力。因此,出于對模型參數(shù)量和實際應用的考慮,在移動終端算力評測中所考慮的VGGNet 模型是裁剪掉全連接層和Softmax層的VGG_notop。

圖3 INT8模型VGG16與VGG16_notop的算力對比
2)不同卷積核對算力的影響
在實際情況下,不同芯片的計算單元處理能力會存在差異。我們的研究方案是用一組MAC 值不同的模型進行算力測試,選取其中測得的算力峰值來作為芯片能力的表現(xiàn)。這要求所使用的一組模型擁有相似的結(jié)構(gòu)和參數(shù)分布,且盡量不因結(jié)構(gòu)變化而增加I/O。
遵循上述思路,我們采用了一組定制化的VGG_notop模型組,組內(nèi)模型沿用了VGG16_notop 和VGG19_notop的層次結(jié)構(gòu),但每個模型的卷積核大小各異。為了區(qū)分不同卷積核尺寸采用簡寫表示,卷積層全采用3×3 核的VGG16_notop 模型,表示為VGG16_notop_conv3,其中為方便表示,將其簡寫為v16_notop_conv3,應用其它核大小的模型以此類推,VGG19_notop 模型同理。圖4 為VGG16_notop_conv5 結(jié)構(gòu)圖。

圖4 VGG16_notop_conv5結(jié)構(gòu)圖
由此,該定制化VGG_notop_convk 模型組內(nèi)共有10個MAC 值不同的模型,如表2 所示。為了簡便,所有模型內(nèi)的參數(shù)全部設置為0.001,即w=const(0.001)。

表2 VGG_notop_convk模型組的MACs
可以看出,隨著卷積核的增大,模型的MAC 數(shù)量也同步增長。我們將這組模型分別在PC 端的CPU 上以及不同的手機終端芯片上進行了測試。對于PC 端的CPU 而言,由于CPU 沒有對MAC 計算進行專門的加速處理,可能是由于內(nèi)部IO 增加,CPU 的算力表現(xiàn)會隨著卷積核的增大而逐步減少。
PC 端CPU VGG_notop FP32 算力對比如圖5 所示:

圖5 PC端CPU VGG_notop FP32算力對比
而在移動終端上,由于各芯片廠商的AI 加速方案差異較大,因此我們實驗對比的高通驍龍和海思麒麟的AI 加速芯片在不同卷積核下的算力表現(xiàn)趨勢并不一致。高通的兩款芯片驍龍855 和驍龍865,并不能很好地支持7×7 以上的卷積核,整體算力表現(xiàn)趨勢大致與CPU 類似。
高通驍龍的芯片VGG_notop_conv 算力對比如圖6 所示:

圖6 高通驍龍的芯片VGG_notop_conv算力對比
麒麟990 芯片對于7×7 以上的卷積核都能運行,在MAC 值增加的情況下算力也能保持上升趨勢,但上升態(tài)勢漸趨平緩。
麒麟990 芯片INT8 與FP16 下VGG_notop_conv 算力對比如圖7 所示:

圖7 麒麟990芯片INT8與FP16下VGG_notop_conv算力對比
從對比可見,各芯片廠商針對不同卷積計算的優(yōu)化策略也不相同。當前采用7 對比以上卷積核的模型在移動端并不常見,出于模型通用性和測試一致性的考慮,采用上文所述的VGG_notop 作為基準算力評測模型是合適的。基于VGG_notop_convN(N=5,7,9,11……)的算力測試結(jié)果可作為參考,反映被測芯片的潛在算力峰值以及它對卷積核算子的支持程度。
(4)INT8 和FP16 的算力表現(xiàn)
相較于PC 端中常使用的FP64 或FP32 模型,在移動端部署的DNN 模型的參數(shù)一般需要壓縮。FP16 和INT8是其常用的兩種數(shù)據(jù)格式。
兩種數(shù)據(jù)類型的DNN 模型在推斷表現(xiàn)上有各自的優(yōu)勢。由于數(shù)據(jù)信息折損較少,F(xiàn)P16 浮點模型在準確率方面常有更好的推斷表現(xiàn)。而INT8 模型則會有更快的推斷速度,因此在算力表現(xiàn)上會更好。當然,將FP16 和INT8 兩種模型直接進行算力比較并不可取,因為它們的性質(zhì)不同且模型的準確率也不相同,圖8 對比了三款芯片的FP16和INT8 算力表現(xiàn),可以看出驍龍855 和865 芯片基本上沒有浮點運算的加速能力(其浮點運算能力來自于CPU 和GPU),而麒麟990 二者兼有,這是由各家廠商對端側(cè)AI芯片選擇了不同的技術路線造成的。

圖8 FP16與INT8芯片算力對比
在實際應用中,模型數(shù)據(jù)類型的選擇常取決于特定的任務以及設備功耗上的要求。對于高精度訓練和推斷的應用場景來說,浮點模型是更好的選擇;而對于純推斷以及低功耗、低RAM 的設備,INT8 模型則更勝一籌。因此,在移動終端芯片的算力評測中,我們考慮的是兩種數(shù)據(jù)類型的DNN 模型各自的算力表現(xiàn)。
算力評測的過程主要測量的是VGG_notop 網(wǎng)絡對一張圖片做特征提取所需的時間,而后基于已知的模型MAC值,通過式(1)得到峰值算力結(jié)果。同時,為防止芯片一味追求高算力而忽略功耗,單位能耗算力將作為輔助指標,反映芯片在高計算量下的功耗性能。
在手機終端上運行AIT 軟件進行算力評測,需要將預訓練的32 位浮點DNN 模型量化為FP16 或INT8 DNN模型。采用VGG19_notop_INT8 和VGG19_notop_FP16進行算力評測,該模型實際上為ImageNet 圖片集的特征提取器。模型的輸入集為已經(jīng)過預處理的1 000 張大小為224×224 的BGR 圖片,輸出集為相應的大小為7×7×512 的特征。圖片的推斷時間通過在模型輸入、輸出兩端打點的方式得到。同時,為了檢查芯片在跑分測試中可能發(fā)生的作弊行為,還需要考慮對VGG_notop 輸出集進行校驗。
我們依據(jù)本文介紹的測試方法,評估了近兩年主流手機終端配備的AI 芯片算力,INT8 和FP16 的算力表現(xiàn)如表3 所示。

表3 中高端AI手機芯片算力評測結(jié)果
從實驗數(shù)據(jù)中可知,當代移動終端AI 芯片的算力水平提升迅速,在不考慮能耗限制時中高端芯片的算力差距較大,但是受限于移動終端的體積、電源等,中高端芯片的單位能效算力表現(xiàn)差距并不明顯。在絕對算力日漸過剩的趨勢下,提高單位能效算力是芯片廠商需要努力的方向。
經(jīng)過以上分析和實驗可以看出,當前AI 芯片主要是對卷積計算做了加速,算力評測以卷積運算的加速為主,因此,使用VGG_notop 來評估移動終端的算力是合適的,但是受限于上層數(shù)據(jù)的吞吐,評測結(jié)果距離廠商宣傳的理論算力相差較大,如果要更加接近,需要廠商直接開放底層MAC 單元的輸入輸出接口直接針對特定硬件單元進行評測。
由于VGG_notop 模型經(jīng)過剪裁,其輸出已經(jīng)不能簡單地用圖像分類結(jié)果,經(jīng)過量化的模型與原始浮點模型在算力輸出集驗證也是必需的,合適的校驗方法可以有效地識別芯片是否使用了如跳幀處理等不正當算力優(yōu)化手段,針對這一問題,我們將在未來進一步開展研究和實驗。