哪款安卓手機適合跑AI?移動端晶元性能評測論文出爐
選自arXiv,作者:Andrey Ignatov等,機器之心編譯,機器之心編輯部。
蘇黎世聯邦理工學院曾經開發了一款 AI Benchmark 應用,用於測試不同安卓設備和晶元的深度學習性能。近期,他們聯合谷歌、高通、華為、聯發科以及 Arm 發布了一篇 AI Benchmark 綜合測試結果的論文,對超過 10000 部移動設備進行了定量 Benchmark 測試,涵蓋了當今所有主要硬體配置,並全面比較了高通、海思、聯發科和三星晶元組的 AI 加速性能。
- 項目官網:http://ai-benchmark.com/
- 完整排行列表:http://ai-benchmark.com/ranking.html
- APP 鏈接:https://play.google.com/store/apps/details?id=org.benchmark.demo
論文:AI Benchmark: Running Deep Neural Networks on Android Smartphones
論文地址:https://arxiv.org/pdf/1810.01109.pdf
摘要:近年來,手機、平板等移動設備的計算能力顯著提升,達到了台式計算機不久之前的水平。儘管標準智能手機 app 對於手機來說已經不成問題,但還有一些任務(即運行人工智慧演算法)可以輕易難倒它們,甚至高端設備也不例外。本文介紹了深度學習在安卓生態系統中的現狀,介紹了可用的框架、編程模型以及在智能手機上運行人工智慧演算法的局限性。我們概述了四個主要移動晶元組平台(高通、海思、聯發科和三星)上的可用硬體加速資源。此外,我們還展示了用 AI Benchmark 收集的不同移動 SoC 的真實性能結果,AI Benchmark 的測試涵蓋了當今所有主要硬體配置。
圖 1:為第三方人工智慧應用程序提供潛在加速支持的移動 SoC。
AI Benchmark
AI Benchmark 是一款安卓應用程序,旨在檢測在移動平台上運行 AI 和深度學習演算法的性能和內存限制。該 Benchmark 包含由直接在安卓設備上運行的神經網路執行的幾項計算機視覺任務。測試使用的網路代表了當前可部署在智能手機上的最流行、最常用的架構,其詳細描述及應用程序的技術細節如下。
任務 1:目標識別/分類
神經網路:MobileNet - V1 | CPU, NPU, DSP
圖像解析度:224 x 224 px
ImageNet 準確率:69.7%。
這是一個非常基礎但很強大的神經網路,能夠基於一張照片識別 1000 個不同的對象類別,準確率約為 70%。經過量化,其大小可小於 5Mb,再加上低耗內存,它可在幾乎所有現有智能手機上使用。
任務 2:目標識別/分類
神經網路:Inception - V3 | CPU, NPU, DSP
圖像解析度:346 x 346 px
ImageNet 準確率:78.0 %
這是對上一個網路的進一步擴展:更加精確,但代價是規模是原來的 4 倍且對計算的要求較高。一個明顯的優勢是——它可以處理解析度更高的圖像,這意味著更精確的識別和更小目標的檢測。
任務 3:人臉識別
神經網路:Inception - Resnet - V1 |CPU
圖像解析度:512x512 px
LFW 得分:0.987
這個任務無需過多介紹:根據人臉照片識別出這個人。實現方式如下:對於每個人臉圖像,神經網路會對人臉編碼並生成一個 128 維的特徵向量,該特徵向量不隨縮放、移動或旋轉而改變。然後,在資料庫中檢索和此向量最匹配的特徵向量(以及對應的身份),資料庫里包含數億個此類信息。
任務 4:圖像去模糊
神經網路:SRCNN 9-5-5 | CPU, NPU, DSP
圖像解析度:300 x 300 px
Set-5 得分 (x3):32.75 dB
還記得用手機拍出的模糊照片嗎?這個任務就是:讓圖片變得清晰。在最簡單的情況下,這種失真是通過對未損壞的圖像應用高斯模糊來建模的,然後嘗試使用神經網路來恢復它們。在這個任務中,模糊是通過一種最原始、最簡單、最輕量級的神經網路 SRCNN(只有 3 個卷積層)去除的。但是即便如此,它仍然顯示出相當令人滿意的結果。
任務 5:圖像超解析度
神經網路:VGG - 19 | CPU, NPU, DSP
圖像解析度:192 x 192 px
Set-5 得分 (x3):33.66 dB
你有過縮放照片的經歷嗎?縮放時是不是會有失真、細節丟失或清晰度下降的問題?這項任務就是讓縮放過的照片看起來和原圖一樣。在本任務中,網路被訓練用於完成一項等效的任務:將給定的縮小後圖像(如縮小四倍)恢復至原圖。此處我們使用一個 19 層的 VGG-19 網路。儘管目前來看,該網路的表現並不驚艷,也不能重建高頻部分,但它對於繪畫仍是理想的解決方案:該網路可以讓圖像變得更加清晰、平滑。
任務 6:圖像超解析度
神經網路:SRGAN | 僅 CPU
圖像解析度:512 x 512 px
Set-5 得分(x4):29.40 dB
任務同上,但完成方法略有不同:如果我們使用其他神經網路訓練我們的神經網路會如何?我們安排兩個網路去完成兩個不同的任務:網路 A 嘗試解決上面提到的超解析度問題,網路 B 觀察其結果,嘗試找到其中的缺陷並懲罰網路 A。聽起來是不是很酷?實際上真的很酷:儘管該方法不盡完美,但結果往往非常驚艷。
任務 7:語義圖像分割
神經網路:ICNet | 僅 CPU
圖像解析度:384 x 576 px
CityScapes (mIoU):69.5 %
有沒有想過在手機上運行自動駕駛演算法?這沒什麼不可能,至少你可以完成一大部分任務——根據車載攝像頭拍攝的照片檢測 19 類目標(例如,車、行人、路、天空等)。在下圖中,你可以看到最近專為低性能設備設計的 ICNet 網路的像素級分割結果(每個顏色對應每個目標類別)。
任務 8:圖像增強
神經網路:ResNet - 12 | CPU, NPU, DSP
圖像解析度:128 x 192 px
DPED PSNR i-得分:18.11 dB
看舊手機上的照片是不是覺得很難受?這個問題可以解決:經過恰當訓練的神經網路可以讓舊手機(即使是 iPhone 3GS)上的照片看起來非常好、非常時髦。要做到這一點,網路要觀察、學習如何將來自低端設備的照片優化成像用 DSLR 相機拍出來的一樣。當然,這一奇蹟有一些明顯的缺陷(如:每次換新手機模型都要重新訓練網路),但得到的圖像看起來非常好,尤其是舊設備上的照片。
任務 9:內存極限
神經網路:SRCNN 9-5-5 | CPU, NPU, DSP
圖像解析度:4 MP
參數:69.162
在任務 4 中我們已經認識了 SRCNN,它是最輕便、簡單的神經網路之一,但即便如此,在處理高解析度照片時,它也會讓大多數手機「給跪」:要處理高清照片,手機至少要有 6GB 的內存。這項測試的目的是找到你設備的極限:這個最簡易的網路到底能處理多大的圖像?
圖 7:在相關深度學習測試中向用戶展示的結果可視化示例。
圖 8:測試結束後 AI Benchmark 給出的結果。
Benchmark 結果
我們展示了超過 10000 部移動設備的定量 Benchmark 結果。每部設備/SoC 的分數見表 2、表 3,包含每個測試/網路對一張圖像的平均處理時間、可用 SRCNN 模型處理的最大可能圖像解析度,以及總計 AI 分數。這些分數是通過對應設備/SoC 的所有結果去除異常值之後取平均得到的。結果細節將在下文中介紹。
神經網路
表 1 總結了本 Benchmark 包含的所有深度學習架構的細節。表 2 與表 3 中的結果和網路的相對處理時間以及內存消耗的理論期望高度一致。尤其是,第一個測試的量化 MobileNet CNN 相比相同的浮點模型僅需要 1/3 到 1/4 的 RAM,並且其在 CPU 上的運行速度比 Inception-V3 CNN 快了一個數量級。第三個人臉識別測試處理的是兩倍大的圖像,並且比第二個測試需要大約兩倍的推理時間,意味著 Inception-ResNet-V1 和 Inception-V3 的性能是相當的。
表 1:AI Benchmark 中用到的深度學習模型的特點總結。
在圖像到圖像的處理任務中,最高效的模型是 ICNet,因為計算主要發生在對圖像/特徵圖的下採樣。相同的方法也在 SRGAN 上使用,其中原始圖像被下採樣至 128x128 像素,並在這個解析度上處理,直到最後兩個層將其上採樣至原始尺寸。因此,儘管使用了 12 個殘差塊,其處理時間仍然是合理的,不過使用下採樣/上採樣層處理 512x512 像素的圖像使得 RAM 佔用特別高。圖像增強任務中使用的 DPED 網路包含 4 個殘差塊,在處理圖像的過程中沒有使用下採樣,因此處理時間應該是之前案例的 128x128x12/128x192x4=2 倍,正如在實驗中所展示的。
第五個測試中使用的 VGG-19 模型在所有 CNN 中是最消耗資源的,因為它由 19 個卷積層構成,在理論上其會比 DPED 慢 19/12=1.6 倍(它們的卷積層尺寸相似);但是 RAM 的消耗分布仍處於相近的範圍,因為其主要由最大卷積層的維度決定。最後,SRCNN 模型比 VGG-19 和 DPED 都快得多,並且內存消耗由於相同的原因也非常相似。SRCNN 可以處理的最高圖像像素的尺寸隨設備的總 RAM 大小而線性增長,儘管由於 NNAPI 中的一個 bug,這對於安卓 8.1 以上的手機不適用,它們一般要消耗更多的 RAM。我們應該注意目前所有的結論都是基於不支持硬體加速的結果,因為硬體加速能顯著改變測試 1、2、4、5、8 和 9 的結果。
表 2:多種安卓手機的 Benchmark 結果,完整列表在: http://ai-benchmark.com/ranking
表 3:幾個 SoC 的 Benchmark 結果,完整列表請參考鏈接: http://ai-benchmark.com/ranking_processors
智能手機和移動晶元
表 2 和表 3 的結果展示了使用 AI Benchmark 獲得的一些測試結果,其中分別包括安卓智能手機和移動端晶元。完整的列表可以在項目網站上查看。在具體討論測試細節之前,我們首先要提到幾個 Android NNAPI Bugs,這些漏洞同樣影響了表中的一些結果。首先是 Android 8.1 默認 NNAPI 驅動的漏洞,卷積運算在禁用這些驅動的情況下要比在啟用時性能快兩倍。因此在為表 3 中展示的不同 SoC 計算平均 runtime 時,我們忽略了手機測試結果可能存在的這一問題。
雖然使用 Android 8.1 和 Kirin 970 晶元的華為手機使用的是他們自己定製的 NNAPI 實現,它還是會遇到另外不同的 Bug:在長待機後,麒麟的 NPU 時鐘速度會下降,並且在重啟之前不會恢復。兩個表中的結果都是在華為設備剛啟動時測試的。最後因為 3.2 節中描述的 ByteBuffer 問題,在圖像到圖像的測試中使用 Android NNAPI 的 RAM 消耗要高了兩倍,它所造成的後果可以在最後的內存測試中觀察到。
我們在下面總結了每個 Soc 製造商的測試結果,並描述了市場上對應晶元的性能。
- 高通:驍龍晶元(Snapdragon)現在能為量化神經網路提供硬體加速(當高通的 NNAPI 驅動存在時),不過現有的商業設備並不支持浮點模型。包含這些驅動的第一代智能手機是配備驍龍 845 SoC 和最新 Android P 固件的 OnePlus 6。它可以在 Hexagon DSP 上 25ms 內運行量化 MobileNet 模型,這比對應 CPU 速度(60-65ms)快得多。類似的性能在包含相同 Hexagon 685 DSP 的驍龍 670/710 晶元中獲得。帶有 Hexagon 682 的驍龍 835 和帶有 Hexagon 680 的驍龍 636/660/820/821 都採用相同的高通 68x DSP 家族,應該具有更長的運行時。
雖然目前高通 NNAPI 驅動還沒有所支持加速的浮點模型官方測試,但驍龍 625 SoC 相比於基於 CPU 的執行能實現兩倍的加速,其中驍龍 625 SoC 可能使用集成 Adreno 506 GPU 驅動程序的 Beta 版。雖然 Adreno 506 的性能約為 130 GFLOPs,這意味著驍龍 845 SoC 中的 Adreno 630(727 GFLOPs)能潛在地提供 3 到 4 倍的加速,但具體的數字可能變化很大。
至於與矩陣/深度學習計算相關的 CPU 性能,目前最強大的高通核心是驍龍 845 SoC 中的 Kryo 385 Gold。與高通 835 的 Kryo 280 核心相比,它展現出大約 30%的提升。有趣的是,與帶有定製化非 Cortex 的驍龍 820 SoC 及內部的第一代 Kryo 相比,Kryo 280 表現出相似或稍微降低的性能(每 GHz)。儘管第一代 Kryo 在設計上只有四個計算核心,但仍然比帶有更新 Kryo 260 核心的驍龍 636/660 快一些。以前在 2013 年由驍龍 800/801 所代表的 Krait 微架構仍然展現出很有競爭力的結果,性能優於 2xx、4xx 和 6xx 系列的大多數結果,甚至緊隨基於 Cortex-A57 微架構的 810 和 808 晶元的測試結果。我們還注意到定製的高通 CPU 核心通常比默認 ARM Cortex 架構表現出更好的結果。
- 華為:儘管海思 SoC 的 CPU 性能不如高通的那麼令人印象深刻,其集成到麒麟 970 的 NPU 為浮點深度學習模型提供了巨大的加速效果。尤其是,根據任務類型,對比它的 CPU 它可以提供 7-21 倍加速的推理,對比總體最優的 CPU 結果它可以提供 4-7 倍的更優性能。在支持 GPU 加速的測試 2、4、5、8 中,它分別需要平均 132、274、240 和 193ms 的時間來處理一張圖像。該 NPU 僅有的主要缺點是缺乏對量化模型的加速支持。在第一個測試中,所有的計算都是在 CPU 上運行的,每張圖像的平均處理時間是 160ms,這相比驍龍 845 啟用 DSP 時的對應結果要高得多。儘管這個問題可以通過在麒麟的 NNAPI 驅動程序中實現量化模式得到解決,目前這項功能仍處於開發階段。
至於其它的海思晶元組,目前都不提供 AI 應用的加速,因此所有的計算都是在 CPU 上進行的。由於所有的海思的 SoC 都是基於標準的 Arm Cortex 核心,它們的性能和其它有相同 Cortex 架構的晶元組也很相似。
- 聯發科:Helio P60 是首個能利用 NNAPI 驅動程序以加速浮點和量化模型的晶元組。量化網路在其集成的 APU 上運行,並展示了在第一個測試中處理一張圖像時和 Hexagon 685 DSP—21ms 相似的性能。浮點網路在 Mali-G72 MP3 GPU 上執行,並對比 CPU 提供了 2-5 倍的加速,相比總體的最優 CPU 結果其運行時要快 1.5-2 倍。我們應該注意所有這些數值都是在 MediaTek 的開發者手機上獲得的結果,而僅有的基於 Helio P60 和 NNAPI 驅動程序的市場手機(vivo V11)得到了稍微差一點的結果。
其它聯發科晶元組目前不支持 AI 應用的加速。它們是在標準 Arm Cortex 設計的 CPU 核心上運行的。
- 三星:截至本文寫作時,三星的所有 SoC 都不能提供第三方 AI 應用的加速:所有配置這些晶元組的手機使用了默認的 NNAPI 驅動程序。由於最新的 Exynos 9810 SoC 擁有相同的 Mali-G72 顯卡。正如 MediaTek P60 晶元組一樣(但其有 12 個核心而不是 3 個),如果 Arm NN 庫被三星整合到 NNAPI 驅動程序中,我們預期對浮點神經網路會有 3-4 的額外加速因子。由於所有近期的 Samsung Exynos 處理器使用了 Arm Mali GPU,它們也適用同樣的結論。
視任務類型而定,三星的 Mongoose M3 CPU 核心對比驍龍 845 的定製 Kryo 385 核心可以展示顯著更好或者更差的性能,但它們的總體性能是相當的。Mongoose M2 微架構相對於第一個 M1 版本有 50% 的顯著提升,同時第二代(M2)和第三代(M3)的性能很相似。最新的 Exynos 8895 和 9810 SoCs 的一個值得注意的問題和它們的集成能耗管理系統(可調整 CPU 性能)相關。它導致了大多數設備的非常不穩定的結果:尤其是,幾個之後在相同的 Galaxy S9 手機上運行的 Benchmark(有 10 分鐘的間隔,「高性能」模式)都展示了總體分數的 50% 的變動,從不同設備獲得的結果甚至有更大的變動(例如,第七個測試的 200-800ms 的處理時間)。目前,尚未有對不同性能模式的外部控制手段,因為它們是基於內部邏輯而自動選取的。
- 其它:我們還獲得了在其它不常用(如 Spreadtrum)或被製造商停產(例如,Intel Atom、Nvidia Tegra、TI OMAP)的晶元組上的測試結果。其中,在支持 CUDA 和專用於深度神經網路的 cuDNN GPU 加速庫的 Nvidia Tegra 平台上測試 AI 和深度學習時我們得到了非常有趣的結果。不幸的是,自 2015 年以來沒有新的設備使用過 Nvidia SoC,而已有的設備已經停產,並且不會再獲得加速機器學習移動端框架的(NNAPI)驅動程序。
討論
目前,對機器學習在移動設備上的軟硬體支持發展得非常快,每隔幾個月就有公司宣布里程碑式的技術。這些技術當然帶來了新的可能性和更高的性能,但目前缺乏標準化要求和公開規範,造成無法確保對技術優劣勢進行客觀評估。下文介紹了我們通過 NNAPI 驅動程序使用移動機器學習框架和硬體加速晶元組的體驗。
目前,開始在安卓設備上使用深度學習的最簡單方式是使用成熟、相對穩定的 TensorFlow Mobile 框架。該框架出現於兩年前,基本上解決了所有主要問題,且人們可在多個專門網站上找到關於細小問題的大量信息。如果硬體加速是關鍵問題,那麼 TensorFlow Lite 仍然可以作為選擇,但是我們不推薦使用它進行比用 MobileNet 或 Inception CNN 執行圖像分類更複雜的任務,因為在移動平台上使用不標準的網路架構可能出現偶發問題。我們還提到從 TF Mobile 到 TF Lite 的遷移相對簡單,因為它們使用的安卓編程介面很相似(最大的區別在於 TF Lite 將預訓練模型轉換成 .tflite,而不是 .pb 格式),我們可以在 TF Lite 得到更好支持的情況下再進行遷移。如果某個應用針對某些特定設備或 SoC,那麼對應的專用 SDK 也可以使用,儘管這種情況下開發可能不那麼容易、簡便。至於 Caffe2 Mobile 和其他不那麼廣泛使用的框架,目前它們的社區還比較小,這意味著網路上幾乎沒什麼教程和問題描述,因此所有出現的問題可能需要通過在對應的 GitHub repo 中創建新的 issue 來解決。
對安卓設備上的 AI 演算法提供硬體支持目前是一個更有爭議的話題。截至本文寫作時,常規的浮點神經網路的最快運行時屬於裝載了麒麟 970 的華為手機,遠遠領先於市場平均水平。但是,我們仍要客觀地看待未來的發展,我們的分析表明幾乎所有 SoC 製造商都有潛力使用新的晶元組達到類似的結果。下一年年初情況將逐漸明晰,那時裝載有麒麟 980、MediaTek P80 和新一代高通、Samsung Exynos premium SoC 的設備將上市。除了性能,我們還考察了它們的能耗,因為耗電過快會限制它們對一些標準相機內置處理技術的使用。
我們想解決的最後一個問題是量化網路的使用。它們的目前應用很受限,因為目前仍然沒有用於量化網路的可靠、標準工具,即使是對簡單的圖像分類任務,更不用說複雜的任務了。目前,我們期待該領域的兩種不同開發方式。第一種,量化問題將在某個時刻得到解決,部署在智能手機上的大多數神經網路都能被量化。第二種,支持浮點網路的特定 NPU 變得更加強大、高效,從而不再需要量化。當然我們沒辦法輕鬆地預測未來,但我們仍將在 AI benchmark 中使用量化和浮點模型的混合(浮點模型佔主導),不過未來的版本中對應的比率可能會發生很大改變。
目前有很多重要的開放性問題可能會在出現新的機器學習相關軟硬體和新的專用晶元後得到解決,因此我們計划出版介紹移動設備 AI 加速實際情況的常規 benchmark 報告,該報告也會涉及機器學習領域的改變以及 AI benchmark 所做出的相應調整。AI Benchmark 的最新測試結果和實際測試描述將在項目網站上進行每月更新。


※令人困惑的 TensorFlow!
※英特爾推出新一代Stratix 10 FPGA加速卡:性能提升3倍
TAG:機器之心 |