MNN支持NPU啦!!!

做者|MNN团队git

出品|阿里巴巴新零售淘系技术部github

 

AI 芯片时代 

2016 - 2017年,AlphaGo 前后打败李世石和柯洁,随着深度学习进入公众视野的,还有 Google 的 TPU 。后端

以后,Qualcomm、Apple 等芯片厂商也相继进入了这个战场。一时间,APU、TPU、NPU 成了科技媒体的宠儿,各大厂商在发布会上的跑分比武目不暇接。缓存

而 XPU 们也确实凭借着为深度学习定制的向量、矩阵、张量计算单元和更高效的缓存设计等,实现了数倍于 CPU、GPU 的性能。框架

以麒麟 NPU 为例,从18年7月的麒麟970到19年9月的麒麟 990 ,短短两年就实现了数倍的性能提高,是否是有一种摩尔定律再临的感受?工具

除了性能强劲以外,XPU 的功耗相比于 CPU、GPU 也要更低。依然以麒麟810和990为例,接近1/10的功耗表现,能够和个人电量恐惧症说再见了!性能

MNN + HUAWEI HiAI 

MNN 做为阿里巴巴开源的端侧推理引擎,已经支撑了两届淘宝双十一。咱们以轻量级的推理引擎和配套工具,支持 Caffe、TensorFlow、PyTorch 训练框架和端侧 CPU、GPU、NPU 上的高效推理。学习

手机淘宝中有许多对实时性和精度要求都比较高业务,例如视频流检测、拍立淘等等。在算力有限的状况下,性能和精度每每不可兼得 —— 要么接受更慢的响应速度,保障精度,例如放弃视频流,只支持图片;要么舍弃一部分精度,用更小的模型换取更快的速度。设计

HiAI 是华为端侧 AI 能力开放平台,经过 HiAI Foundation 芯片能力开放,能够借助异构调度和 NPU 加速, 得到更佳的性能和功耗,有了这样性能和功耗同时得以提高的方案, MNN 就能够在配备了 NPU 的设备上启用那个名场面 —— 我全都要!3d

那么,究竟要怎么作呢?毕竟NPU是彻底不一样于CPU和GPU的计算设备。在这里,就须要简单回顾一下 MNN 对计算设备的抽象了。

计算设备在 MNN 中,被抽象为 Backend ,即后端;每一种后端都有三种职责:计算资源的分配、计算任务的调度、数据拷贝(含必要的格式转换)。 MNN 在实现对华为 NPU 支持的时候,就依赖了这种抽象设计。

具体来讲,建立会话阶段,咱们会在 NPUExecution 的 onCreate 方法中,将 MNN 的 Op 转换为 HiAI 的 OM Op ,逐步构建出 OM 的模型图;资源分配阶段,咱们会在 NPUBackend 的 onResizeEnd 方法中,编译 OM 的模型图,生成 NPU 可用的 IR 模型,并预留出输入输出相关的 AI Tensor ;在推理运行阶段,咱们会借助 NPUBackend 的 onCopyBuffer 方法,将输入数据从 MNN Tensor 拷贝到 AITensor ,然后利用华为 NPU 执行推理计算,再将结果从 AITensor 拷贝到 MNN Tensor。

整个过程看上去仍是很是复杂的,可是 MNN 把绝大部分复杂的工做隐藏在了后端的抽象设计中。用户在使用的时候,只须要将 backend 的 type 设置为 NPU ,就能够实现对 NPU 的调用。同时,若是设备不支持 NPU ,还能够自动将计算回退到 CPU 上来实现。 

 

双十一NPU实战 

在今年的双十一中,拍立淘率先使用了 MNN + NPU 的能力。咱们和天猫以及其余商家展开深度合做,推出了商家扫 Logo 活动 —— 用户能够像扫二维码同样,在扫描商家 Logo 后,获取商家发放的权益。在 NPU 加速以后,商家 Logo 在手机上只须要几毫秒的时间,就能够精准识别。是的,就是如此丝滑。

拍立淘在双十一期间开启了数十个品牌的 Logo 扫描,相关招商渠道建设中,敬请关注拍立淘官方渠道。准备好你的脑洞吧。

如今想试一试的话,还能够掏出你的手机,打开手机淘宝扫一扫,下列Logo均可以玩起来啦~

寄望将来 

笔者和 Apple、Arm、华为等公司的工程师都有过交流,你们对 XPU 的将来都一致看好。虽然 APU、TPU、NPU 间的乱战可能还要持续上三五年,但在深度学习应用领域,它们逐步从云端走向终端,逐步替代 CPU、GPU 应当是大势所趋。

MNN 会持续关注 NPU 领域的发展。同时,MNN 和华为 NPU 的合做也还在进一步推动中,后续 MNN 的相关代码会在建设更成熟以后开源。咱们也一样期待华为在 NPU 方面的进一步发展。

 

加入咱们,扫描下方二维码了解详情

 

点击获取MNN 开源项目地址:https://github.com/alibaba/MNN