回覆列表
  • 1 # 機器之心Pro

    蘇黎世聯邦理工學院曾經開發了一款 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 的最新測試結果和實際測試描述將在專案網站上進行每月更新。

  • 中秋節和大豐收的關聯?
  • 油桃哪個品種早熟產量高甜不裂果?