【Agorans 征文】AI模型在移动设备的部署

近年来,随着AI技术的快速发展,AI模型部署到移动端设备的需求越来越强烈。AI模型部署到移动端设备,能带来诸多好处:

  1. 对于公司而言,无需为AI模型部署云端服务器,能够大幅度降低公司的运营和服务成本;
  2. 对于用户而言,用户的数据,如视频、图片、声音、文字等,无需上传至云端服务器,可在本地移动端进行计算,用户的隐私得到有效的保护。

然而,AI模型在移动端设备部署,却面临如下挑战和限制:

  1. 移动端设备运算能力有限,尽管现在的移动端设备的CPU、GPU、NPU能提供强大的运算能力,但相对AI模型来说,移动端设备的运算仍然不足,一些云端的模型,无法在移动设备上正常运行,即使能运行,用户体验也会打折扣;
  2. 移动端设备对AI模型的存储大小较为敏感,以vgg16模型为例,其大小为500MB,如此大的模型,如果集成到app,估计没有多少用户愿意下载使用;
  3. 移动端设备无法为AI模型提供足够的内存,AI模型除了运算复杂、模型过大外,对内存的消耗,小则几个GB,大小十几个GB;

因此,要将AI模型成功部署到移动端设备,并提供很好的用户体验,需要从模型轻量级设计、模型转换、模型量化以及推理加速等方面不断探索和优化。

模型轻量级设计

AI模型在模型结构设计阶段,应该根据移动端设备的硬件特性进行设计,在满足模型的性能前提下,模型的层数和每个层的通道数尽量小。卷积层的卷积核大小尽量小,不宜大量使用5x5、7x7,以3x3和1x1为主。模型轻量级设计可参考MobileNet和ShuffleNet。MobileNet是Google面向移动端设备推出的轻量级模型,已经经历了三个版本的迭代。MobileNet V1模型的核心思想是将原来标准的卷积操作因式分解成一个depthwise convolution和一个1x1的pointwise convolution操作;MobileNet V2在V1的基础上引入了残差结构,扩充了维度,并且在输出端pointwise卷积采用了线性激活;MobileNet V3采用了Neural Architecture Search(NAS),引入基于squeeze and excitation结构的轻量级注意力模型。ShuffleNet是旷视科技提出的轻量级模型,并经过了二个版本迭代。ShuffleNet V1的核心采用了两种操作:pointwise group convolution和channel shuffle,在保持精度的同时大大降低了模型的计算量;ShuffleNet V2则根据相同的FLOPs(float-point operations)情况下模型速度差别很大的现象,指出内存访问损失时间(MAC)和FLOPs共同决定实际落地时训练和运行的速度。

模型转换

当前,主流的深度学习开源训练框架有Tensorflow、Pytorch等,Tensorflow凭借先发优势和完整的社区,在工业界得到广泛的应用,而Pytorch借助其易用性和不错的性能,在学术界的影响力已超越了Tensorflow。虽然Tensorflow和Pytorch均提供了移动端版本,但推理速度有限,不能满足移动端对推理速度的要求。经过几年的发展,移动端的推理框架已经形成群雄争霸的局部。当前主流的移动端推理框架有ncnn、MACE、MNN、TNN。

ncnn 是腾讯优图实验室首个开源项目,是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部属和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。

MACE是小米公司推出的一个专为移动端异构计算平台的神经网络计算框架,主要从性能、功耗、系统响应内存占用、模型加密与保护、硬件支持范围进行了专门的优化。

MNN是一个高效、轻量的深度学习框架。它支持深度模型推理与训练,尤其在端侧的推理与训练性能在业界处于领先地位。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷、钉钉、闲鱼等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等70多个场景。此外,IoT等场景下也有若干应用。

TNN:由腾讯优图实验室打造,移动端高性能、轻量级推理框架,同时拥有跨平台、高性能、模型压缩、代码裁剪等众多突出优势。TNN框架在原有Rapidnet、ncnn框架的基础上进一步加强了移动端设备的支持以及性能优化,同时也借鉴了业界主流开源框架高性能和良好拓展性的优点。

移动端推理框架ncnn、MACE、MNN、TNN,并不能直接兼容Tensorflow、Pytorch的模型,而需要先将Tensorflow、Pytorch转换成ONNX(Open Neural Network Exchange),再将ONNX转换到ncnn、MACE、MNN、TNN所支持的模型。ONNX是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。

移动端部署

通过ONNX将Tensorflow、Pytorch转换至ncnn、MACE、MNN或TNN,根据ios或android,编译移动端推理框架的库。为了进一步追求模型的推理速度,可利用推理框架对模型进行卷积层与激活层融合,减小网络层间的IO开销;也可将float32进行int8量化,在不降低模型的精度前提下,理论上可将模型大小缩减4倍,推理速度提高2~3倍的提高。