华为在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版本咱们将端侧训练框架进行了开源,首个版本给咱们带来了以下个性:
1) 反对30+反向算子,提供SGD、ADAM等常见优化器及CrossEntropy/SparsCrossEntropy/MSE等损失函数;既可从零训练模型,也可指定特定网络层微调,达到迁徙学习目标;
2) 已反对LeNet/AlexNet/ResNet/MobileNetV1/V2/V3和EffectiveNet等网络训练,提供残缺的模型加载,转换和训练脚本,不便用户应用和调测;
3) MindSpore云侧训练和端侧训练实现无缝对接,云侧模型可间接加载到端侧进行训练;
4) 反对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/reso...
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/reso...
如果想理解更多对于以上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
原作者:胡椒