模型推理一文看懂googletpu脉动阵列加速卷积计算原理

极智视界 极智视界     2022-12-03     755

关键词:

  本教程详细解释了 Google TPU 脉动阵列加速卷积计算原理。

  TPU 中计算卷积的方式和 GPU 不同,主要是依靠一种称为 “脉动阵列” 的硬件电路结构来实现的。脉动阵列的主体部分是一个二维的滑动阵列,其中每一个节点都是一个脉动计算单元,可以在一个时钟周期内完成一次乘加操作。脉动阵列中的行数和列数可以相等,也可以不相等,在每行每列的计算单元之间通过横向或纵向的数据通路来实现数据的向右和向下滑动传递。

举例:如下图,特征图像 F 大小为 3 x 3,通道数为 2;卷积核 W 和 G 大小为 2 x 2,卷积核个数为 2。
在这里插入图片描述

  以这个例子来解释脉动阵列实现卷积加速的过程。在这个例子中,采用固定卷积核权重,横向和纵向脉动输入特征值和中间部分和的方式。如下图所示,首先将 2 个 2 通道 W 和 G 卷积核权重静态地存储到脉动阵列的计算单元中,其中对应同一个卷积核的 2 个通道权重被排列在同一列中。再将 2 个通道的输入特征图 F 排列展开,每一行都错开一个时钟周期,并准备依次输入到脉动阵列中。
在这里插入图片描述

  当要用 2 个通道输入特征图 F 和卷积核 W 及 G 进行卷积时,F 首先通过重排,通过左侧数值载入器输入到脉动阵列最左边的一列中。输入值从上到下,每一行进入脉动阵列的数据都会比上一行延迟一个时钟周期。在第一个时钟周期内,输入值 F00 进入 W00 乘加单元与 W00 权重进行乘加运算,产生单元结果 Y00,此为 Y00 的第一部分和。脉动阵列第 1 个时钟周期的计算状态如下图。
在这里插入图片描述

  在第二个时钟周期内,上一次 W00 乘加单元的部分和 Y00 被向下传递到 W01 乘加单元中,同时第二行输入值 F01 与 W01 相乘的单元结果与传递下来的 Y00 相加得到 Y00第二次部分和。而 F01 进入 W00 乘加单元中,进行乘加运算求出 Y01 的第一次部分和。与此同时 F00 向右滑动进入 G00 乘加单元中求出单元结果 Y10 的第一次部分和。脉动阵列第 2 个时钟周期的计算状态如下图。
在这里插入图片描述

  以此类推,输入的特征值沿着脉动阵列的行水平方向不断向右滑动开启不同卷积核各自的部分和。而对应于每一个卷积核的部分和沿着脉动阵列的列垂直方向不断向下滑动并和当前计算单元的结果相累加,从而在每一列的最下方的计算单元中得到最终累加完成的对应于该卷积核所有通道的卷积结果。

  这个例子中在第 8 个时钟周期会得到第一个卷积结果,如下图。
在这里插入图片描述

  而从第 9 个时钟周期开始,如下图。每次都可以得到两个卷积结果,直到所有的输入特征图像都被卷积完毕。脉动阵列通过横、竖两个方向的同时脉动传递,输入值呈阶梯状进入阵列,顺次产生每个卷积核的最终卷积结果。
在这里插入图片描述

  脉动阵列的特性决定数据必须按照事先安排好的顺序依次进入,所以每次要填满整个矩阵就需要一定的启动时间,而这段时间往往会造成硬件资源的浪费。启动时间通常可以通过脉动阵列的 “行数 + 列数 - 1” 计算得到。当度过启动时间后,整个脉动阵列进入满载状态,可以发挥出最大的吞吐率。

  在上面的例子中采用了固定卷积核权重,横向脉动输入特征值,纵向脉动部分和的方式来计算卷积结果。同理,也可以采用固定部分和,横向脉动输入特征值,纵向脉动卷积核权重的方式来计算得到同样的结果。事实上,可以任意选择脉动三个变量中的两个而固定另外一个的方式来实现卷积计算,具体的选择会依据各种实现方式的实际情况和应用需求来决定。

  需要指出的是,当计算的卷积核过大或者通道太多时,如果把所有通道的权重都串联在一列上,那么势必造成脉动阵列过于庞大或者畸形,不便于现实的电路设计。这时候往往采用分割计算、末端累加的方式来解决这个问题。系统会把多通道的权重数据分割成几个部分,每个部分都能够适合脉动阵列的大小。然后依次对每个部分的权重进行计算,计算完成的结果会临时存放在脉动阵列底部的一组加法累加器中。当换入另一组权重块后结果就会被累加,直到所有权重块都遍历完成,累加器累加所有的结果后输出最终值。

  TPU 中的脉动阵列仅仅完成了卷积的工作,而完成整个神经网络的计算还需要其他计算单元的配合。如下图,矢量计算单元通过输入数据端口接收来自于脉动阵列中的卷积计算的结果,通过激活单元中的非线性函数电路来产生激活值,激活函数可以根据网络需求来定制。在适量计算单元中,还可以通过归一化函数对激活值进行归一化,再经过池化单元就可以对激活值进行池化输出。这些操作都由队列模块进行控制。例如队列模块可以通过配置参数的端口指定激活函数、归一化函数或池化函数,以及处理步长等参数。矢量计算单元处理完成后将激活值发送到片上的统一缓冲区中暂存,作为下一层网络的输入。TPU 按照这种方法,一层一层地完成整个神经网络的计算。
在这里插入图片描述

  虽然脉动阵列主要用来加速神经网络的推理计算,但这个架构不光是只能处理卷积,它在进行通用矩阵计算时依然高效且强大,因此还可以用来完成除了卷积神经网络以外的其他一系列工作,比如全连接神经网络、线性回归、逻辑回归、分类(如K均值聚类)与视频编码和图像处理等。



扫描下方二维码即可关注我的微信公众号【极智视界】,获取更多AI经验分享,让我们用极致+极客的心态来迎接AI !
在这里插入图片描述

一文看懂img2col卷积加速算法

本文转自【模型推理】一文看懂Img2Col卷积加速算法直接卷积计算​直接卷积计算一定是很直接的,也是大多数人学习卷积神经网络时所直观了解的卷积计算方式。直接卷积是按照卷积层的计算特性进行计算,卷积核中的... 查看详情

一文看懂img2col卷积加速算法

本文转自【模型推理】一文看懂Img2Col卷积加速算法直接卷积计算​直接卷积计算一定是很直接的,也是大多数人学习卷积神经网络时所直观了解的卷积计算方式。直接卷积是按照卷积层的计算特性进行计算,卷积核中的... 查看详情

模型推理谈谈为什么卷积加速更喜欢nhwclayout(代码片段)

 本文主要讨论一下为什么卷积加速更加喜欢NHWC的数据排布。 我目前接触过的数据排布类型(主要针对卷积)有NCHW(pytorch、caffe),NHWC(Tensorflow,也是TVMGPU和寒武纪MLUCore上更喜欢的dataLayout),CHW(TensorRT里不考虑动态batch... 查看详情

一文带你读懂非结构化稀疏模型压缩和推理优化技术

...面的快速转变。一个完备的深度学习落地流程包括:模型设计、模型训练与调优、模型压缩、推理部署,最终成为在各种设备上快速、精准运行的人工智能系统。考虑到终端设备计算能力的限制,如何将研发产出的大... 查看详情

一文带你读懂非结构化稀疏模型压缩和推理优化技术

...面的快速转变。一个完备的深度学习落地流程包括:模型设计、模型训练与调优、模型压缩、推理部署,最终成为在各种设备上快速、精准运行的人工智能系统。考虑到终端设备计算能力的限制,如何将研发产出的大... 查看详情

神经网络推理加速:合并卷积和bn层运算原理及实验(代码片段)

1. 为什么要合并BN层在训练深度网络模型时,BN(BatchNormalization)层能够加速网络收敛,并且能够控制过拟合,一般放在卷积层之后。BN层将数据归一化后,能够有效解决梯度消失与梯度爆炸问题。虽然BN层... 查看详情

神经网络推理加速:合并卷积和bn层运算原理及实验(代码片段)

1. 为什么要合并BN层在训练深度网络模型时,BN(BatchNormalization)层能够加速网络收敛,并且能够控制过拟合,一般放在卷积层之后。BN层将数据归一化后,能够有效解决梯度消失与梯度爆炸问题。虽然BN层... 查看详情

两行代码自动压缩vit模型!模型体积减小3.9倍,推理加速7.1倍

Transformer模型及其变体,因其更优的注意力机制能力和长时依赖等特性,已成为自然语言处理(NLP)、语音识别(ASR)、计算机视觉(CV)等领域的主流序列建模结构。根据PaperWithCode网站ObjectDetectiononCOCOtest-dev专栏数据,检测... 查看详情

模型推理谈谈为什么量化能加速推理(代码片段)

... o_O O_o ~_~ o_O 本文主要讨论一下为什么量化能加速模型推理。 前面已经写过几篇关于模型量化相关的文章:《【模型推理】谈谈几种量化策略:MinMax、KLD、ADMM、EQ》、《【模型推理】谈谈模型量化组织方式》、... 查看详情

一文看懂25个神经网络模型

...网络的架构还真是不容易。光是知道各式各样的神经网络模型缩写(如:DCIGN、BiLSTM、DCGAN……还有哪些?), 查看详情

一文看懂javaio系统(转)

...;一文看懂javaio系统  学习javaIO系统,重点是学会IO模型,了解了各种IO模型之后就可以更好的理解javaIOJavaIO是一套Java用来读写数据(输入和输出)的API。大部分程序都要处理一些输入,并由输入产生一些输出。Java为此提... 查看详情

模型推理加速系列bert加速方案对比torchscriptvs.onnx(代码片段)

文章目录简介基于ONNX导出ONNX模型示例代码基于TorchScriptJITTorchScript示例代码推理速度评测CPUGPU附录简介本文以BERT-base的为例,介绍2种常用的推理加速方案:ONNX和TorchScript,并实测对比这两种加速方案与原始Pytorch模型... 查看详情

模型推理谈谈caffe的conv算子(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 O_o >_< o_O O_o ~_~ o_O 本文主要聊一下caffe框架中的conv算子。 caffe中的卷积主要有两种实现:一种是img2col+gemm+bias,另一种是调用cudnn_conv&#x... 查看详情

模型推理加速系列07:以bert为例全面评测各种推理加速方案(代码片段)

...李白风格创作的,仅供欣赏。前文以CV领域中的resnet18模型为例综合评测各种推理加速方 查看详情

模型推理加速系列07:以bert为例全面评测各种推理加速方案(代码片段)

...李白风格创作的,仅供欣赏。前文以CV领域中的resnet18模型为例综合评测各种推理加速方 查看详情

一文看懂决策树

...决分类问题的算法,决策树算法采用树形结构,使用层层推理来实现最终的分类。决策树由下面几种元素构成:根节点:包含样本的全集内部节点:对应特征属性测试叶节点:代表决策的结果 预测时,在树的内部 查看详情

神经网络模型基本概念一文看懂

1.神经元Xi为一项输入,Wi为对应的参数先求和W0*X0+W1*X1+W2*X2+....=sum再使用激活函数得到f(sum)=y2. 神经网络输入层 :负责将输入向量传递给神经网络。如果我们有一个包含3个特征的矩阵(形状Nx3)&#x... 查看详情

如何加速 Tensorflow 2 keras 模型进行推理?

】如何加速Tensorflow2keras模型进行推理?【英文标题】:HowtospeedupTensorflow2kerasmodelforinference?【发布时间】:2020-03-0420:50:55【问题描述】:所以现在有一个重大更新,从TensorFlow1.X迁移到2.X。在TF1.X中,我习惯了一个管道,它帮助我... 查看详情