0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CPU上最流行的加速神经网络推理方法之一

Tensorflowers 来源:TensorFlow 作者:TensorFlow 2021-09-12 15:57 次阅读

量化是在 CPU 上最流行的加速神经网络推理方法之一。去年,TensorFlow Lite 通过 XNNPACK 后端提高了浮点模型的性能。如今,我们将 XNNPACK 后端扩展至量化模型。各个计算机视觉模型就表现而言,与默认的 TensorFlow Lite 量化内核相比,改扩展在 ARM64 手机上的速度平均提升 30%,在 x86-64 笔记本电脑及桌面设备系统上提升 5 倍,在 WebAssembly SIMD 的浏览器内推理上提升 20 倍。

TensorFlow Lite

https://tensorflow.google.cn/lite

XNNPACK 后端

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/xnnpack/README.md

XNNPACK 中的量化推理针对 TensorFlow 模型优化工具包所用的对称量化架构进行了优化。XNNPACK 既支持传统的按张量量化架构,也支持较新且准确率更高的带有权重渠道量化和激活按张量量化的架构。此外,XNNPACK 还支持非对称量化架构,但效率有所降低。

对称量化架构

https://tensorflow.google.cn/lite/performance/quantization_spec#symmetric_vs_asymmetric

传统的按张量量化架构

https://arxiv.org/abs/1712.05877

带有权重渠道量化和激活按张量量化的架构

https://arxiv.org/abs/1806.08342

性能提升

我们在一些边缘设备和神经网络架构针对 XNNPACK 加速的量化推理进行了评估。我们以下文介绍的四个公开模型和两个内部量化模型为基准,它涵盖了常见的计算机视觉任务:

1.EfficientNet-Lite0 图像分类 [下载

下载

https://tfhub.dev/tensorflow/lite-model/efficientnet/lite0/int8/2

2.EfficientDet-Lite0 对象检测 [下载]

EfficientDet-Lite0

https://arxiv.org/abs/1911.09070

下载

https://tfhub.dev/tensorflow/lite-model/efficientdet/lite0/int8/1

3.DeepLab v3 分割,使用 MobileNet v2 特征提取器 [下载]

DeepLab v3

https://ai.googleblog.com/2018/03/semantic-image-segmentation-with.html

MobileNet v2

https://arxiv.org/abs/1801.04381

下载

https://tfhub.dev/sayakpaul/lite-model/deeplabv3-mobilenetv2/1/default/1

4.CartoonGAN 图像风格转化 [下载]

CartoonGAN

https://ieeexplore.ieee.org/document/8579084

下载

https://tfhub.dev/sayakpaul/lite-model/cartoongan/int8/1

5.Face Mesh 特征点的量化版本

6.视频分割的量化版本

视频分割

https://ai.googleblog.com/2018/03/mobile-real-time-video-segmentation.html

使用 XNNPACK 在 Android/ARM64 手机上对量化的计算机视觉模型进行单线程推理时的速度提升

在六个 Android ARM64 移动设备上,XNNPACK 与默认的 TensorFlow Lite 量化内核相比,平均提升 30%。

使用 XNNPACK 在 x86-64 笔记本电脑和桌面设备系统上对量化的计算机视觉模型进行单线程推理时的速度提升

XNNPACK 在搭载 x86 处理器的笔记本电脑和桌面设备系统上有了更大幅度的提升。在我们基准测试中的 5 个 x86 处理器上,XNNPACK 将推理速度平均提升 5 倍。值得注意的是,不支持 AVX 指令集的低端和老式处理器,通过将量化推理转换为 XNNPACK,将速度提升 20 倍以上,而 TensorFlow Lite 以前的推理后端只针对 AVX、AVX2 和 AVX512 指令集优化了,而 XNNPACK 则为所有 x86-64 处理器提供了优化实现。

通过 V8 运行时,使用 XNNPACK 在手机、笔记本电脑和桌面设备上对量化的计算机视觉模型进行单线程 WebAssembly SIMD 推理的速度提升

除了传统的移动设备和笔记本电脑/桌面设备平台外,XNNPACK 还通过 TensorFlow Lite Web API网络平台进行量化推理加速。上图展示了在 3 个 x86-64 和 2 个 ARM64 系统上通过 V8 JavaScript 引擎运行 WebAssembly SIMD 基准时,与默认的 TensorFlow Lite 实现相比,几何速度平均提升 20 倍。

TensorFlow Lite Web API

https://github.com/tensorflow/tfjs/tree/master/tfjs-tflite

两年的优化

XNNPACK 起初是 QNNPACK 库的一个分支,但是由于 XNNPACK 的第一个版本专注于浮点推理,而 QNNPACK 专注于量化推理,因此无法将两者进行比较。如今,随着 XNNPACK 引入对量化推理的支持及近两年的性能优化,我们可以直接评估。

QNNPACK

https://github.com/pytorch/QNNPACK

为了比较这两个量化推理后端,我们将随机的 MobileNet v1 和 MobileNet v2 模型从 XNNPACK API 移植到 QNNPACK API,并在两个 ARM64 Android 手机和两个 x86-64 系统上对其单线程性能进行了基准测试。上图显示了结果,XNNPACK 在两年内取得了惊人的进步。XNNPACK 在旧的 Pixel 3a 手机上的速度提升 50%,在新的 Pixel 4a 手机上速度提升 4 到 5 倍,在 x86-64 笔记本电脑上提升 2.5X,在 x86-64 工作站上提升 3 倍多。XNNPACK 从 QNNPACK 派生出来后的两年中进行了多种优化,这使其性能提升:

MobileNet v1

https://github.com/google/XNNPACK/blob/master/models/qs8-mobilenet-v1.cc

MobileNet v2

https://github.com/google/XNNPACK/blob/master/models/qs8-mobilenet-v2.cc

XNNPACK 保留了 QNNPACK 中的优化,如间接卷积算法和针对微架构的微内核选择,并通过间接反卷积算法将其进一步增强,同时具备更灵活的能力,如量化加法运算符和量化乘法运算符中内置的类 numpy 广播。

间接卷积算法

https://arxiv.org/abs/1907.02129

间接反卷积算法

https://ieeexplore.ieee.org/document/9150450

卷积、反卷积和全连接运算符将 8 位激活和权重的乘积累积为 32 位数字,最终需要将该数字转换回来,或者重新量化为 8 位数字。有多种方法可以实现重新量化,但 QNNPACK 采用了来自 GEMMLOWP库的架构,该库开创了神经网络推理的量化计算。然而,人们后来发现 GEMMLOWP 的重新量化架构在准确率和性能方面并不是最优的,XNNPACK 凭借更高的性能和准确率取代了它。

GEMMLOWP 库

https://github.com/google/gemmlowp

QNNPACK 以非对称量化架构为目标,其中激活和权重都表示为无符号整数,并带有零点和比例量化参数,而 XNNPACK 的优化专注于对称量化,其中激活和权重都是有符号整数,且权重有额外的限制:权重的零点始终为零,量化的权重被限制在 [-127, 127] 范围间(虽然 -128 可以表示为有符号 8 位整数,但是仍被排除在外)。在 XNNPACK 中利用对称量化时具有两个计算优势。首先,过滤器权重是静态时,输入零点与过滤器权重的乘积累积结果可以完全融合到卷积、反卷积和全连接运算符中的偏移项中。因此,推理计算中完全没有零点参数。其次,有符号的 8 位输入元素与限制在 [-127, 127] 的权重元素的乘积可以填入 15 位。如此一来,卷积、反卷积和全连接运算符的微内核能够在 16 位变量上进行一半的累积,而不是始终将乘积扩展到 32 位。

表示为无符号整数,并带有零点和比例量化参数

https://arxiv.org/abs/1712.05877

QNNPACK 微内核针对 ARM 上的 NEON SIMD 指令集和 x86 上的 SSE2 SIMD 指令集进行了优化,但 XNNPACK 支持更多的特定指令集优化。XNNPACK 中的大多数量化微内核都针对 x86/x86-64 上的 SSE2、SSE4.1、AVX、XOP、AVX2 和 AVX512 指令集,ARM/ARM64 上的 NEON、NEON V8 和 NEON 点积指令集,以及 WebAssembly SIMD 指令集进行了优化。此外,XNNPACK 为 WebAssembly 1.0 和 pre-NEON ARM 处理器提供标量支持。

QNNPACK 为高端 ARM 和低端 ARM 内核引入了提供专门汇编微内核的想法,而 XNNPACK 将这一想法进一步推进。XNNPACK 不仅针对 Cortex-A53、Cortex-A55 以及具有或不具有 NEON 点积指令集的高端内核的专门专家调整软件流水线汇编微内核,甚至在它们之间还支持实时切换。进行推理的线程从大核迁移到小核时,XNNPACK 会自动适应,从使用针对大核优化的微内核转换到针对小核优化的微内核。

QNNPACK 主要专注于多线程推理,并将计算分割成大量的小任务,每个任务计算输出张量的一个小切片。XNNPACK 重新设计了并行化,让任务变得灵活:可以分割为细粒度或粗粒度,具体取决于参与并行化的线程数量。通过动态调整任务粒度,XNNPACK 在单线程执行中实现了低开销,在多线程推理中实现了高并行化效率。

总之,这些优化让 XNNPACK 拥有最先进的量化推理能力,且让 TensorFlow Lite 成为最通用的量化推理解决方案,涵盖包括 Raspberry Pi Zero、Chromebook,以及具有服务器类处理器的工作站在内的众多系统。

如何使用?

量化的 XNNPACK 推理在所有平台 TensorFlow Lite 的 CMake 构建,以及网络平台 TensorFlow Lite 的 Bazel 构建中默认启用,并将在 2.7 版本的 TensorFlow Lite Web API 中可用。在其他平台的 Bazel 构建中,量化的 XNNPACK 推理通过构建时的选择机制启用。使用 Bazel 构建 TensorFlow Lite 时,如果添加 --define tflite_with_xnnpack=true --define xnn_enable_qs8=true,TensorFlow Lite 解释器将默认使用 XNNPACK 后端,使用具有对称量化的受支持运算符。可以通过添加 --define xnn_enable_qu8=true Bazel 选项,对非对称量化的运算符进行有限支持。

TensorFlow Lite Web API

https://github.com/tensorflow/tfjs/tree/master/tfjs-tflite

可加速哪些运算?

XNNPACK 后端目前支持量化的 TensorFlow Lite 运算符的子集(请参阅文档,了解详细信息和限制)。XNNPACK 支持由模型优化工具包通过训练后的整数量化和量化感知训练产生的模型,但不支持训练后的动态范围量化。

文档

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/delegates/xnnpack/README.md#quantized-operators

未来展望

这是 XNNPACK 集成到 TensorFlow Lite 后的第三个版本,之前是浮点实现的初始版本以及引入稀疏推理支持的后续版本。在未来版本中,我们将添加以下改进:

最新 ARM 处理器上的半精度推理

稀疏量化推理。

更加快速的密集推理。

希望您能在 GitHub 和 StackOverflow 页面上积极发表您的想法和评论,您也可以在 discuss.tensorflow.org 上提问。

GitHub

https://github.com/tensorflow/tensorflow/issues

StackOverflow

https://stackoverflow.com/questions/tagged/tensorflow-lite

discuss.tensorflow.org

http://discuss.tensorflow.org

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10853

    浏览量

    211544
  • 模型
    +关注

    关注

    1

    文章

    3226

    浏览量

    48803

原文标题:用 XNNPACK 加速量化推理

文章出处:【微信号:tensorflowers,微信公众号:Tensorflowers】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    国产芯运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    本篇测评由优秀测评者“短笛君”提供。本文将介绍基于米尔电子MYD-YD9360商显板(米尔基于芯驰D9360国产开发板)的TinyMaxi轻量级的神经网络推理库方案测试。 算力测试TinyMaix
    发表于 08-09 18:26

    国产芯运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    D9360国产开发板)的TinyMaxi轻量级的神经网络推理库方案测试。 算力测试 TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML
    发表于 08-07 18:06

    FPGA在深度神经网络中的应用

    随着人工智能技术的飞速发展,深度神经网络(Deep Neural Network, DNN)作为其核心算法之一,在图像识别、语音识别、自然语言处理等领域取得了显著成果。然而,传统的深度神经网络模型
    的头像 发表于 07-24 10:42 654次阅读

    神经网络专用硬件实现的方法和技术

    神经网络专用硬件实现是人工智能领域的个重要研究方向,旨在通过设计专门的硬件来加速神经网络的训练和推理过程,提高计算效率和能效比。以下将详细
    的头像 发表于 07-15 10:47 1073次阅读

    什么是神经网络加速器?它有哪些特点?

    神经网络加速器是种专门设计用于提高神经网络计算效率的硬件设备。随着深度学习技术的快速发展和广泛应用,神经网络模型的复杂度和计算量急剧增加,
    的头像 发表于 07-11 10:40 473次阅读

    递归神经网络的实现方法

    递归神经网络(Recursive Neural Network,简称RNN)是种特殊类型的神经网络,其特点在于能够处理具有层次或树状结构的数据,并通过递归的方式对这些数据进行建模。与循环神经
    的头像 发表于 07-10 17:02 311次阅读

    如何在FPGA实现神经网络

    可编程门阵列(FPGA)作为种灵活、高效的硬件实现方式,为神经网络加速提供了新的思路。本文将从FPGA实现神经网络的基本原理、关键技术、实现流程以及应用前景等方面进行详细阐述。
    的头像 发表于 07-10 17:01 1892次阅读

    BP神经网络和人工神经网络的区别

    BP神经网络和人工神经网络(Artificial Neural Networks,简称ANNs)之间的关系与区别,是神经网络领域中个基础且重要的话题。本文将从定义、结构、算法、应用及
    的头像 发表于 07-10 15:20 1011次阅读

    rnn是递归神经网络还是循环神经网络

    RNN(Recurrent Neural Network)是循环神经网络,而非递归神经网络。循环神经网络种具有时间序列特性的神经网络,能
    的头像 发表于 07-05 09:52 555次阅读

    递归神经网络是循环神经网络

    递归神经网络(Recurrent Neural Network,简称RNN)和循环神经网络(Recurrent Neural Network,简称RNN)实际是同个概念,只是不同的
    的头像 发表于 07-04 14:54 726次阅读

    深度神经网络的设计方法

    深度神经网络(Deep Neural Networks, DNNs)作为人工智能领域的重要技术之一,通过模拟人脑神经元之间的连接,实现了对复杂数据的自主学习和智能判断。其设计方法不仅涉
    的头像 发表于 07-04 13:13 445次阅读

    bp神经网络和卷积神经网络区别是什么

    结构、原理、应用场景等方面都存在定的差异。以下是对这两种神经网络的比较: 基本结构 BP神经网络种多层前馈神经网络,由输入层、隐藏层和
    的头像 发表于 07-03 10:12 1149次阅读

    卷积神经网络分类方法有哪些

    卷积神经网络(Convolutional Neural Networks,CNN)是种深度学习模型,广泛应用于图像分类、目标检测、语义分割等计算机视觉任务。本文将详细介绍卷积神经网络的分类
    的头像 发表于 07-03 09:40 452次阅读

    卷积神经网络和bp神经网络的区别

    化能力。随着深度学习技术的不断发展,神经网络已经成为人工智能领域的重要技术之一。卷积神经网络和BP神经
    的头像 发表于 07-02 14:24 3613次阅读

    构建神经网络模型方法有几种

    构建神经网络模型是深度学习领域的核心任务之一。本文将详细介绍构建神经网络模型的几种方法,包括前飨神经网络、卷积
    的头像 发表于 07-02 10:15 336次阅读