Facebook應該如何應對人工智慧在智慧手機上的局面?EdgeAITech2019-01-10 00:52:25

移動裝置上的人工智慧有點混亂 市場擁有數千種不同的晶片組,其中大多數效能不佳,軟體堆疊達不到執行人工智慧任務的任務要求。平均來說,這些手機的CPU不是很好:“幾乎所有的移動推理都是在CPU上執行的,而且大多數部署的移動CPU核心都是舊的和低端的。”

為了解決這這些問題,Facebook充分利用其內部工具。例如其“Caffe2”框架“部署到超過10億臺裝置,其中約75%是基於Android的,其餘裝置執行iOS”,並且“針對生產規模和廣泛的平臺支援進行了最佳化”。在手機上執行模型的Caffe2直譯器完成了許多其他工作,例如計算透過“空間解析度調整”減少神經網路中“中間層”的處理時間。Caffe2還呼叫兩個獨立的“後端”系統,進一步最佳化卷積神經網路的執行,這是深度學習的主力。

最新版本的Facebook“PyTorch”框架於旨在“透過簡化透過研究探索開發的模型轉換為生產規模而過渡開銷很小的過程來加速AI創新。” 它還支援微軟和其他公司支援的“開放式神經網路交換”或ONNX規範。

Facebook內部還有一個完整的“工作流程”系統,可以找出如何最佳化邊緣的神經網路模型。它使用諸如“量化,k均值聚類,執行引擎選擇”之類的技巧來提高目標移動裝置的效能。例如,

量化

將32位浮點數的值轉換為8位整數,執行速度更快,但代價是精度較低。這就是Facebook推出的用於低密度卷積的最佳化函式庫——

QNNPACK

(已經開源),全稱是 Quantized Neural Network PACKage(量化神經網路包),目前,QNNPACK已經是PyTorch 1。0的一部分,在Caffe2裡就能直接使用。

QNNPACK的背景:

兩年前,Facebook就推出過一個加速包,叫做NNPACK,Caffe2Go用的就是它。基於Winograd變換和傅立葉變換,有效減少卷積計算裡的乘加運算 (Multiply-Add) 。這樣一來,3x3卷積可以只比1x1慢一倍,而不會慢8倍。

CV神經網路,大部分推理時間,都花在卷積和全連線運算上。這樣的運算和矩陣乘法密切相關:大核心的卷積可以分解成im2col和一個矩陣乘法。所以,有高效的矩陣乘法才能有高效的卷積網路。於是就有了QNNPACK。

Facebook應該如何應對人工智慧在智慧手機上的局面?

怎樣加速矩陣乘法?

Facebook應該如何應對人工智慧在智慧手機上的局面?

矩陣乘法,A x B = C。C裡面的每一個元素,都可以看成A中某行和B中某列的點乘。

但直接在點乘基礎上計算的話,一點也不快,會受到儲存頻寬的限制。

Facebook應該如何應對人工智慧在智慧手機上的局面?

如果,能同時計算A中多行和B中多列的點乘,即MRxNR,就能給運算速度帶來猛烈的提升。

記憶體和快取的節省

模型訓練,可能更需要高精度。但在訓練完成後,推理部分對精度的需求可能就沒有那麼高了。

低精度的計算,有時對推理的準確性不會產生明顯的影響。而這樣的運算,不需要太大儲存,並節省能源,有助於把AI部署在移動端。

QNNPACK用的線性量化 (Linear Quantization) 方案,與安卓的神經網路API相容。

與其他庫不同,QNNPACK把矩陣A、B都放進一級快取 (L1 Cache) ,目標是把所有對運算過程並不非常必要的記憶體轉換 (Memory Transformations) 都刪掉。

QNNPACK可以在一次微核心呼叫 (Microkernel Call) 裡,處理A和B。不需要在微核心之外累積32位的中間結果,QNNPACK把32位的中間值融合進微核心,然後寫出8位值,節省了儲存頻寬和快取。

開發團隊用谷歌的視覺框架MobileNetV2裡面的影象分類模型來測試。拿TensorFlow Lite做對手,和QNNPACK比了一場。結果是,不論是在高階智慧機,還是普通智慧機身上,QNNPACK比TensorFlow Lite幾乎快一倍。

Facebook應該如何應對人工智慧在智慧手機上的局面?包小納2019-01-11 00:20:38

臉譜已經很智慧化了,估計你在國內無法體驗吧,如果有機會,你可以看看臉譜的推送功能,完全依託系統沉澱資料,簡單的描述就是 你用微信抖音都找不回來的人,臉譜可以從win98時代給你翻出來;