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

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

文章目录

  • 深度神经网络中的计算和内存带宽
    • 来源
    • 原理介绍
    • 分析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://xiahunao.cn/news/2809941.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Temu、亚马逊店铺如何快速得到好评?自养号测评下单的秘籍及必备条件。

Temu、亚马逊店铺如何快速得到好评?在这个竞争激烈的电商平台上,好评是店铺吸引顾客、建立良好声誉的关键。快速积累好评不仅能够提高商品的曝光度,也有助于吸引更多潜在顾客的关注。 然而,亚马逊不同于国内电商,对于操纵评论、…

动态规划的时间复杂度优化

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 优化动态规划的时间复杂度,主要有如下几种: 一,不同的状态表示。 比如:n个人,m顶帽子。 第一种方式:dp[i][mask] ,i表示前i个人已经选择帽子&…

Python in Excel的一些使用心得

获得Python in Excel的preview之后, 就在任意的Excel单元格里可以敲py(来写Python代码了。不过Python in Excel并没有什么专门的文档, 只有一些_Get Started_教程, 比如link 1, link 2, 剩下的就是pandas, matplotlib, seaborn等lib的文章,和Python in Excel并没有什…

linux---安使用nginx

目录 一、编译安装Nginx 1、关闭防火墙,将安装nginx所需要软件包传到/opt目录下 ​编辑2、安装依赖包 3、创建运行用户、组 4、编译安装nginx 5、创建软链接后直接nginx启动 ​编辑 6、创建nginx自启动文件 ​编辑6.1 重新加载配置、设置开机自启并开启服务…

了解Node.js事件循环和事件驱动模型

在前端开发中,Node.js 是一个极其强大的工具,其事件驱动和非阻塞 I/O 的特性使其成为一个热门选择。但要充分发挥 Node.js 的优势,我们必须深入了解其事件循环和事件驱动模型。本文将深入探讨 Node.js 的事件循环机制以及事件驱动模型&#x…

【mysql】linux系统上进行安装操作(记录)

一、卸载自带的mariadb rpm -qa|grep mariadb #查看版本 yum -y remove mariadb版本号 #如mariadb-libs-5.5.52-1.el7.x86_64 删除目录rm -rf /var/lib/mysql/ 二、mysql安装 2.1 Mysql下载 https://dev.mysql.com/downloads/mysql/5.6.html#downloads 安装参考网址https…

为什么要学习PMP知识,PMP培训哪家好?

IT行业项目管理一枚,曾在做技术的时候对自己的职业发展越来越迷茫,不想干到35岁就参与到失业潮中,一直在想着办法提升自己的能力和竞争力,直到在领导嘴里了解到了PMP认证。也就是它对我的职业发展带来了不少的影响,这其…

美联储突然降息无望

作者:秦晋 我们知道,影响比特币未来1-2年市场走向的重要三因素是比特币ETF、比特币减半以及美联储降息。 如果说前两者是影响比特币市场比较紧密的微观因素。那么美联储降息就是影响比特币市场的重要宏观因素。如何看懂宏观因素?尽量倾听和观…

【openGL教程08】基于C++的着色器(02)

LearnOpenGL - Shaders 一、说明 着色器是openGL渲染的重要内容,客户如果想自我实现渲染灵活性,可以用着色器进行编程,这种程序小脚本被传送到GPU的显卡内部,起到动态灵活的着色作用。 二、着色器简述 正如“Hello Triangle”一章…

CSS3移动端(介绍、Chrome DevTools、视口、倍图、backgroud-size、开发方案、CSS初始化、特殊样式)

目录 1. 介绍2. Chrome DevTools移动端调试3. 视口3.1 布局视口layout viewport3.2 视觉视口visual viewport3.3 理想视口ideal viewport 4. 倍图4.1 图片的倍图使用4.2 背景图通过backgroud-size使用倍图4.3 精灵图作为背景图注意事项 5. 开发方案6. CSS初始化7. 特殊样式 1. …

【暖心驿站】壹起来|“会心驿小”——“灯笼传情 团圆共享”职工关爱活动

2024年2月23日上午,由曹桥街道总工会指导,“会心驿小”暖心驿站在平湖市新时代文明实践基地、平湖市非织造两创产业园区开展“灯笼传情 团圆共享”元宵节职工关爱活动,旨在丰富职工子女文化生活,提升职工幸福感和满足感。 社工通过…

【Git】Git命令的学习与总结

本文实践于 Learn Git Branching 这个有趣的 Git 学习网站。在该网站,可以使用 show command 命令展示所有可用命令。你也可以直接访问网站的sandbox,自由发挥。 一、本地篇 基础篇 git commit git commit将暂存区(staging area&#xff…

前端食堂技术周刊第 113 期:Node 年终总结、Node 新吉祥物、Qwik 2.0、React Labs 工作进展

美味值:🌟🌟🌟🌟🌟 口味:现炒花龙 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 大家好,我是童欧巴。欢迎来到前端食堂技术周刊,我们先来看下…

骨传导耳机排行榜前五名:2024高性能骨传导耳机汇总!

想要保护听力、缓解耳朵疲劳,骨传导耳机是一个很不错的选择,但却伴随着一些负面报道,称使用骨传导耳机可能对听力造成损害。作为一名专业的数码耳机测评师,为了了解这些负面报道背后的原因,我自费购买了多个品牌的骨传…

NotePad2轻便够用的文本编辑器

下载方式: 360软件管家里就可以安装,非常的方便。 打开后,界面如下: 可以拖拽打开文本,和notepad的功能差不多,可以平行替代。

Vue+SpringBoot打造衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…

MATLAB环境下基于洗牌复杂演化的图像分割算法

智能优化算法因其较强的搜索解能力而得到了大量的应用,在这些计算智能算法中,群体智能优化算法因其高效性、有效性以及健壮性等优点而得到了科研人员的青睐。这类算法借鉴生物群体的合作特性,主要解决大规模复杂的分布式问题,研究…

复旦大学最新研究发现,壳聚糖可延缓卵巢衰老

卵巢是哺乳动物的早期衰老器官之一,表现为卵泡数量减少,卵母细胞质量和数量下降。 卵巢微环境中与年龄相关的变化与女性生育能力受损有关,巨噬细胞在卵巢组织稳态和免疫监视中起着重要作用。然而,衰老对卵巢巨噬细胞功能和卵巢稳…

六、回归与聚类算法 - 逻辑回归与二分类

目录 1、应用场景 2、原理 2.1 输入 2.2 激活函数 3、损失以及优化 3.1 损失 3.2 优化 4、逻辑回归API 5、分类的评估方法 5.1 精确率和召回率 5.2 ROC曲线和AUC指标 线性回归欠拟合与过拟合线性回归的改进 - 岭回归分类算法:逻辑回归模型保存与加载无监…

MS2402隔离Σ-Δ调制器

产品简述 MS2402 是一款二阶 Σ-Δ 调制器,集成片上数字隔离器,能将模 拟输入信号转换为高速 1 位码流。调制器对输入信号连续采样,无 需外部采样保持电路。模拟信号输入满量程为 320mV ,转换后的 数字码流的最高数据速率为 1…