MNN技术的诞生以及未来的发展计划
署名2020-12-30

MNN技术的诞生源于淘系技术部的一群对技术充满热情的同学,在充分的行业调研后认为当时的推理引擎如TFLite不足以满足手机淘宝这样一个亿级用户与日活的超级App。于是我们从零开始自己搭建了属于阿里巴巴的推理引擎MNN。1年前的这个时候,MNN技术在Github上开源。它比其他的推理引擎更快更轻量,更符合手机淘宝这样庞大、复杂的生产部署环境。今年3月份,MNN技术的引擎设计与优化理念还获得了学术界的认可,在MLSys2020上发表了论文,并进行了oralpresentation。  

开源1年以来,获益于公司内外的用户反馈和业务推动,MNN技术在许多方面都取得了长足的进步。在阿里巴巴集团内部得到广泛推广,成为了端上推理引擎的事实标准,覆盖了如手机淘宝、手机天猫、优酷、钉钉、闲鱼等20多个App。新添了模型训练的支持,从此MNN技术不再是单纯的推理引擎,而是具有推理+训练能力的深度学习引擎。基于MNN技术的训练能力,我们可以进行Quantization-AwareTraining(QAT)。在MobileNet上,MNN技术量化训练之后的模型准确率几乎不降。  

持续投资于异构硬件后端的优化,尤其是利用ARMv8.2指令集,获得了两倍的性能提升。进一步完善Python工具链,累计新增超过150个接口。开源了应用层开箱即用的解决方案MNNKit,包含了人脸跟踪与检测、人像分割、手势识别场景的解决方案。开办了三期《MNN学院》直播(1期,2期,3期),增加了与用户们交流,也获得了忠粉们的大量高质量反馈意见。  

截止到今天,MNN技术在开源社区获得了近4000的GithubStars,这是大家对我们的工作所投的4000张认可票,也是鞭策我们完善MNN技术的动力。近日,MNN技术发布了1.0.0正式版本。自此,MNN技术不再被Github贴上“Pre-release”的标签了!相较于0.2.2版本,1.0.0版本的主要升级在于:模型训练、异构性能和Python工具链。  

一、MNN技术的模型训练:  

(1)模型构建:  

MNN技术支持使用Express(表达式)接口来构建模型,如下例所示,接口还是比较简洁明了的。模型的构建、训练和保存具体可以参考说明文档。以MNIST数据集+Lenet网络为例,一个epoch60000张图片,一般可达到97-98%的准确率。性能上,同款MBP上,MNN比PyTorch和Caffe都有明显优势;而手机上,MNN也达到了完全可用的性能水准。  

(2)量化训练:  

模型量化既可以降低模型大小,又可以利用硬件特性提升推理性能,可谓业务应用必备之选。但美中不足之处在 于,模型量化会带来一定的精度损失——对于精度攸关的项目,就难免要做出艰难的选择了。为此,MNN技术借助自身模型训练能力,实现了模型训练量化,具体实现可以参考说明文档。精度和压缩率方面。  

2020年,我们计划每个季度发布一个稳定版本。未来的计划,主要集中在性能、训练、NPU支持和模型压缩。性能是MNN技术的立身之本,相信很多朋友选择MNN技术,也主要出于它飙车般的性能。有兴趣的朋友,可以去看看MNN技术发表在今年MLSys的论文解读。CPU上,移动设备方面,ARMv8.2将是新手机的主流,上文所展示2倍加速比非常诱人,我们会进一步挖掘ARMv8.2的优化空间;其他平台方面,x86的性能在单机训练、服务端推理的场景中举足轻重,会是性能优化的另一个目标。  

GPU上,我们会聚焦Vulkan——Android下一代GPGPUAPI的事实标准。MNN最新拥有的训练能力已经通过Express(表达式)接口支持常用模型的训练、量化、蒸馏,我们会进一步完善训练能力,添加更多算子和求导的支持,以支持更多的模型。  

NPU具有超高的性能、超低的能耗,将是未来手机的标配。NPU的支持,也是许多MNN技术用户经常在钉钉群里提出的需求。MNN技术在未来的1年,会逐步支持更多的NPU,请大家拭目以待!MNN技术目前已经拥有Post-trainingquantization和Quantization-awaretraining的能力。我们会持续投入模型压缩,给业界提供更多优秀的、即插即用模型压缩算法。