臉書開源移動深度學習庫,性能是TF Lite的2倍
臉書宣布開源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的核心函數庫,使用威諾格拉德轉換或是快速傅立葉轉換,以實現漸進快速卷積演算法,而這比起原本的實例,少了數倍的乘積累加運算,減少運算的程度臉書舉例,能夠讓3×3的卷積運算只比1×1卷積運算慢兩倍,而非原始演算法慢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運算符,並通過擴展套件為移動開發人員提供更豐富的工具。
※CSS惡意攻擊僅這15行程序代碼就可讓iOS設備重啟
※時速215km/h凌空攔截飛箭!創金氏世界紀錄
TAG:十輪網 |