超轻量AI引擎MindSpore Lite
超轻量AI引擎MindSpore Lite
揭秘一下端上的AI引擎:MindSpore Lite。
MindSpore Lite是MindSpore全场景AI框架的端侧引擎,目前MindSpore Lite作为华为HMS Core机器学习服务的推理引擎底座,已为全球1000+应用提供推理引擎服务,日均调用量超过3亿,同时在各类手机、穿戴感知、智慧屏等设备的AI特性上得到了广泛应用。
MindSpore Lite 1.0.0 已经开源,开源之后,其接口易用性、算子性能与完备度、第三方模型的广泛支持等方面,得到了众多手机应用开发者的广泛认可。最新的MindSpore Lite 1.1.0 在算子性能优化、模型小型化、加速库自动裁剪工具、端侧模型训练、语音类模型支持、Java接口开放、模型可视化等方面进行了全面升级,升级后的版本更轻、更快、更易用。接下来看一下 MindSpore Lite 1.1.0 。
获取1.1.0版本MindSpore Lite:https://www.mindspore.cn/tutorial/lite/zh-CN/r1.1/use/downloads.html
1. 算子库优化与扩展
1.1 性能优化
推理性能优化依然是本次版本的重头戏,除了持续的ARM CPU(FP16/FP32/INT8)性能优化,ARM GPU和X86_64的优化也是本次的亮点,GPU方面除了传统的算子优化,还加入了在线融合、AutoTuning等技术,使得ARM GPU推理性能大幅提升;同时为了更好的支持PC侧推理,在X86_64算子方面做了大量汇编层面的优化;经过大量模型的实测,MindSpore
Lite 1.1.0 在推理性能方面在业界各类框架中极具竞争力。
1.1.1 ARM CPU优化
从引入减少计算量的更优算法,到尽可能减少硬件访存从而提高指令吞吐量,MindSpore
Lite 的CPU算子性能大幅提升。使用TF Hub官网上100+端侧预置模型进行了推理时延对比测试,测试结果显示在Mate30/P30等高端机型上MindSpore Lite已全面超越TFLite,在P20等中低端机型上推理性能优于TFLite的占比也达到97%。
- FP16推理性能
 
MindSpore
Lite全面支持ARMv8.2的FP16推理,推理时延基本达到了FP32类型推理的二分之一,在推理时延大幅降低的同时精度满足业务要求;FP16推理方案已经在华为HMS MLKit和华为手机预置的各类AI服务中普遍应用。
由于TF Lite不支持FP16推理,所以在FP16推理性能对比测试环节中只选择了阿里MNN最新的1.1版本,从测试结果看MindSpore Lite在FP16推理性能上展现出一定的优势。

华为Mate30(麒麟990)上网络整体时延对比情况
 
华为Mate30(麒麟990)上FP16推理时延对比
 
三星Note20(骁龙865+)上FP16推理时延对比
- 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(麒麟990)上量化网络整体时延对比情况
ARMv8.2机型测试

三星Note20上量化模型时延对比
ARMv8机型测试
华为P20上量化模型时延对比
- FP32推理性能
 
同时为了确保在低端CPU上使用MindSpore Lite推理时,能够同样获得业界最优的推理性能,持续对FP32的推理性能进行了优化。在华为P20上以TFLite(2.4版本)、MNN(1.1版本)作为对比对象,进行了benchmark性能测试,从测试结果中可以看出MindSpore Lite FP32推理性能依然处理领先地位,但与其他框架的差距正在缩小。

华为P20上FP32推理时延对比
1.1.2 ARM GPU优化
MindSpore Lite 1.1.0 版本对GPU推理性能进行了重点优化,除了在算子层面进行了常规优化外,还增加了在线融合、AutoTuning、OpenCL kernel二进制cache机制等多种优化方式,使得整体性能较MindSpore Lite 1.0 有25%+的提升;
同样在华为Mate30上使用TF Hub官网100+预置模型与MNN(1.1版本)和TF(2.4版本),进行了GPU推理性能对比测试,可以从下图的测试结果看出MindSpore Lite GPU推理性能在大部分模型上优于TF Lite,而对于MNN则优势明显。

华为Mate30上GPU FP32推理时延对比
1.1.3 X86_64 CPU优化
本次版本还对X86_64平台上的推理性能进行了大量优化工作,在Intel
Core i7-8700的CPU上与Intel
OpenVINO和MNN在几个经典CV类网络上进行了benchmark测试,从测试结果看MindSpore Lite性能相比于MNN和OpenVINO都有一定的优势。

Intel Core i7-8700 X86_64 CPU推理性能对比
1.1.4 更多的融合
当前MindSpore Lite版本已经基本覆盖了机器视觉领域通用的卷积相关融合pattern,同时针对基于Transformer结构的语音模型和LSTM结构的模型进行了深度融合优化,主要包括将小算子融合成Layernorm、LSTM等大算子,多个MatMul融合成BatchMatMul算子,Slice算子切分矩阵的前移融合等,使得语音类模型获得20%+的提升,后续将尝试融合pattern的自动schedule功能。
1.2 算子完备度扩展
MindSpore
Lite支持包括ARM CPU、ARM GPU、X86 CPU、Kirin
NPU、MTK APU在内的多种硬件平台。
1.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版本对控制流算子也进行一次大的调整与完善,以便更好的支持语音类模型。
1.2.2 ARM GPU
新增OpenCL算子10+,当前支持GPU算子总数为58,基本实现常见CV类网络覆盖;新增在线融合、Auto Tuning等特性支持,同时支持权重量化,实现8bit权重量化网络在GPU整网运行。
1.2.3 Kirin NPU
1.1版本完善了对华为麒麟NPU硬件平台的支持,增加了对Kirin 9000芯片的支持,同时新增了50+ NPU算子支持,从而实现支持大部分CV类场景在NPU上的加速执行;在华为最新的Mate 40手机上进行了几个典型网络的benchmark验证,NPU上推理时延较CPU推理有明显提升;

Mate 40上NPU和CPU FP32/16推理时延对比
2. 支持端侧训练 由于使用公共数据集训练的模型与真实用户场景存一定的偏差,比如人脸识别、语音识别等场景,往往需要利用本地数据对预训练模型进行微调,从而提高本地模型推理的精度,改善用户体验。

MindSpore Lite 1.1.0 版本将端侧训练框架进行了开源,首个版本给带来了以下特性:1. 支持30+反向算子,提供SGD、ADAM等常见优化器及CrossEntropy/SparsCrossEntropy/MSE等损失函数;既可从零训练模型,也可指定特定网络层微调,达到迁移学习目的;
2. 已支持LeNet/AlexNet/ResNet/MobileNetV1/V2/V3和EffectiveNet等网络训练,提供完整的模型加载,转换和训练脚本,方便用户使用和调测;
3. MindSpore云侧训练和端侧训练实现无缝对接,云侧模型可直接加载到端侧进行训练;
4. 支持checkpoint机制,训练过程异常中断后可快速恢复继续训练;
端侧训练框架已经在华为部分设备的AI应用比如家庭相册等场景进行了商用,并取得了很好的用户体验。
3. 训练后量化   随着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  | 
 ACC (On ImageNet)  | 
| 
 FP32  | 
 71.56%  | 
| 
 A8W8  | 
 71.16% (TF Lite官网后量化ACC:63.7%)  | 
| 
 A8W8(不做BiasCorrection)  | 
 70.74%  | 
| 
 A8W7  | 
 71.06%  | 
| 
 A7W7  | 
 70.78%  | 
训练后全量化mobilenet_v2模型精度对比
在HMS Face场景下模型进行了INT8权重量化(模型size范围364KB~2.9MB),实际端到端识别精度完全满足服务要求。权重量化精度损失矫正方案的相对精度误差对比如下,可以看到损失矫正方案下量化精度损失有明显降低。

Face场景模型权重量化精度损失矫正方案相对精度损失对比
经内部大量测试和实际商用交付反馈,pipeline组合量化方法效果显著,甚至小至300KB的模型,经INT8量化压缩后精度仍满足商用要求。
4. 易用性增强
4.1 加速库自动裁剪工具
为了满足部分对发布包大小有极致小型化诉求的场景,提供了一个一键式裁剪工具,该工具可以根据用户指定的模型列表,自动裁剪出足以运行列表中指定模型的最小化MindSpore
Lite版本。
4.2 离线工具参数精简
对离线转换工具参数进行了精简,最大程度地提高转换工具的易用性,让开发者在转换三方模型时,无需感知三方模型的量化类型、输入输出节点名称和对应的数据类型等。
4.3 支持Java接口
1.1版本正式开放了Java接口,以方便安卓开发者更简单的使用MindSpore Lite进行应用开发。
4.4 模型可视化
为了方便开发者调试,在Netron开源社区提交了支持MindSpore
Lite模型可视化的代码,现在开发者可以使用Netron工具可视化MindSpore Lite模型。相信能给开发者调试模型,尤其是一些结构复杂的模型,带来极大的方便。
超轻量AI引擎MindSpore Lite的更多相关文章
- 全场景AI推理引擎MindSpore Lite, 助力HMS Core视频编辑服务打造更智能的剪辑体验
		
移动互联网的发展给人们的社交和娱乐方式带来了很大的改变,以vlog.短视频等为代表的新兴文化样态正受到越来越多人的青睐.同时,随着AI智能.美颜修图等功能在图像视频编辑App中的应用,促使视频编辑效率 ...
 - MindSpore Lite整体架构介绍
		
MindSpore Lite整体架构介绍 MindSpore Lite框架的总体架构如下所示: 前端(Frontend): 负责模型生成,用户可以通过模型构建接口构建模型,将第三方模型和MindSpo ...
 - 几个小实践带你快速上手MindSpore
		
摘要:本文将带大家通过几个小实践快速上手MindSpore,其中包括MindSpore端边云统一格式及华为智慧终端背后的黑科技. MindSpore介绍 MindSpore是一种适用于端边云场景的新型 ...
 - 提升AI智能化水平,打造智慧新体验
		
内容来源:华为开发者大会2021 HMS Core 6 AI技术论坛,主题演讲<提升AI智能化水平,打造智慧新体验>. 演讲嘉宾:沈波,华为消费者AI与智慧全场景ML Kit产品总监 今天 ...
 - 昇思MindSpore全场景AI框架 1.6版本,更高的开发效率,更好地服务开发者
		
摘要:本文带大家快速浏览昇思MindSpore全场景AI框架1.6版本的关键特性. 全新的昇思MindSpore全场景AI框架1.6版本已发布,此版本中昇思MindSpore全场景AI框架易用性不断改 ...
 - PornHub 正式发布 AI自动标注色情演员引擎
		
http://igeekbar.com/igeekbar/post/501.htm Pornhub已经宣布推出一款全新的成人片识别引擎,这款引擎由AI驱动,使用计算机视觉技术自主检测和识别成人片内容以 ...
 - MindSpore图像分类模型支持(Lite)
		
MindSpore图像分类模型支持(Lite) 图像分类介绍 图像分类模型可以预测图片中出现哪些物体,识别出图片中出现物体列表及其概率. 比如下图经过模型推理的分类结果为下表: 类别 概率 plant ...
 - 华为全栈AI技术干货深度解析,解锁企业AI开发“秘籍”
		
摘要:针对企业AI开发应用中面临的痛点和难点,为大家带来从实践出发帮助企业构建成熟高效的AI开发流程解决方案. 在数字化转型浪潮席卷全球的今天,AI技术已经成为行业公认的升级重点,正在越来越多的领域为 ...
 - MindSpore特性支持类
		
MindSpore特性支持类 Q:请问MindSpore支持梯度截断吗? A:支持,可以参考梯度截断的定义和使用. Q:如何在训练神经网络过程中对计算损失的超参数进行改变? A:暂时还未有这样的功能. ...
 
随机推荐
- 分布式任务调度系统:xxl-job
			
任务调度,通俗来说实际上就是"定时任务",分布式任务调度系统,翻译一下就是"分布式环境下定时任务系统". xxl-job一个分布式任务调度平台,其核心设计目标是 ...
 - 记一次linux下安装ftp的愉快体验
			
三三两两,试了几次就出来了,挺开心的 linux安装vsftpd,请自行百度 贴出部分配置点 阿里云服务器,开发相关端口以及部分区域端口访问 /etc/pad.d/vsftpd添加部分注释 #%PAM ...
 - ZOJ 3736 模拟魔方
			
题意: 2*2*2的魔方,给你一个初始状态,和一个限定步数,问你在这么多步数条件下最多能有多少面拼好,(不是累加关系,是某一个状态的最多,最多是6); 思路: 最多是7步,所以直 ...
 - Linux文件共享服务之NFS
			
NFS(Network File System) 网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可 ...
 - androguard安装和体验
			
安装步骤按照官方教程https://code.google.com/p/androguard/wiki/Installation,下面记录下无法在ubuntu下apt-get的模块: python模块 ...
 - 如何以最简单的方式安装 KALI 渗透测试框架系统
			
0x01 第一步下载 KALI 百度搜索 KALI 官网,找到下载区,我选的是 64 位标准版,但是推荐下载 32 位(功能貌似更全) 这个为下载后的 iso 镜像文件 0x02 第二步打开虚拟机,配 ...
 - Python练习3-XML-RPC实现简单的P2P文件共享
			
XML-RPC实现简单的P2P文件共享 先来个百度百科: XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程过程调用.它是一套允许运 ...
 - Mybatis 遍历 List<Map<String,Object>>
			
在上一篇博客中总结了MyBatis Plus 实现多表分页模糊查询(链接在最后).返回类型是编写一个专门的vo类.这次是返回List < Map > 前言  编写一个专门的vo返回类,主 ...
 - Smss.exe加载win32k.sys过程总结
			
windows操作系统初始化 windows操作系统再初始化的过程中,当内核完全初始化而且各个组件也已经准备好后会加载一个个用户进程smss.exe(会话管理器),此进程会接着调用NtSetSyste ...
 - 28.HashSet
			
4.HashSet集合 4.1HashSet集合概述和特点[应用] 底层数据结构是哈希表 不能保证存储和取出的顺序完全一致 不可以存储重复元素 没有索引,不能使用普通for循环遍历 4.2HashSe ...