松鼠乐园 松鼠乐园
  • 注册
  • 登录
  • 首页
  • 快捷入口
    • Vue
    • Tensorflow
    • Springboot
    • 语言类
      • CSS
      • ES5
      • ES6
      • Go
      • Java
      • Javascript
    • 工具类
      • Git
      • 工具推荐
    • 服务器&运维
      • Centos
      • Docker
      • Linux
      • Mac
      • MySQL
      • Nginx
      • Redis
      • Windows
    • 资源类
      • 论文
      • 书籍推荐
      • 后端资源
      • 前端资源
      • html网页模板
      • 代码
    • 性能优化
    • 测试
  • 重大新闻
  • 人工智能
  • 开源项目
  • Vue2.0从零开始
  • 广场
首页 › 人工智能 › 内存带宽与计算能力,谁才是决定深度学习执行性能的关键?

内存带宽与计算能力,谁才是决定深度学习执行性能的关键?

迦娜王
3年前人工智能
445 0 0

机器之心专栏

作者:李飞

随着深度学习的不断发展,计算能力得到了深度学习社区越来越多的注意。任何深度学习模型,归根到底都是需要跑在设备上的,而模型对设备性能的要求越低,则能得到越多的运用——千万不能让硬件成为了模型普及的瓶颈!

说到模型对于硬件的要求,大家第一个想到的就是计算量,即一个深度学习模型需要多少次计算才能完成一次前馈。然而,除了运算量之外,模型对于内存带宽的需求也是影响实际计算所需要时间的重要参数。我们下面会看到,在内存带宽有限的情况下,仅仅缩小计算量并不能让计算时间等比例下降!

内存带宽与计算能力,谁才是决定深度学习执行性能的关键?

内存带宽对于硬件系统的性能影响如上图所示。如果把内存比做瓶子,运算单元比作杯子,那么数据就是瓶子里的各色颗粒,而内存接口就是瓶口,通过瓶口数据才能进入杯子被消费(处理)掉。而内存带宽就是瓶口的宽度了。瓶口宽度越窄,则数据需要越多时间才能进入杯子(处理单元)。正所谓「巧妇难为无米之炊」,如果带宽有限,那么即使处理单元无限快,在大多数时候也是处理单元在空等数据,造成了计算力的浪费。

深度学习网络与 Roofline 模型

对于工程师来说,定性分析并不够,我们还需要能定量分析算法对于内存带宽的需求,以及对于计算性能的影响。

算法对于内存带宽的需求通常使用「运算强度 (operational intensity,或称 arithmetic intensity)」这个量来表示,单位是 OPs/byte。这个量的意思是,在算法中平均每读入单位数据,能支持多少次运算操作。运算强度越大,则表示单位数据能支持更多次运算,也就是说算法对于内存带宽的要求越低。所以,运算强度大是好事!

我们来举一个例子。对于步长(stride)为 1 的 3×3 卷积运算,假设输入数据平面大小为 64×64。简单起见,假设输入和输出 feature 都为 1。这时候,总共需要进行 62×62 次卷积运算,每次卷积需要做 3×3=9 次乘加运算,所以总共的计算次数为 34596,而数据量为(假设数据和卷积核都用单精度浮点数 2byte):64x64x2(输入数据) 3x3x2(卷积核数据)= 8210 byte,所以运算强度为 34596/8210=4.21。如果我们换成 1×1 卷积,那么总的计算次数变成了 64×64=4096,而所需的数据量为 64x64x2 1x1x2=8194。显然,切换为 1×1 卷积可以把计算量降低接近 9 倍,但是运算强度也降低为 0.5,即对于内存带宽的需求也上升了接近 9 倍。因此,如果内存带宽无法满足 1×1 卷积计算,那么切换成 1×1 卷积计算虽然降低了接近 9 倍计算量,但是无法把计算速度提升 9 倍。

这里,我们可以看到,深度学习计算设备存在两个瓶颈,一个是处理器计算能力,另一个是计算带宽。如何分析究竟是哪一个限制了计算性能呢?可以使用 Roofline 模型。

典型的 Roofline 曲线模型如上图所示,坐标轴分别是计算性能(纵轴)和算法的运算强度(横轴)。Roofline 曲线分成了两部分:左边的上升区,以及右边的饱和区。当算法的运算强度较小时,曲线处于上升区,即计算性能实际被内存带宽所限制,有很多计算处理单元是闲置的。随着算法运算强度上升,即在相同数量的数据下算法可以完成更多运算,于是闲置的运算单元越来越少,这时候计算性能就会上升。然后,随着运算强度越来越高,闲置的计算单元越来越少,最后所有计算单元都被用上了,Roofline 曲线就进入了饱和区,此时运算强度再变大也没有更多的计算单元可用了,于是计算性能不再上升,或者说计算性能遇到了由计算能力(而非内存带宽)决定的「屋顶」(roof)。拿之前 3×3 和 1×1 卷积的例子来说,3×3 卷积可能在 roofline 曲线右边的饱和区,而 1×1 卷积由于运算强度下降,有可能到了 roofline 左边的上升区,这样 1×1 卷积在计算时的计算性能就会下降无法到达峰值性能。虽然 1×1 卷积的计算量下降了接近 9 倍,但是由于计算性能下降,因此实际的计算时间并不是 3×3 卷积的九分之一。

内存带宽与计算能力,谁才是决定深度学习执行性能的关键?

显然,一个计算系统的内存带宽如果很宽,则算法不需要运算强度很大也能轻易碰到计算能力上限决定的「屋顶」。在下图中,计算能力不变,而随着内存带宽的上升,达到计算力屋顶所需的运算强度也越低。

内存带宽与计算能力,谁才是决定深度学习执行性能的关键?

Roofline 模型在算法-硬件协同设计中非常有用,可以确定算法和硬件优化的方向:到底应该增加内存带宽/减小内存带宽需求,还是提升计算能力/降低计算量?如果算法在 roofline 曲线的上升区,那么我们应该增加内存带宽/减小内存带宽需求,提升计算能力/降低计算量对于这类情况并没有帮助。反之亦然。

我们来看一个实际的例子,比较一下各种机器学习算法在 roofline 模型上所处的位置。下图取自 Google 的 TPU 论文《In-Datacenter Performance Analysis of a Tensor Processing Unit》。由图中可见,LSTM 算法的运算强度最低,所以被卡在了 roofline 模型的上升区中间的地方,即 TPU 在执行 LSTM 算法的时候,由于内存带宽限制所以性能只有 3TOPS 左右,仅为峰值性能(90TOPS)的三十分之一。经典全联接神经网络(multi-layer perceptrons, MLP)的运算强度略好于 LSTM,也被卡在 roofline 曲线的上升区,实际执行性能大约在 10TOPS 左右。而卷积神经网络模型,尤其是 CNN0,由于卷积神经网络中能实现卷积核复用,因此运算强度非常高,于是可以非常接近 TPU roofline 曲线的屋顶(86 TOPS)。CNN1 模型虽然运算强度也很高,但是由于种种其他原因(论文中表示是由于 CNN1 模型的特征深度较浅无法完全利用 TPU 的计算单元)无法到达屋顶。这个例子又让我们看到了硬件-算法协同设计时的另一个要点:除了内存带宽之外还有「其他原因」可能让算法无法到达屋顶,我们要尽量减小这些「其他因素」!

内存带宽与计算能力,谁才是决定深度学习执行性能的关键?

0
当大批国人才开始投身深度学习,有人站出来说DL快死了
上一篇
4步带你找到正确的深度学习模型!
下一篇
评论 (0)

请登录以参与评论。

现在登录
聚合文章
Servicios profesionales Organizaciones
1年前
在Gitee收获近 5k Star,更新后的Vue版RuoYi有哪些新变化?
1年前
vue3.x reactive、effect、computed、watch依赖关系及实现原理
1年前
Vue 3 新特性:在 Composition API 中使用 CSS Modules
1年前
标签
AI AI项目 css docker Drone Elaticsearch es5 es6 Geometry Go gru java Javascript jenkins lstm mysql mysql优化 mysql地理位置索引 mysql索引 mysql规范 mysql设计 mysql配置文件 mysql面试题 mysql高可用 nginx Redis redis性能 rnn SpringBoot Tensorflow tensorflow2.0 UI设计 vue vue3.0 vue原理 whistle ZooKeeper 开源项目 抓包工具 日志输出 机器学习 深度学习 神经网络 论文 面试题
相关文章
我收集了12款自动生成器,无聊人士自娱自乐专用
输入一张图,就能让二次元老婆动起来,宛如3D:这全是为了科学啊
使用ONNX+TensorRT部署人脸检测和关键点250fps
基于 Keras 的烟火检测
松鼠乐园

资源整合,创造价值

小伙伴
墨魇博客 无同创意
目录
重大新闻 Centos CSS Docker ES5 ES6 Go Java Javascript Linux Mac MySQL Nginx Redis Springboot Tensorflow Vue Vue2.x从零开始 Windows 书籍推荐 人工智能 前端资源 后端资源 壁纸 开源项目 测试 论文
Copyright © 2018-2022 松鼠乐园. Designed by nicetheme. 浙ICP备15039601号-4
  • 重大新闻
  • Centos
  • CSS
  • Docker
  • ES5
  • ES6
  • Go
  • Java
  • Javascript
  • Linux
  • Mac
  • MySQL
  • Nginx
  • Redis
  • Springboot
  • Tensorflow
  • Vue
  • Vue2.x从零开始
  • Windows
  • 书籍推荐
  • 人工智能
  • 前端资源
  • 后端资源
  • 壁纸
  • 开源项目
  • 测试
  • 论文
热门搜索
  • jetson nano
  • vue
  • java
  • mysql
  • 人工智能
  • 人脸识别
迦娜王
坚持才有希望
1224 文章
35 评论
242 喜欢
  • 0
  • 0
  • Top