开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布


开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布
本文插图
开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布
本文插图
在经过充分的行业调研后 , 阿里淘系技术部认为当时的推理引擎如TFLite不足以满足手机淘宝这样一个亿级用户与日活的超级App 。
于是 , 他们从零开始自己搭建了属于阿里巴巴的推理引擎MNN 。 1年前 , MNN在Github上开源 , 截止目前获得了3.9k Stars 。
MNN比其他的推理引擎更快更轻量 , 更符合手机淘宝这样庞大、复杂的生产部署环境 。 今年3月份 , 基于MNN的引擎设计与优化理念 , 阿里在MLSys 2020上发表了论文 , 并进行了oral presentation 。
开源1年以来 , 基于阿里内外的用户反馈和业务推动 , 他们称 , MNN在许多方面都取得了长足的进步:

  • 在阿里巴巴集团内部得到广泛推广 , 成为了端上推理引擎的事实标准 , 覆盖了如手机淘宝、手机天猫、优酷、钉钉、闲鱼等20多个App 。
  • 新添了模型训练的支持 , 从此MNN不再是单纯的推理引擎 , 而是具有推理+训练能力的深度学习引擎 。 基于MNN的训练能力 , 可以进行Quantization Aware Training (QAT) 。 在MobileNet上 , MNN量化训练之后的模型准确率几乎不降 。
  • 持续投资于异构硬件后端的优化 , 尤其是利用ARMv8.2指令集 , 获得了两倍的性能提升 。
  • 进一步完善Python工具链 , 累计新增超过150个接口 。
  • 开源了应用层开箱即用的解决方案MNNKit , 包含了人脸跟踪与检测、人像分割、手势识别场景的解决方案 。
近日 , MNN发布了1.0.0正式版本 。 相较于0.2.2版本 , 1.0.0版本的主要升级在于:模型训练、异构性能和Python工具链 。
开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布
本文插图
模型训练
模型构建
MNN支持使用 Express (表达式)接口来构建模型 , 模型的构建、训练和保存具体可以参考说明文档 。
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比PyTorch和Caffe都有明显优势;而手机上 , MNN也达到了完全可用的性能水准 。
开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布
本文插图
量化训练
模型量化既可以降低模型大小 , 又可以利用硬件特性提升推理性能 , 可谓业务应用必备之选 。 但美中不足之处在于 , 模型量化会带来一定的精度损失 —— 对于精度攸关的项目 , 就难免要做出艰难的选择 。
开源一年,阿里轻量级AI推理引擎MNN 1.0.0正式发布
本文插图
为此 , MNN借助自身模型训练能力 , 实现了模型训练量化 , 具体实现可以参考说明文档 。 精度和压缩率方面 , 以MobileNet V2为例说明:
注1:训练和验证均采用ImageNet数据集 。 训练采用32为batch size , 执行100个迭代 , 即 , 使用了3200张图片进行训练;精度验证则使用了50000张图片 。
注2:原始模型为TensorFlow官方模型 , 官方准确率为71.8% , 但因预处理代码上有细微差别 , 我们测试原始模型的准确率结果稍高于官方;