MNN支持NPU啦(一)

2019 年 12 月 17 日

MNN支持NPU啦(一)


✪ 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 的设备上启用那个名场面 —— 我全都要!



那么,究竟要怎么做呢?毕竟 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 上来实现。


本文转载自淘系技术公众号。


原文链接:https://mp.weixin.qq.com/s/4aFgfBD05ln4wEft-5oEHw


2019 年 12 月 17 日 14:12216

评论

发布
暂无评论
发现更多内容

架构师训练营 - Lesson Week 3

brave heart

极客大学架构师训练营

面向对象的设计模式

WW

windows使用docker运行mysql等工具(一)windows安装docker

Java旅途

MySQL Docker

可读代码编写炸鸡二(下篇) - 命名的歧义

多选参数

代码 代码优化 代码组织 代码规范

产品失败了,产品经理要不要承担责任?

涛哥

产品经理

让你眼前一亮的 10 大 TS 项目

阿宝哥

Java typescript Web 前端开发 开源项目

设计模式-第三周

X﹏X

极客大学架构师训练营 框架开发 上课总结 第五课

John(易筋)

极客时间 设计模式 极客大学 极客大学架构师训练营 框架开发

架构师训练营-作业3

进击的炮灰

新手村:最适合新手的 Redis 基础

多选参数

数据库 redis redis6.0.0

windows使用docker运行mysql等工具(二)安装运行mysql

Java旅途

MySQL Docker

【第三周】命题作业——单例及组合模式

三尾鱼

极客大学架构师训练营

架构师训练营 0 期第三周

Blink

可读代码编写炸鸡二(上篇) - 命名的长度

多选参数

代码 代码组织 代码规范

区块链改变数字营销与广告市场

CECBC区块链专委会

区块链技术 广告业 精准投放 去中介 公开透明

【架构思维 - 学习总结】week03

chun1123

学习 设计模式

架构师训练营 - Task Week 3

brave heart

极客大学架构师训练营

2020互联网公司端午节礼盒合集!你最中意哪一款?

Java小咖秀

互联网人 端午节

数字货币监管当体现“中国之治”

CECBC区块链专委会

数字货币 CECBC 区块链技术 技术标准 准入和监管

手写单例模式

yupi

组合模式应用

yupi

【架构思维学习】 week03

chun1123

【架构师训练营 - week3 -1】作业

早睡早起

Breaking through Three Common Engineering Myths·英语阅读笔记

3.141516

架构师训练营第三周-学习总结

小师妹学JVM之:java的字节码byte code简介

程序那些事

Java JVM Java 25 周年 bytecode 字节码

架构师训练营第三周作业

极客大学架构师训练营

【架构师训练营 - week3 -2】总结

早睡早起

架构师训练营第三周课后作业

赵凯

设计模式

架构师训练营-总结3

进击的炮灰

蟒周刊/426: DjangoCon US 2020 取消了

ZoomQuiet大妈

Python 大妈 蟒营® Weekly 蟒周刊

MNN支持NPU啦(一)-InfoQ