華為在20年9月份開源了MindSpore Lite 1.0.0版本之后,其接口易用性、算子性能與完備度、第三方模型的廣泛支持等方面,得到了眾多手機應用開發者的廣泛認可。MindSpore Lite為HMS Core AI領域提供了全場景AI推理框架,支撐華為手機的相機、圖庫、錢包、瀏覽器的二維碼掃描、物體識別等AI相關模塊,為各類華為穿戴、智慧屏等設備提供基礎AI服務。同時,作為HMS Core開放給全球開發者接入的重要能力之一,華為機器學習服務已為全球1000+應用接入,日均調用量超過3億。
目前,在21年新年伊始,華為發布了MindSpore Lite 1.1.0版本,在算子性能優化、模型小型化、加速庫自動裁剪工具、端側模型訓練、語音類模型支持、Java接口開放、模型可視化等方面進行了全面升級,升級后的版本更輕、更快、更易用,新特性也會體現到HMS Core的新版本中。
1. 算子庫優化與擴展
推理性能優化是本次版本的重頭戲,除了持續的ARM CPU(FP16/FP32/INT8)性能優化,ARM GPU和X86_64的優化也是本次的亮點。GPU方面我們除了傳統的算子優化,還加入了在線融合、AutoTuning等技術,使得ARM GPU推理性能大幅提升;同時為了更好的支持PC側推理,在X86_64算子方面我們做了大量匯編層面的優化;經過大量模型的實測,MindSpore Lite 1.1.0版本在推理性能方面在業界各類框架中極具競爭力。
1.1 ARM CPU優化
我們從引入減少計算量的更優算法,到盡可能減少硬件訪存從而提高指令吞吐量,MindSpore Lite 的CPU算子性能大幅提升。我們使用TF Hub官網上100+端側預置模型進行了推理時延對比測試,測試結果顯示在Mate30/P30等高端機型上MindSpore Lite已全面超越官網數據,在P20等中低端機型上推理性能優於官網數據的占比也達到97%。
1.1.1 FP16推理性能
MindSpore Lite全面支持ARMv8.2的FP16推理,推理時延基本達到了FP32類型推理的二分之一,在推理時延大幅降低的同時精度滿足業務要求;我們的FP16推理方案已經在華為HMS MLKit和華為手機預置的各類AI服務中普遍應用。
由於TF Lite不支持FP16推理,所以在FP16推理性能對比測試環節中我們只選擇了MNN最新的1.1版本,從測試結果看MindSpore Lite在FP16推理時延更低,性能表現更好。
華為Mate30上網絡整體時延對比情況
華為Mate30上FP16推理時延對比
驍龍865+上FP16推理時延對比
1.1.2 Int8量化模型推理性能
對於量化算子,當前版本MindSpore Lite實現了在算法層面加入如Convolution Kernel為3x3的Winograd優化算法(目前主要針對非ARMv8.2機型),在支持ARMv8.2的高端機上使用SDOT指令對MatMul、Fully Connection、Convolution等算子進行優化,以及提高底層緩存命中率的一系列優化策略,使得MindSpore Lite量化推理性能得到大幅提升,相較於FP16推理有40%+的性能提升。
我們選擇了TF Lite最新2.4版本和MNN最新的1.1版本進行推理性能對比測試,使用的模型為TF Hub官方預置的量化模型(測試過程中我們發現MNN存在大量量化模型無法轉換問題,甚至TF Lite對自家模型也存在轉換問題),從測試結果看MindSpore Lite對量化模型無論在支持度還是推理性能方面,時延都是最低,表現最好。
華為Mate30上量化網絡整體時延對比情況
ARMv8.2機型測試
驍龍865+上量化模型時延對比
ARMv8機型測試
華為P20上量化模型時延對比
1.1.3 FP32推理性能
同時為了確保在低端CPU上使用MindSpore Lite推理時能夠同樣獲得業界最優的推理性能,我們持續對FP32的推理性能進行了優化。我們在華為P20上以TFLite(2.4版本)、MNN(1.1版本)作為對比對象,進行了benchmark性能測試,從測試結果中可以看出MindSpore Lite FP32推理時延還是最低,表現最好,但和其他框架的差距不大。
華為P20上量化模型時延對比
1.2 ARM GPU優化
MindSpore Lite 1.1版本我們對GPU推理性能進行了重點優化,除了在算子層面進行了常規優化外,還增加了在線融合、AutoTuning、OpenCL kernel二進制cache機制等多種優化方式,使得整體性能較MindSpore Lite 1.0有25%+的提升;
我們同樣在華為Mate30上使用TF Hub官網100+預置模型與MNN(1.1版本)和TF(2.4版本)進行了GPU推理性能對比測試,可以從下圖的測試結果看出MindSpore Lite GPU推理性能在大部分模型時延上都是最低,MNN則延遲都比較高。
華為Mate30上GPU FP32推理時延對比
1.3 X86_64 CPU優化
本次版本我們還對X86_64平台上的推理性能進行了大量優化工作,我們在Intel Core i7-8700的CPU上與Intel OpenVINO和MNN在幾個經典CV類網絡上進行了benchmark測試,從測試結果看MindSpore Lite時延同樣最低;
Intel Core i7-8700 X86_64 CPU推理性能對比
1.4更多的融合
當前MindSpore Lite版本已經基本覆蓋了機器視覺領域通用的卷積相關融合pattern,同時針對基於Transformer結構的語音模型和LSTM結構的模型進行了深度融合優化,主要包括將小算子融合成Layernorm、LSTM等大算子,多個MatMul融合成BatchMatMul算子,Slice算子切分矩陣的前移融合等,使得語音類模型獲得20%+的提升,后續我們將嘗試融合pattern的自動schedule功能。
2. 算子完備度擴展
MindSpore Lite支持包括ARM CPU、ARM GPU、X86 CPU、Kirin NPU、MTK APU在內的多種硬件平台。
2.1 ARM CPU
MindSpore Lite是目前端側推理框架中CPU算子支持最豐富的框架之一,當前我們的模型轉換工具支持TF Lite(100個)、TF(53個)、ONNX(96個)以及Caffe(26個)等第三方框架算子定義的解析,做到了高兼容性,上文性能測試中我們也提到過MNN對很多模型無法轉換,TF Lite對自家官網預置模型的支持度也不夠完善;MindSpore Lite則實現了121個FP32,55個FP16以及71個INT8 CPU算子;而此次的1.1版本我們對控制流算子也進行一次大的調整與完善,以便更好的支持語音類模型。
2.2 ARM GPU
新增OpenCL算子10+,當前支持GPU算子總數為58,基本實現常見CV類網絡覆蓋;新增在線融合、Auto Tuning等特性支持,同時支持權重量化,實現8bit權重量化網絡在GPU整網運行。
2.3 Kirin NPU
1.1版本我們完善了對華為麒麟NPU硬件平台的支持,增加了對Kirin 9000芯片的支持,同時新增了50+ NPU算子支持,從而實現支持大部分CV類場景在NPU上的加速執行;我們在華為最新的Mate 40手機上進行了幾個典型網絡的benchmark驗證,NPU上推理時延較CPU推理有明顯提升;
Mate 40上NPU和CPU FP32/16推理時延對比
3. 支持端側訓練
由於使用公共數據集訓練的模型與真實用戶場景存一定的偏差,比如人臉識別、語音識別等場景,我們往往需要利用本地數據對預訓練模型進行微調,從而提高本地模型推理的精度,改善用戶體驗。
MindSpore Lite 1.1版本我們將端側訓練框架進行了開源,首個版本給我們帶來了以下特性:
-
支持30+反向算子,提供SGD、ADAM等常見優化器及CrossEntropy/SparsCrossEntropy/MSE等損失函數;既可從零訓練模型,也可指定特定網絡層微調,達到遷移學習目的;
-
已支持LeNet/AlexNet/ResNet/MobileNetV1/V2/V3和EffectiveNet等網絡訓練,提供完整的模型加載,轉換和訓練腳本,方便用戶使用和調測;
-
MindSpore雲側訓練和端側訓練實現無縫對接,雲側模型可直接加載到端側進行訓練;
-
支持checkpoint機制,訓練過程異常中斷后可快速恢復繼續訓練;
我們的端側訓練框架已經在華為部分設備的AI應用比如家庭相冊等場景進行了商用,並取得了很好的用戶體驗。
4. 訓練后量化
隨着AI應用在端側設備部署越來越普遍,而受制於端側資源的局限性,對於模型小型化和推理性能提升的挑戰日益倍增。MindSpore Lite提供了簡單實用的訓練后量化功能,最大程度壓縮模型大小,減小內存占用,提升推理速度,降低功耗。
訓練后量化相較於量化重訓具有兩個明顯優勢,一是無需大量訓練數據集,二是無需重新訓練,離線快速轉換。MindSpore Lite訓練后量化工具提供權重量化和全量化兩種方法,支持1~16bit量化,支持分類,檢測,NLP等多種模型。
為保障訓練后量化模型精度損失小,我們采用pipeline組合量化方法,一階段采用常規線性量化手段對權重和激活值進行量化,二階段對量化誤差進行分析,利用統計學方法對量化模型進行校正,補償因量化帶來的精度損失。
Pipeline 組合量化
以TF官網MobileNet_v2模型為例,MindSpore Lite訓練后量化A8W8(激活值8bit量化、權重8bit量化)精度與FP32模型相比,經損失校正后,精度損失由0.82%降到0.4%,同樣適用7bit量化下,精度損失仍不超過1%。
訓練后全量化mobilenet_v2模型精度對比
我們在HMS Face場景下模型進行了INT8權重量化(模型size范圍364KB~2.9MB),實際端到端識別精度完全滿足服務要求。權重量化精度損失矯正方案的相對精度誤差對比如下,可以看到損失矯正方案下量化精度損失有明顯降低。
Face場景模型權重量化精度損失矯正方案相對精度損失對比
經內部大量測試和實際商用交付反饋,pipeline組合量化方法效果顯著,甚至小至300KB的模型,經INT8量化壓縮后精度仍滿足商用要求。
5. 易用性增強
5.1 加速庫自動裁剪工具
為了滿足部分對發布包大小有極致小型化訴求的場景,我們提供了一個一鍵式裁剪工具,該工具可以根據用戶指定的模型列表,自動裁剪出足以運行列表中指定模型的最小化MindSpore Lite版本。
5.2 離線工具參數精簡
我們對離線轉換工具參數進行了精簡,最大程度地提高轉換工具的易用性,讓開發者在轉換三方模型時,無需感知三方模型的量化類型、輸入輸出節點名稱和對應的數據類型等。
5.3 支持Java接口
1.1版本正式開放了Java接口,以方便安卓開發者更簡單的使用MindSpore Lite進行應用開發。
5.4 模型可視化
為了方便開發者調試,我們在Netron開源社區提交了支持MindSpore Lite模型可視化的代碼,現在開發者可以使用Netron工具可視化MindSpore Lite模型。相信能給開發者調試模型,尤其是一些結構復雜的模型,帶來極大的方便。
6. 開放更多的端側預置模型
為了方便開發者在端側快速部署自己的AI業務,MindSpore開放了更多的適合端側使用的模型,其中不乏一些MindSpore首發的原創模型,這些模型可以方便的在MindSpore Hub上獲取。
6.1 使用SCOP算法在Oxford-III Pet數據集對ResNet50網絡剪枝的模型
SCOP:Scientific Control for Reliable Neural Network Pruning,是華為諾亞方舟實驗室和北京大學聯合提出了一種科學控制機制最小化剪枝節點對網絡輸出的影響。采用這種剪枝方法,能夠實現ImageNet數據集上僅損失ResNet101網絡0.01%的top-1准確率,模型參數量和計算量分別減少57.8%和60.2%,顯著優於SOTA方法。模型鏈接:https://www.mindspore.cn/resources/hub/details?noah-cvlab/gpu/1.0/resnet-0.65x_v1.0_oxford_pets
6.2 基於SLB輕量化技術的模型VGG-Small
該模型使用華為諾亞方舟實驗室入選NeurIPS 2020模型輕量化技術中的SLB量化技術(Searching for Low-Bit Weights in Quantized Neural NetWorks),在CIFAR10上基於2-bit weight和2-bit activation量化得到的端側模型。模型鏈接:https://www.mindspore.cn/resources/hub/details?noah-cvlab/gpu/1.0/VGG-Small-low-bit_cifar10
如果想了解更多關於以上MindSpore首發模型中使用的輕量化技術,請參考:https://mp.weixin.qq.com/s/H1zg3ezZDdXQ-IQ7ki0Mtw
測試數據來自於華為內部實驗室測試數據,有疑問可以在MindSpore論壇上進行反饋:https://bbs.huaweicloud.com/forum/forum-1076-1.html
MindSpore開源代碼倉鏈接:https://gitee.com/mindspore/mindspore
原文鏈接:https://developer.huawei.com/consumer/cn/forum/topic/0202453926225910779?fid=18
原作者:胡椒