MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba
ARMv8.6-A
指令支持,支持了smmla
和bfmmla
指令的使用NNAPI
后端,能够利用Android设备上的NPU/APU/DSP进行计算.inst
指令,降低新指令对编译器的依赖新增ARMv8.6指令支持后,GemmInt8, GemmBF16性能提升
smmla
实现的GemmInt8
实测性能在矩阵规模为[1024, 1024, 1024]
时,性能相比sdot
提升为83.90%(图中33x33
项),接近理论性能(100%);模型性能提升20%左右。bfmmla
实现的GemmBF16
实测性能在规模为[1024, 1024, 1024]
时,性能相比fp16fmla
提升为91.53%(图中1024,1024,1024
项),接近理论性能;模型性能相比原来的bf16提升一倍以上。
MNN-NNAPI后端支持,NNAPI使用accelerator设备进行推理,在中端和高端设备上相比CPU单线程均有性能优势;在高端设备上相比CPU 4线程仍有性能优势。
CUDA性能优化,Depthwise卷积、Raster快速计算、Im2Col等优化,MobileNet/Squeezenet等模型性能提升
新增BinaryRelu-Fuse和对应的各后端实现,resnet模型性能提升
服务端推理 CUDA 性能提升
MNN-CoreML 后端支持免拷贝
kernel_size > 1
的量化卷积进行优化 ,离线量化工具(C++: quantized.out
,python: mnnquant
)json配置文件中增加"winogradOpt": true
,并将特征量化方法设置为"feature_quantize_method":"EMA"
即可使用
我们注意到,大量的机器学习工程师在从TensorFlow往PyTorch迁移。推理引擎对于PyTorch模型的原生支持尤为重要。虽然MNN已经支持了ONNX格式的模型,但是考虑到PyTorch自身长期的发展趋势,基于Torchscript格式的模型比ONNX更具通用性。
现在,MNNConvert支持在Mac、Windows、Linux平台下将所有的 TorchVision视觉模型 转换到MNN格式。
BF16 可以给中低端手机和高端机的小核带来性能收益,并且降低内存占用。经MNN团队内部测试,BF16相对于FP32在不同机型的中低端核心(A53 A55 A53kyro A55kyro)上,不同模型有 5%- 30%的优化。
BF16使用方法:
基于几何计算,MNN添加了CoreML的支持。在iPhone X之后,借助于Apple Neural Engine,相比于CPU,CoreML (ANE) 在视觉模型中约有5-6倍的性能提升。
在1.1.0版本的几何计算的基础上,本次发布中『几何计算』增加了对于循环算子(如Gather、BatchMatMul、LSTM)的GPU后端支持。
随着CPU性能优化的边际收益的降低,为了获得更高的性能,需要从模型结构本身着手,设计、裁剪出合适目标硬件和推理引擎的模型结构,以获得最佳的精度和性能。 基于此,MNN添加了随机稀疏和半结构化稀疏算子的ARM浮点实现 (原理见 ” Fast Conv Nets ” ),如下图所示:
经过MNN内部在各类机型和模型实测,随机稀疏率, 1x4半结构稀疏率 (沿输出通道OC分块,blockOC=4) 分别为0.6、 0.3时,推理性能将大于稠密实现性能。
随机稀疏率0.9时,MobileNet、NasNet、SqueezeNet各类模型中,在高、中、低端手机上的加速比为1.7倍 ~ 4.5倍;1x4半结构稀疏率0.9时,加速比为1.8倍 ~ 6.1倍。
离线量化工具中添加了激活非对称的支持,并且通过量化时更新BN参数,离线量化精度获得普遍提升。结合使用非对称量化+BN参数更新,MobileNet V2量化模型精度从71.05%提高到71.73%,进一步逼近浮点模型(71.90%)。 使用方法见: MNN/tools/MNNPythonOfflineQuant at master · alibaba/MNN · GitHub
支持ARMv8.2指令的设备占有率随着时间的推移逐渐上升,是MNN优化的重点之一。相比于MNN 1.1.x版本,MNN 1.2.0的ARMv8.2性能在各类视觉模型中有5% ~ 20%的提升,且与业界主流引擎对比处于领先地位。
MNN集中优化了X86-AVX2上的性能。目前在主流的视觉、时序模型中,MNN-AVX2后端相比于OpenVINO由20%到440%的性能优势,与ONNXRuntime相比,则有18%到60%的性能优势 (仅MobileNet V2略逊于OpenVINO/ONNXRuntime)。
取得如此性能成绩,且通用性持平或更胜一筹的前提下,相比于 Onnx / OpenVino 几十至几百M 的大小,MNN 库的体积却很小,仅 3M 不到。 此外,MNN 支持了 AVX512 / AVX512VNNI,相对于 AVX2 ,在浮点矩阵乘法有 60% 加速,Int8矩阵乘则有 200% 的加速。
随着移动App中的部署的各类深度学习模型数量增多,MNN团队发现,CPU占用率居高不下,会影响App稳定性和用户体验。基于此判断,我们重点优化OpenCL后端的性能(与主流引擎相比已处于领先地位),并且与内部业务方共同设计面向GPU模型,达到性能、精度双高的模型。性能数据如下图:
Features:
Bugfix / Refractor:
Features:
Optimize / Bugfix:
Features:
Bugfix:
Features:
Speed up / Bugfix