Facebook开源移动端深度学习加速框架,比TensorFlow Lite快一倍

方栗子 发自 凹非寺 量子位 出品

Facebook发布了一个开源框架,叫QNNPACK,是手机端神经网络计算的加速包。

官方表示,它可以成倍提升神经网络的推理效率,几乎比TensorFlow Lite快一倍。

这个框架,能够为很多运算加速,比如DW卷积 (Depthwise Convolution) ,许多先进的架构里面都用得到。

目前,QNNPACK已经是PyTorch 1.0的一部分,在Caffe2里就能直接使用。

其实,Facebook手机应用里面,已经部署了这个QNNPACK。也就是说,数以亿计的手机都在用了。

从哪个角度加速?

QNNPACK,这个名字眼熟么?

两年前,Facebook就推出过一个加速包,叫做NNPACK,Caffe2Go用的就是它。

基于Winograd变换和傅里叶变换,有效减少卷积计算里的乘加运算 (Multiply-Add) 。这样一来,3x3卷积可以只比1x1慢一倍,而不会慢8倍。

不过,世界变化很快。现在的计算机视觉 (CV) 神经网络里,用到的很多卷积类型,已经沾不到NNPACK的光

比如,1x1卷积,分组卷积 (Grouped Convolution) ,Strided Convolution,扩张卷积 (Dilated Convolution) ,DW卷积 (DepthWise Convolution) ,适用于精度/存储带宽受到限制的 (移动端等) 场景。

而CV神经网络,大部分推理时间,都花在卷积和全连接运算上。

这样的运算,和矩阵乘法密切相关:

大内核的卷积,可以分解成im2col和一个矩阵乘法。

所以,有高效的矩阵乘法,才能有高效的卷积网络。

于是,QNNPACK出世了。

怎样加速矩阵乘法?

矩阵乘法,A x B = C。C里面的每一个元素,都可以看成A中某行B中某列的点乘。

但直接在点乘基础上计算的话,一点也不快,会受到存储带宽的限制。

如果,能同时计算A中多行B中多列的点乘,即MRxNR,就能给运算速度带来猛烈的提升。

不需要太多,这样细小的改变就够了。

节省内存和缓存

模型训练,可能更需要高精度。但在训练完成后,推理部分对精度的需求可能就没有那么高了。

低精度的计算,有时对推理的准确性不会产生明显的影响。

而这样的运算,不需要太大存储,并节省能源,有助于把AI部署在移动端。

QNNPACK用的线性量化 (Linear Quantization) 方案,与安卓的神经网络API兼容。

它假设量化值q[i]是用8比特的无符号整数 (Unsigned Integers) 来表示的,以及q[i]与真实值r[i]相关,关系如下:

与其他库不同,QNNPACK把矩阵A、B都放进一级缓存 (L1 Cache) ,目标是把所有对运算过程并不非常必要的内存转换 (Memory Transformations) 都删掉。

QNNPACK可以在一次微内核调用 (Microkernel Call) 里,处理A和B。

不需要在微内核之外,累积32位的中间结果,QNNPACK把32位的中间值融合进微内核,然后写出8位值,节省了存储带宽和缓存。

赢了TensorFlow Lite

开发团队用谷歌的视觉框架MobileNetV2里面的图像分类模型来测试。

TensorFlow Lite做对手,和QNNPACK比了一场。

结果是,QNNPACK比TensorFlow Lite几乎快一倍,不论是在高端智能机,还是普通智能机身上。

所以,各位也去试一下?

GitHub项目页: https://github.com/pytorch/QNNPACK

博客原文: https://code.fb.com/ml-applications/qnnpack/

原文发布于微信公众号 - 量子位(QbitAI)

原文发表时间:2018-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

入门必看 | 深度Q-learning简介【RL系列】

今天,我们将构建一个深度Q网络,为环境中的agent实现一个可以获取环境状态信息以及近似Q-value的神经网络。

794
来自专栏张善友的专栏

一个开源的,跨平台的.NET机器学习框架ML.NET

1826
来自专栏AI研习社

野外动物监测图像挑战赛:预测捕捉到的野外图像是否包含动物

野外相机能够自动收集大量的图像信息,不过不幸的是,收集到的大量图片都是误报,这些错误大多是由非动物引起的,比如草木的晃动。 本次比赛旨在预测白天和晚上从各个地点...

3559
来自专栏CDA数据分析师

R语言中的情感分析与机器学习

利用机器学习可以很方便的做情感分析。本篇文章将介绍在R语言中如何利用机器学习方法来做情感分析。在R语言中,由Timothy P.Jurka开发的情感分析以及更一...

2209
来自专栏AI科技评论

学界 | 女朋友说「我想要MAC」,OpenAI帮直男get到是口红还是电脑

AI 科技评论按:语言词汇的多义性已经是一个越发让人头疼的问题。比如女生对男朋友说:「生日礼物我想要MAC」,本来心怀期待地揣测他买来的唇彩会是什么色,结果收到...

3769
来自专栏玉树芝兰

如何用Python和深度神经网络发现即将流失的客户?

想不想了解如何用Python快速搭建深度神经网络,完成数据分类任务?本文一步步为你展示这一过程,让你初步领略深度学习模型的强大和易用。

2643
来自专栏ATYUN订阅号

谷歌开源基于TensorFlow的通用框架AdaNet,快速且易于使用

Ensemble learning结合不同机器学习模型预测,被广泛用于神经网络以实现最先进的性能,得益于丰富的历史和理论保证,成功的挑战,如Netflix奖和各...

802
来自专栏新智元

AutoML又一利器来了,谷歌宣布开源AdaNet(附教程)

今天,谷歌宣布开源AdaNet,这是一个轻量级的基于TensorFlow的框架,可以在最少的专家干预下自动学习高质量的模型。

2735
来自专栏机器之心

学界 | Fashion-MNIST:替代MNIST手写数字集的图像数据集

机器之心转载 公众号:PaperWeekly 作者:肖涵 FashionMNIST 是一个替代 MNIST 手写数字集 [1] 的图像数据集。 它是由 Zala...

4559
来自专栏专知

计算机视觉入门教程系列—125页带你回顾CV发展脉络

【导读】本文是计算机科学家Christoph Rasche撰写的一份计算机视觉方面的系列教程,从传统的图像处理、特征提取到近几年很热的深度神经网络,以及深度学习...

1782

扫码关注云+社区

领取腾讯云代金券