一年的打磨,MNN正式版发布!


一年的打磨,MNN正式版发布!

文章插图
作者|MNN团队
出品|阿里巴巴新零售淘系技术部
MNN 的诞生源于淘系技术部的一群对技术充满热情的同学,在充分的行业调研后认为当时的推理引擎如不足以满足手机淘宝这样一个亿级用户与日活的超级 App。
于是我们从零开始自己搭建了属于阿里巴巴的推理引擎 MNN。1年前的这个时候,MNN 在 上开源【1】 。它比其他的推理引擎更快更轻量,更符合手机淘宝这样庞大、复杂的生产部署环境 。今年3月份,MNN 的引擎设计与优化理念还获得了学术界的认可,在MLSys 2020 【2】上发表了论文,并进行了。
开源1年以来,获益于公司内外的用户反馈和业务推动,MNN 在许多方面都取得了长足的进步:
1. 在阿里巴巴集团内部得到广泛推广,成为了端上推理引擎的事实标准,覆盖了如手机淘宝、手机天猫、优酷、钉钉、闲鱼等20多个 App。
2.新添了模型训练的支持,从此 MNN 不再是单纯的推理引擎,而是具有推理+训练能力的深度学习引擎 。基于 MNN 的训练能力,我们可以进行 -Aware (QAT) 。在上,MNN 量化训练之后的模型准确率几乎不降 。
3.持续投资于异构硬件后端的优化,尤其是利用 ARMv8.2 指令集,获得了两倍的性能提升 。
4.进一步完善工具链,累计新增超过 150 个接口 。
5. 开源了应用层开箱即用的解决方案【3】,包含了人脸跟踪与检测、人像分割、手势识别场景的解决方案 。
6. 开办了三期《 MNN 学院》直播(1期【4】, 2期【5】, 3期【6】),增加了与用户们交流,也获得了忠粉们的大量高质量反馈意见 。
截止到今天,MNN 在开源社区获得了近 4000 的Stars,这是大家对我们的工作所投的 4000 张认可票,也是鞭策我们完善 MNN 的动力 。近日,MNN 发布了 1.0.0 正式版本 。自此,MNN 不再被贴上 “Pre-” 的标签了!相较于0.2.2版本,1.0.0 版本的主要升级在于:模型训练、异构性能和工具链 。下面,我们逐项说明 。
模型训练
?模型构建
MNN支持使用(表达式)接口来构建模型,如下例所示,接口还是比较简洁明了的 。模型的构建、训练和保存具体可以参考说明文档【7】 。
VARP x = inputs[0];x= conv1->forward(x);x= _MaxPool(x, {2, 2}, {2, 2});x= conv2->forward(x);x= _MaxPool(x, {2, 2}, {2, 2});x= _Convert(x, NCHW);x= _Reshape(x, {0, -1});x= ip1->forward(x);x= _Relu(x);x= dropout->forward(x);x= ip2->forward(x);x= _Softmax(x, 1);return {x};
以 MNIST 数据集 + Lenet 网络为例,一个 epoch 60000 张图片,一般可达到 97-98% 的准确率 。性能上,同款 MBP 上,MNN 比和 Caffe 都有明显优势;而手机上,MNN 也达到了完全可用的性能水准 。
一年的打磨,MNN正式版发布!

文章插图
?量化训练
模型量化既可以降低模型大小,又可以利用硬件特性提升推理性能,可谓业务应用必备之选 。但美中不足之处在于,模型量化会带来一定的精度损失 —— 对于精度攸关的项目,就难免要做出艰难的选择了 。
一年的打磨,MNN正式版发布!

文章插图
为此,MNN 借助自身模型训练能力,实现了模型训练量化,具体实现可以参考说明文档【8】 。精度和压缩率方面,我们以V2为例说明:
模型
类型
准确率
模型大小
原始模型
72.324%
13M
【一年的打磨,MNN正式版发布!】MNN 训练量化模型
一年的打磨,MNN正式版发布!

文章插图