深度神经网络中的计算和内存带宽

深度神经网络中的计算和内存带宽

文章目录

  • 深度神经网络中的计算和内存带宽
    • 来源
    • 原理介绍
    • 分析1:线性层
    • 分析2:卷积层
    • 分析3:循环层
    • 总结

来源

相关知识来源于这里。


原理介绍

Memory bandwidth and data re-use in deep neural network computation can be estimated with a few simple simulations and calculations. Deep neural network computation requires the use of weight data and input data. Weights are neural network parameters, and input data (maps, activations) is the data you want to process from one layer to the next.

深度神经网络计算中的内存带宽(memory bandwidth)和数据重用(data reuse)可以通过一些简单的模拟计算来估计。深度神经网络计算需要使用权重数据输入数据权重数据是神经网络参数,输入数据(线性映射、非线性激活函数)是要从 一个神经网络层 传输到 下一个神经网络层 的数据。

In general, if a computation re-uses data, it will require less memory bandwidth. Re-use can be accomplished by:

  • sending more inputs to be processed by the same weights;
  • sending more weights to process the same inputs.

如果计算重用数据,则需要较少的内存带宽。可以通过以下方式实现重用:

  1. 发送更多输入,以由相同的权重进行处理;
  2. 发送更多权重以处理相同的输入;
  3. 如果没有输入或权重数据重用,则带宽对于给定应用程序处于最大值。

为什么“计算重用数据可以减小内存带宽”?这是我的理解:如果把 数据分布 作为横轴,数据的使用次数作为纵轴,那么就可以画出左边“高带宽”( 数据分布 广且数据使用次数低)以及右边“低带宽”( 数据分布 窄但数据使用次数高)的图。显然,当把数据“拆成”可重复利用的三份时, 数据分布 变窄且数据的使用次数自然提高,以便保证处理到所有的数据,因此可以右边是“低带宽”。

1

对于一个深度学习模型而言,可以用到的数据就是权重数据输入数据。所以减小内存带宽的策略就是对这两部分数据进行复用。复用权重数据就是频繁地把不同数据输入到一组权重数据中;复用输入数据就是频繁地把一组输入数据输入到不同权重数据中。最好的情况是同时复用权重数据输入数据(似乎有点困难)。最差的情况是同时都不复用权重数据输入数据,此时内存带宽达到最大值,类似于上图左半部分。


分析1:线性层

Here a weight matrix of M M M by M M M is used to process a vector of M M M values with b b b bits. Total data transferred is: b ( M + M 2 ) b(M+M^{2}) b(M+M2) or ≈ b M 2 \approx bM^{2} bM2 .

这里使用 M × M M\times M M×M 的权重矩阵来处理具有 b b b 位的 M M M 值向量。传输的数据总数为: b ( M + M 2 ) b(M+M^{2}) b(M+M2) ≈ b M 2 \approx bM^{2} bM2

这是在执行线性层操作时,需要移动或处理的数据总量。公式 b ( M + M 2 ) b(M+M^{2}) b(M+M2) 给出了在这个过程中涉及的总位数(即数据量)。 b M bM bM 表示向量的位数总和,因为向量有 M M M 个值,每个值 b b b 位。 b M 2 bM^{2} bM2 表示权重矩阵中所有元素的位数总和,因为矩阵有 b M 2 bM^{2} bM2 个元素,每个元素 b b b 位。

也就是说,线性矩阵层的计算包括矩阵计算计算结果传输两个步骤。矩阵计算本质就是矩阵乘法,必然是对矩阵内的所有元素进行计算;计算结果传输即是生成新的向量。此外,当模型比较大的时候, M M M 值较大,此时 M 2 M^{2} M2 远远大于 M M M ,那么就意味着传输的来源主要是矩阵计算中间变量

If the linear layer is used only for one vector, it will require to send the entire M 2 M^{2} M2 matrix of weights as computation occurs. If your system has T T T operations/second of performance, then the time to perform the computation is b M 2 T \frac{bM^{2}}{T} TbM2. Given than bandwidth B W = total data transferred / time BW = \text{total data transferred} / \text{time} BW=total data transferred/time , in case of linear layers B W = T BW = T BW=T.

如果线性层仅用于一个向量,则在进行计算时,它将需要发送整个 M 2 M^{2} M2 权重矩阵。如果系统具有 T T T 次操作/秒的性能,则执行计算的时间为 b M 2 T \frac{bM^{2}}{T} TbM2。给定带宽 B W = 传输的总数据 / 时间 BW= 传输的总数据 / 时间 BW=传输的总数据/时间 ,如果是线性层, B W = T BW = T BW=T

这就说明,对于一个网络模型全是线性矩阵的话,系统每秒能处理的计算操作越多,那么内存带宽就会越大

This means that if your system has 128 G-ops/s of performance, you will need a bandwidth of more than 128 GB/s to perform the operation at full system efficiency (provided, of course that the system can do this!).

如果系统具有 128 G-ops/s 的性能,您将需要超过 128 GB/s 的带宽才能以全系统效率执行线性矩阵计算操作(当然,前提是系统可以做到这一点!作者在这里提到“全效率”这个概念,主要是想表达,如果网络模型大部分是线性层、且只操作单个向量的话,一般是比较低效的。

Of course if you have multiple inputs for the same linear layer (multiple vectors that need to be multiplied by the same matrix) then: B W = T / B BW = T/B BW=T/B, where B B B is the number of vectors or Batch.

如果同一线性层有多个输入(需要乘以同一矩阵的多个矢量),那么 B W = T / B BW = T/B BW=T/B ,其中 B B B 是向量数或批次数。

当线性矩阵处理的不是一个向量而是一个矩阵的时候,相当于复用权重数据——频繁地把不同数据输入到一组权重数据中,相当于多个向量把内存带宽“拆解”了,从公式 B W = T / B BW = T/B BW=T/B 可以看出, B B B 越大内存带宽越小。我的理解是,transformer 中对一个序列 ( 1 × N ) (1\times N) (1×N) 进行嵌入处理,得到了维度比较高的矩阵 ( N × d e m b ) (N\times d_{emb}) (N×demb) ,这也是在降低 transformer 中的带宽。


分析2:卷积层

For convolution operation, the bandwidth requirements are usually lower, as an input map data can be used in several convolution operation in parallel, and convolution weights are relatively small.

对于卷积运算,内存带宽要求通常较低,因为输入图数据可以并行用于多个卷积运算,并且卷积权值相对较小。

For example: a 13 × \times × 13 pixel map in a 3 × \times × 3 convolution operation from 192 input maps to 192 output maps (as, for example, in Alexnet layer 3) requires: ≈ \approx 4MB weight data and ≈ \approx 0.1MB input data from memory. This may require about 3.2 GB/s to be performed on a 128 G-ops/s system with ≈ \approx 99% efficiency (SnowFlake Spring 2017 version). The bandwidth usage is low is because the same input data is used to compute 192 outputs, albeit with different small weight matrices.

从 192 个输入映射到 192 个输出映射(例如在 Alexnet 第 3 层中)的 3 × \times × 3 卷积运算中的 13 × \times × 13 像素映射需要: ≈ \approx 4MB 权重数据和 ≈ \approx 0.1MB 内存输入数据。这可能需要在 128 G-ops/s 系统上执行约 3.2 GB/s,效率约为 99%。带宽使用率较低是因为相同的输入数据用于计算 192 个输出,尽管具有不同的小权重矩阵。

每个输出像素需要进行一次完整的卷积运算,即九次乘加操作(对于 3 × \times × 3 滤波器)。
因此,对于一个输出特征映射,需要169(像素点) × \times × 9(操作/像素点)= 1,521次运算。
对于192个输出特征映射,总计算量为:1,521 × \times × 192 = 291,840次运算。
如果系统运行在128 G-ops/s(即128亿次运算/秒),那么执行291,840次运算大约需要:291,840 / (128 x 10^9)秒 ≈ 0.00228毫秒。可见是很高效的。


分析3:循环层

Memory bandwidth for recurrent neural networks is one of the highest. Deep Speech 2 system or similar use 4 RNN layers of 400 size (see here and here). Each layer uses the equivalent of 3 linear-layer-like matrix multiplications in a GRU model. During inference the input batch is only 1 or a small number, and thus running these neural network requires the highest amount of memory bandwidth, so high it usually it is not possible to fully utilize even efficient hardware at full utilization.

循环神经网络的内存带宽是最高的。Deep Speech 2 系统或类似系统使用 4 个 400 大小的 RNN 层。每层相当于 GRU 模型中 3 个线性层的矩阵乘法。在推理过程中,输入批次只有 1 个或很小的数字,因此运行这些神经网络需要的内存带宽最高,即使是高效硬件通常也无法充分利用。

我的理解是,RNN 系列的工作是串行的,意味着输入数据部分难复用;此外,GRU 或者 LSTM 的模型本身复杂,权重数据也很难复用。这就导致推理时硬件效率低下,占用内存带宽太高。


总结

2

This is the arithmetic intensity for our accelerator Snowflake. Arithmetic intensity is the number of operations performed on a byte of data. As you can see all neural network models tested perform at the maximum (roofline) efficiency of the device. On the other hand linear layers have very little data re-use and are limited by memory bandwidth constraints.

在加速器 Snowflake 下测试的算术强度。算术强度是对一个字节的数据进行运算的次数。 可以看到,所有测试过的神经网络模型都达到了设备的最高(顶线、极限情况)效率。线性层的数据重复利用率非常低,并且受到内存带宽的限制。顶端的 GoogleNet 、 AlexNet 和 Resnet-50 都是卷积层为主的网络,效率和复用率都是很高的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492652.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

骨传导耳机怎么样?六大规则与避坑绝招大揭秘

近年来,骨传导蓝牙耳机在健身与科技爱好者之间变得异常受欢迎。相比之下,传统入耳式蓝牙耳机在户外活动中无法让佩戴者听到周围的环境声,这一缺点限制了它们的使用场景。骨传导蓝牙耳机通过其独特的开放式设计来解决这一问题,使其…

力扣--双指针167.二数之和Ⅱ

这题一个穷举方法是比较好想到的&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int i,j;int nnumbers.size();vector<int>result(2,0);for(i0;i<n-1;i){for(ji1;j<n;j){if(numbers[i]numbers[j…

IO进程线程:将信号灯集的相关函数二次封装

sem.h #ifndef _SEM_H_ #define _SEM_H_//创建或打开共享内存:参数为要申请的信号灯集中包含的灯的个数&#xff0c;返回值信号灯集的id int open_sem(int semcount);//进行申请资源操作:参数为要申请的信号灯id,以及灯的编号 int P(int semid,int semno);//进行释放资源操作:…

第九篇:SQL语法-DCL-数据控制语言

DCL英文全称是Data ControlLanquage&#xff08;数据控制语言&#xff09;&#xff0c;用来管理数据库用户&#xff0c;控制数据库的访问权限 DCL主要包含两方面的操作&#xff0c; 用户管理&#xff08;控制哪些用户能访问数据库&#xff09;权限控制&#xff08;控制用户能访…

Unity—MVC分层开发思想

每日一句&#xff1a;当你不努力的时候&#xff0c;天赋就会一点一点被收回 目录 MVC分层开发思想 MVC是什么 MVC的开发步骤 案例&#xff1a;点击按钮实现金币进行添加&#xff0c;并且把金币记录到JSON里 MVC模式实现 背包系统基础代码 背包项目实现步骤 MVC分层开发思…

不会PS怎么抠图换背景?推荐两个AI抠图方法

在数字化创意的世界里&#xff0c;我们常常被那些精美的图片所吸引&#xff0c;但有时候&#xff0c;我们更希望将图片中的某个元素单独提取出来&#xff0c;以便进行更深入的编辑、更自由的创作。此时&#xff0c;抠图软件便如同一位精湛的雕刻家&#xff0c;将图片中的细节一…

编程的基础:理解时间和空间复杂度

编程的基础&#xff1a;理解时间和空间复杂度 时间复杂度空间复杂度示例常数时间复杂度 O(1)线性时间复杂度 O(n)线性对数时间复杂度 O(n log n)二次时间复杂度 O(n^2)指数时间复杂度 O(2^n) 空间复杂度示例常数空间复杂度 O(1)线性空间复杂度 O(n)线性对数空间复杂度 O(log n)…

Jmeter学习系列之八:控制器Controllers 的入门介绍

一、Controllers 简介 Jmeter有两种类型的控制器&#xff1a;Samplers&#xff08;取样器&#xff09;和Logical Controllers&#xff08;逻辑控制器&#xff09;&#xff1b;它们驱动着测试的进行取样器&#xff1a;让jmeter发送请求到服务器以及接收服务器的响应数据逻辑控制…

字节、腾讯、华为等50家大厂年终奖曝光,技术岗依旧很吃香!

一、大厂年终奖发放时间与数额 每到年末&#xff0c;年终奖就成了大家关心的话题&#xff0c;今年情况怎么样呢&#xff1f; 我们来看看互联网大厂的年终奖就知道了&#xff0c;先来看看发放时间。 一般来说&#xff0c;大厂年终奖发放多集中在12月-2月发放。 从上图一些网友…

【Spring Cloud】高并发带来的问题及常见容错方案

文章目录 高并发带来的问题编写代码修改配置压力测试修改配置&#xff0c;并启动软件添加线程组配置线程并发数添加Http取样配置取样&#xff0c;并启动测试访问message方法观察效果 服务雪崩效应常见容错方案常见的容错思路常见的容错组件 总结 欢迎来到阿Q社区 https://bbs.c…

3分钟快速实现串口PLC远程下载程序操作说明

3分钟快速实现串口PLC远程下载程序操作说明 搜索蓝蜂物联网官网&#xff0c;即可免费领取样机使用&#xff01;&#xff01;先到先得&#xff01;&#xff01;&#xff01; 一. 适用产品型号 其余型号网关此功能正在开发中&#xff0c;敬请期待。 二. 远程下载功能使用流程 …

基于STM32的儿童智能安全防护书包设计

一、前言 1.1 项目介绍 【1】项目功能介绍 随着社会的进步和科技的发展&#xff0c;儿童安全问题日益引起广泛关注。在日常生活中&#xff0c;尤其是在上学放学途中、户外活动时&#xff0c;儿童走失事件时有发生&#xff0c;给家庭和社会带来了极大的困扰和担忧。随着学业负…