MindSpore Lite 1.1 在端侧模型训练、算子性能优化、模型小型化、加速库自动裁剪工具、语音类模型支持、Java接口开放、模型可视化等方面进行了全面升级,升级后的版本更轻、更快、更易用
大家可以到官网下载对应的MindSpore Lite: https://www.mindspore.cn/tutorial/lite/zh-CN/r1.1/use/downloads.html
端云IR统一,云侧训练模型可直接支持端侧重训云侧混合精度训练与端侧推理协同提升推理性能
通过NPU/CPU/GPU异构并行最大化发挥硬件算力,高效内核算法+汇编指令优化缩短推理时延不依赖任何第三方库,底层算子库使用C语言+汇编开发。
支持第三方模型TensorFlow Lite、Caffe、ONNX离线转换,使用户可快速切换后端;提供量化工具、图片数据处理等功能方便用户的部署和使用;
覆盖手机、IoT等各种智能设备;支持ARM CPU、GPU、NPU等多种硬件平台、支持Android/iOS操作系统;支持端侧推理及训练;
(1)算子融合:支持多达20+常见的融合,减少内存读写和计算量
(2)算子替换:支持常见的算子替换,通过参数值替换减少计算量
(3)算子前移:移动slice相关算动到计算图前,减少冗余计算
2.算子优化
对于CPU硬件,影响算子指令执行速度的关键因素包括了L1/L2缓存的命中率以及指令的流水布,MindSpore端侧CPU算子优化手段包括:
(1)数据的合理排布:MindSpore CPU算子采用NHWC的数据排布格式,相比NC4HW,channel方向不需要补齐至4,更省内存;相比NCHW,卷积单元的点更加紧凑,对缓存更友好;此外,算子间也不再涉及layout转换。
(2)寄存器的合理分配:将寄存器按照用途,划分为feature map寄存器、权重寄存器和输出寄存器,寄存器的合理分配可以减少数据加载的次数。
(3)数据的预存取,通过prefetch/preload等指令,可以提前将数据读到cache中。
(4)指令重排,尽量减少指令的pipeline stall。
(5)向量化计算,使用SIMD指令,如ARM NEON指令,X86 SSE/AVX指令等
丰富的量化策略,精度接近无损
MindSpore Lite训练后量化工具提供权重量化和全量化两种方法,支持1~16bit量化,支持分类,检测,NLP等多种模型
移动终端上的推理框架,通过模型解释的方式来进行推理,这样的方式可以支持多个模型以及跨硬件平台,但是需要额外的运行时内存(MCU中最昂贵的资源)来存储元信息(例如模型结构参数)。MindSpore for Micro的CodeGen方式,将模型中的算子序列从运行时卸载到编译时,并且仅生成将模型执行的代码。它不仅避免了运行时解释的时间,而且还释放了内存使用量,以允许更大的模型运行。这样生成的二进制大小很轻,因此具有很高的存储效率。
MindSpore在框架的设计上进行了分层设计,将端云共用的数据结构和模块解耦出来,在满足端侧轻量化的同时,保持了端云架构的一致性
(1)统一IR:MindSpore core的统一lR,保证了端云模型/算子定义的一致性,使得云侧训练的模型可以无缝的部署在端侧。同时,对于端侧训练,可以和云侧使用一致的R进行模型的重训。
(2)公共pass:为了提升性能,训练好的模型在执行推理前,需要提前做一些优化手段,这些优化包括了融合、常量折叠、数据排布的调整等等。对于端云共享的优化,同样也是包含在MindSporecore模块中,只不过对于云侧推理,这些优化是在线推理时去执行的,而对于移动终端这些优化在执行推理前离线完成。
(3)统一接口:MindSpore设计了端云统一的C++接口。统一的C++接口的用法尽量与Python接口保持了一致,降低了学习成本。通过统一接口,用户可以使用一套代码在不同的硬件上进行推理。
(1)支持30+反向算子,提供SGD、ADAM等常见优化器及CrossEntropy/SparsCrossEntropy/MSE等损失函数;既可从零训练模型,也可指定特定网络层微调,达到迁移学习目的;
(2)已支持LeNet/AlexNet/ResNet/MobileNetV1/V2/V3和EffectiveNet等网络训练,提供完整的模型加载,转换和训练脚本,方便用户使用和调测;
(3)MindSpore云侧训练和端侧训练实现无缝对接,云侧模型可直接加载到端侧进行训练;
(4)支持checkpoint机制,训练过程异常中断后可快速恢复继续训练;
实践一下:
2-1在 MindSpore model_zoo下载模型mobilenetv2.mindir( https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite), 使用MindSpore lite converter 转成.ms 模型,请保留所使用的模型转换命令和模型转换截图
1.按要求打开链接找到指定的模型文件下载下来备用
2.把文件放到MindSpore lite converter文件夹下
因为我这里是直接把文件夹放到了桌面,在CMD中进到这个文件环境目录里
cd c: \Users\Administrator\Desktop\MindSporePetClassification\converter
3.将.mindir模型转换为.ms 模型
call converter_lite --fmk=MINDIR --modelFile=c:\Users\Administrator\Desktop\MindSporePetClassification\converter\mobilenetv2.mindir --outputFile=Jack20
注意:其中c:\Users\Administrator\Desktop\MindSporePetClassification\converter\mobilenetv2.mindir代表生成的mindir文件,而--outputFile定义转换后MS文件的名称。
成功后,会在converter文件夹中生成对应的.ms文件。
[1]www.mindspore.cn
[2]gitee.com/mindspore
[3]github.com/mindspore-ai