作者 | 小米 MACE 开发团队
整理 | Debra
编辑 | Vincent
转自 | AI前线
导读:寒冬!寒冬!中兴被制裁之后,美国禁止一系列技术出口,为此,国内减税,降低货币超发,意图拉动内需,不再举债发展,并且大力扶植自研 AI 产品。可惜的是,虽然中国队 AI 算法在各大排行榜上为国争光,并继续维持顶级会议论文的高产国的优势,但这些算法如何能够部署在移动端,落地成最终产品,缺乏一座连接算法与设备的桥梁。移动端深度学习引擎就是为此而生,这些基础的工作恰恰是制约 AI 行业发展的关键枢纽。
对于算法模型而言,它提供了底层算子支持,能够使模型更快的执行,降低成本,保护算法隐私。本土自研框架对于国内 AI 算法的演进起到促进作用,使得我们有能力部署国内科学家的最新研究成果,提升产品体验及 AI 普及速度。
对于芯片行业而言,本土的深度学习引擎更有动力支持本土的芯片企业,顺其自然地对其起到推广作用,试想如果引擎都是国外的,底层的本土芯片厂商将很难进入到这条产业链,只能成为孤立的硬件产品,而无用武之地。中国想在 AI 领域持续保持优势,就需要在行业上下游都具有自主研发的能力,在各个环节不受至于人,从而形成上下游互相促进的良性循环。
严重的碎片框架局面
与 AI 在服务器部署不同,端上 AI 的场景更具碎片化特征。针对不同的应用场景,需要考虑芯片功能、性能、成本等因素,做出最优选择。AI 热潮促进了一大批 AI 芯片新型企业诞生,巨头也纷纷加入芯片行业。这些芯片中的计算单元在设计及性能指标上都有较大差异。其中,包括传统计算单元,如 CPU、GPU、DSP 等,也包括专用计算单元,如专为神经网络计算设计的硬件加速器。不同芯片厂商设计的芯片在体系结构上均有区别,即使同一家厂商同一类型的计算单元由于型号的演进,功能和性能也存在差异性。虽然有些芯片厂商会公布一些性能数字,但这些数字往往是底层架构级别的参考,如 flops,并不能成为终端用户关心的直接指标。开发者关心的是整个神经网络端到端的支持完备性和性能指标。
AI 推理引擎就是填补上层算法与底层硬件之间 gap 的软件层,它旨在针对特定神经网络操作,将芯片性能发挥到极致。推理引擎的好坏,直接决定了是否可以将芯片性能数字转化为业务性能数字。芯片厂商为此需要开发相应的引擎,配合硬件提供给用户。对于某些通用芯片而言,一些开源框架为其定制了优化,但却不一定适合所有参数和型号。同芯片一样,单个神经算子的性能好坏也不是用户关心的最终指标,引擎是否能够高效的执行用户的神经网络中所有算子,从而达到预期端到端的性能结果,决定了用户是否选型该引擎及相应芯片。
综上,芯片、引擎、算法权衡选择是一个组合难题。开发者没有时间甚至也没有资源针对他们自身的业务场景评测相关芯片和框架。如何协助开发者快速、低门槛、高质量地根据需求选择特定的算法模型、落地到合适的计算引擎并充分利用硬件平台的计算加速能力,以推进技术和产品的快速迭代摆在了现实面前。这些问题使我们亟需一个可以公平对比其效能的评测平台。为了完善面向多场景边缘计算的深度学习生态,提供一个开源、开放、可持续扩展的平台,我们构建了集 AI 算法,AI 框架,AI 芯片三位于一体的开放性评测平台。一个公平准确的标准评测平台,它不仅有益于软件开发者,也对本土底芯片厂商有推动作用。
中国本土芯片厂商自身推广的渠道有限,尤其是新型的 AI 专用芯片厂商。不同于已经有牢固的市场占有率与用户群的传统芯片厂商,AI 专用芯片厂商无论从资本还是推广途径上都属弱势,研发、生产的巨大投入都已经形成了巨大的消耗。即便是在研发上已经具备行业先进水准,也容易由于市场占用率底子薄的因素沦为“非主流”,只能靠压低成本进入市场。这使得芯片市场面临着与早期金融市场同样的问题,信息不对称造成的非最优选择。这造成了具有技术优势的产品不能占据市场优势,对于开发者和芯片厂商而言都是极大的损失。
端侧业界现状
不可否认,云有不可逾越的超级计算力,但端侧部署相较于云端一些特定场景下,也有诸多优势:保护用户隐私,不依赖网络做离线预测,节省大量服务器成本。因此设备端部署的需求越来越强烈。
伴随着强烈的需求,端侧深度学习框架也可谓是百花齐放,据统计,可用在移动端的深度学习框架已经多达 10 多种。目前业界应用范围比较广泛的框架包括 TensorFlow Lite、Caffe/Caffe2、CoreML、SNPE、NCNN、MACE 等,并且不断有新的框架在产生。各框架都有自身的一些优势。TFLite 背靠 Tensorflow 庞大而且完善的生态,并且对模型量化有很好的支持;CoreML 是苹果自家框架,可以完美对接苹果设备;SNPE 是高通自家产品,对于高通旗下芯片有很完备的支持;NCNN 则在 ARM CPU float32 的计算性能上有一定优势。
我们再从通用和专有两个维度思考下各家的对比:
具体来说,TFLite 背靠 TensorFlow 庞大而且完善的生态,借助 Google 自身的技术影响力,目前在业界应该是应用最广泛的了,TFLite 目前侧重于 CPU 端模型量化的支持,对于 GPU 等其他加速设备均不支持。Caffe/Caffe2 包含训练和预测,因此在集成和使用上会比较便利,但是整个框架会比较臃肿并且针对设备端的优化相较于其他框架会少一些。
CoreML 是苹果自家框架,可以完美对接苹果设备。SNPE 是高通推出用于支持自己旗下芯片的,所以在性能上有很多优势,但是由于项目未开源,所以定制化成本较高。NCNN 相较与上述所列框架,则主要侧重于 ARM CPU 的性能优化上,在该方面有一定优势,此外项目已经开源较久,用户群比较广,但是目前也不支持 GPU 等其他加速设备。
MACE 项目目前能够支持主流的移动端 GPU,但是由于开源时间较短,还需要时间经过业界的检验。除此之外,模型保护是设备端部署的一大需求,而目前只有 NCNN 和 MACE 在该方面有支持,NCNN 支持将模型转为二进制去除符号,MACE 支持将模型转为 C++ 代码来实现模型保护。
端侧引擎解决方案
小米在开发 MACE 之前,只有高通的 SNPE 能够满足小米手机上 AI 算法的性能要求,但其闭源性质,导致定制化困难,难满足变化的业务。
研发初期,小米主要聚焦于 GPU 优化,由于没有一手参考,开发难度很大,经过不断地跟高通的沟通,终于在性能上做到了跟 SNPE 不相上下。
设计之初,就确立了四个目标:高性能,通用,易用和便携。性能,是框架最关注的指标,目前 MACE 在 CPU 和 GPU 上都已经达到了业界领先水平,同时还支持高通的 DSP,将来还会加入对高通 NPU 的支持。通用性方面,除了计算设备外,MACE 目前可以支持深度学习训练框架有 Tensorflow 和 Caffe,同时 MACE 支持 ONNX 开放模型交换协议。易用性方面,MACE 不仅提供完善的文档,还有完善的开发闭环,支持多个层次的单元测试和基准测试,极度开发友好。而便携性是指框架的体积尽可能小,困于设备端存储资源有限,我们压缩程序库大小,定制化策略,移除不必要的代码。值得一提的是,MACE 还在模型加密、内存占用、系统响应等方面做了针对性的优化。
开源以来,社区(https://github.com/XiaoMi/mace)有 200 多个 Issue 讨论和若干 Pull Request,用户交流群有 1000 多个。其中,计划之外,却意料之中的是,除手机应用,IoT 业务方也占比不小。为此,我们成立了专门面向定制业务方的答疑小组,并且对近期能落地业务进行工程支持,目前在直播特效、电商以图搜图,离线翻译领域均辅助落地。除此之外,小米还借助供应链优势帮寻流量和落地,一对一辅导研究探索型的开发者。
开发者福利第一弹:ANDROID NN/ ARM NN
当前绝大部分终端芯片的 CPU 都是采用的 Arm 架构,对于不提供 AI 加速的芯片而言,CPU 就负责运行所有的 AI 算法。Arm 利用这个优势推出了 Arm NN SDK 来加速 AI 计算。Arm NN 支持 Cortex-A/Cortex-M CPU、Mali GPU 和新推出的 ML 处理器。同时 Arm NN 还支持 Google 的 NNAPI。
底层硬件加速接口的统一对于框架和应用开发者是好事,如果 Arm NN 和 NNAPI 能在竞争和合作中共同推动 AI 产业的进步,那真是开发者一大幸事。国内的 AI 头部企业也在尝试制定相应的行业标准,但目前来看,都没有占得一席之地。
Google 为 Android 8.1 以上版本设计了 Neural Networks API (NNAPI) 以方便机器学习框架获得底层硬件的加速能力。NNAPI 基于硬件厂商提供的 GPU、DSP 或 AI 专用芯片(如 NPU)等的具体实现以加速 AI 算子,否则会回退到 CPU 上执行。在此之前各家硬件厂商提供的 SDK 只能运行在自己的芯片上,这使得开发者需要在不同的设备上集成不同的 SDK,或者是干脆放弃某些平台而只采用 CPU。有了 NNAPI 就可以在不同的设备上采用统一的接口调用,AI 任务就可以调度到最适合的硬件处理器上运行。但是 NNAPI 依赖于芯片厂商提供驱动。例如高通为 OEM 提供对 Adreno GPU 和 Hexagon DSP 的支持,华为提供对 NPU 的支持。但总体来说目前只有少部分手机提供 NNAPI 驱动,而且部分驱动对 NNAPI 的支持也并不完整。
开发者福利第二弹:Mobile AI Bench
中美摩擦,资本低增速,市场存量化后,在寒冬三角空间逼仄下,为助力国内弱势上游芯片方,缓解中游集成商选型压力,最终下游企业可以更高的性价比甩掉工程包袱,这个责任应该由国内 IoT 芯片的甲方或移动设备集成商来承担。
问题在于,目前移动端 AI 引擎、芯片的多样性,第三方的 AI 评测 工具 多数主要聚焦于全方位评测主机上的训练和模型推理,对于移动端 AI 评测着墨较少。针对移动端的 BenchIP 和 AI-Benchmark 项目只做 AI 芯片的评测,对于 AI 框架、算法的选型也涉及较少。加之,移动端的生态并不成熟,整合移动端模型、框架以及移动端芯片的评测还在非常初级阶段。
Mobile AI Bench(https://github.com/XiaoMi/mobile-ai-bench)选定当前业界主流的算法设计、计算引擎和计算芯片作为测试基准,量化始化速度、运行速度、结果精度、资源占用等方面的评测,再通过提供统一的接口、协议以便不同实现技术的引入。
该平台可以打造多个维度开发测试闭环。首先,通过建立模型评估系统构建模型优化闭环,进而实现模型的不断优化改进。其次,建立深度学习推理引擎基准测试平台,融合业界领先的深度学习推理引擎,能够高效的评估自身引擎,并提供优化的方向。最后,建立硬件加速器基准测试平台,能够很好的辅助用户决策,同时还能够为引擎优化提供方向。开发者可以从这些基准的测试中获得一些设计指导,新的算法、计算引擎和芯片也可以高效地加入到平台中,逐渐丰富多场景边缘计算的深度学习生态。最终,小米希望能通过这个 AI 开放平台促进以 AI 算法、AI 引擎、AI 芯片为核心的整个 AI 产业的发展。
[1] Mengwei Xu, Jiawei Liu, Yuanqiang Liu, Felix Xiaozhu Lin, Yunxin Liu, Xuanzhe Liu. 2018. When Mobile Apps Going Deep: An Empirical Study of Mobile Deep Learning. arXiv:1812.05448 (2018).
本文首发于公众号AI前线(ID:ai-front),点击查看原文。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 移动端工程架构与后端工程架构的思想摩擦之旅
- 让开发者专注于应用开发,OpenCenter 3.0 开发者预览版发布
- 让开发者专注于应用开发,OpenCenter 3.0 开发者预览版发布
- GitHub 推出开发者赚钱新利器,100% 全给开发者!
- Google开发者大会:为中国开发者和消费者推出新的工具
- OpenCenter3.0开发者预览版发布,开发者不能错过的新特性!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms in Java, Part 5
Robert Sedgewick / Addison-Wesley Professional / 2003-7-25 / USD 54.99
Algorithms in Java, Third Edition, Part 5: Graph Algorithms is the second book in Sedgewick's thoroughly revised and rewritten series. The first book, Parts 1-4, addresses fundamental algorithms, data......一起来看看 《Algorithms in Java, Part 5》 这本书的介绍吧!