乐趣区

关于人工智能: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 模型在模型构造设计阶段,应该依据挪动端设施的硬件个性进行设计,在满足模型的性能前提下,模型的层数和每个层的通道数尽量小。卷积层的卷积核大小尽量小,不宜大量应用 5 ×5、7×7,以 3 ×3 和 1 ×1 为主。模型轻量级设计可参考 MobileNet 和 ShuffleNet。MobileNet 是 Google 面向挪动端设施推出的轻量级模型,曾经经验了三个版本的迭代。MobileNet V1 模型的核心思想是将原来规范的卷积操作因式分解成一个 depthwise convolution 和一个 1 ×1 的 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 倍的进步。

退出移动版