臉書宣布開源Quantized Neural Network PACKage(QNNPACK)函式庫,這是一個最佳化行動人工智慧的高效能核心函式庫,透過QNNPACK開發者可以在行動裝置進行高階電腦視覺的任務,執行像是Mask R-CNN和DensePose這類演算法,而且還能在小於100ms的時間內執行圖像分類,即便在硬體規格較差的行動裝置上,也能維持良好的效能。

作為前些時日釋出深度學習框架PyTorch 1.0平臺的一部分,臉書接著開源QNNPACK函式庫以支援量化推理(Quantized Inference)。開發者只要透過Caffe2模型表示(Model Representation)就能立即使用QNNPACK。

由於行動裝置的運算能力比資料中心的伺服器低10到1,000倍,因此執行最先進的人工智慧演算法,勢必需要經過諸多調整,才有可能在硬體的限制下擠出可用性。QNNPACK提供高效能卷積、反卷積以及在量化張量(Quantized Tensors)上完全連接運算的實作,而在QNNPACK出現之前,沒有針對這類常見的如分組卷積或是擴張卷積等神經網路原語(Primitive),而這也使得ResNeXt、CondenseNet和ShuffleNet等研究型的模型,都並未獲得充分的利用。

在兩年前,臉書開始在手機中部署神經網路,而大多數的電腦視覺基礎架構都建立在大型核心的卷積運算上,但缺點是需要高密度運算資源支援。Caffe2Go使用一個名為NNPACK的核心函式庫,使用威諾格拉德轉換或是快速傅立葉轉換,以實現漸進快速卷積演算法,而這比起原本的實作,少了數倍的乘積累加運算,減少運算的程度臉書舉例,能夠讓3x3的卷積運算只比1x1卷積運算慢兩倍,而非原始算法慢9倍。

但電腦視覺領域發展快速,並且新的神經網路基礎架構使用的卷積演算法類型,不再受惠於快速卷積演算法,包括1×1卷積、分組卷積、跨旋轉卷積、擴張卷積和深度卷積,由於這些演算法本身運算密度就較低,低精度運算同時也減少了記憶體頻寬的使用。

電腦視覺的神經網路在卷積和完全連接運算子上,大部份花費在推理時間上,而這些運算子和矩陣相乘密切相關,完全連接運算子和1×1卷積都可以直接對應到矩陣相乘,而且大核心的卷積也可以被分解成為im2col的記憶體佈局轉換和矩陣相乘的組合,所以卷積神經網路中的有效推理問題,其實就是矩陣相乘的實作問題,在線性代數函式庫中稱為GEMM。為此過臉書稍微修正了矩陣運算原語為PDOT (Panel Dot Product) 微核心,能讓運算受計算限制,以實現高效能矩陣相乘。

PyTorch和其他深度學習框架通常使用浮點數來表示訓練期間神經網路的權重或是神經元,但是在模型訓練結束之後,浮點數以及運算變得不那麽必要,因為許多類型的模型也適用於低精度整數計算,進行推理也不會有明顯的精度損失。低精度跟單精度與半精度浮點數兩種相比,記憶體使用量減少2到4倍,而這有助於進一步將神經網路模型保存至行動裝置處理器的小型快取中,並提高受限於記憶體頻寬運算的效能,提高電力效率,並且在許多類型的硬體上,能提高運算的吞吐量。

QNNPACK使用與Android神經網路API相容的線性量化解決方案。雖然QNNPACK也是利用PDOT微核心,就像其他BLAS(Basic Linear Algebra Subprograms)函式庫一樣,但它更專注於8位元元素的量化張量,並為行動人工智慧使用案例,帶來完全不同的效能最佳化角度。大多數BLAS函式庫都針對科學計算使用案例,其矩陣大至數千個雙精準度浮點數元素,但是QNNPACK的輸入矩陣來源使用低精度,為行動裝置特化的電腦腦視覺模型,使用完全不同的維度。QNNPACK和其他GEMM實作最大的區別,就是刪除了不必要的記憶體轉換,以最佳化記憶體使用情況。

臉書公開QNNPACK端到端基準測試的效能表現,在量化最先進的MobileNet v2架構中,基於QNNPACK的Caffe2運算子,在各種手機上執行的速度比TensorFlow Lite快約2倍。與QNNPACK一起,臉書也同時開源了Caffe2量化MobileNet v2模型,能提供比目前精準度第一名的TensorFlow模型,還要精確1.3%的結果。

QNNPACK已經整合到了臉書各系列應用程式,並已經將其部署到了全球超過十億的行動裝置上了。接下來臉書還要強化QNNPACK的效能增強,包括在FP16格式下的低精度計算,以及利用NEON內積指令和16位元累加,讓更多輕量人工智慧可以在行動裝置上執行。另外,臉書也希望PyTorch API能支援QNNPACK運算子,並透過擴充套件為行動開發人員提供更豐富的工具。


Advertisement

更多 iThome相關內容