当深度学习遇上异构并行计算

近几年来,以深度神经网络(DNN)为代表的深度学习如火如荼,深度学习的研究领域从开始的图像识别(如imagenet比赛)到现在的自然语言处理,几乎有席卷一切机器学习研究领域的趋势。

对于深度神经网络的训练来说,通常网络越深,需要的训练时间越长。对于一些网络结构来说,如果使用串行的X86 处理器来训练的话,可能需要几个月、甚至几年,因此必须要使用并行甚至是异构并行的方法来优化代码的性能才有可能让训练时间变得可以接受。

人类生活的方方面面存在着并行或者并发,边吃饭边看电视,双手同时拔草,甚至吃饭时,嘴巴的动作和手的动作也是并行的。和人类社会广泛存在并行不同的是:计算机编程几乎一直都是串行的,绝大多数的程序只存在一个进程或线程。对于并行和向量化的研究可以追溯到20世纪60年代,但是直到近年来才得到广泛的关注,主要是自2003年以来,能耗和散热问题限制了 X86 CPU频率的提高,从而导致多核和向量处理器的广泛使用。

2003年以前,在摩尔定律的作用下,单核标量处理器的性能持续提升,软件开发人员只需要写好软件,而性能就等待下次硬件的更新,在2003年之前的几十年里,这种“免费午餐”的模式一直在持续。2003年后,主要由于功耗的原因,这种“免费的午餐”已经不复存在。为了生存,各硬件生产商不得不采用各种方式以提高硬件的计算能力,以下是目前最流行的几种方式是。

1)让处理器一个周期处理多条指令,这多条指令可相同可不同。如Intel Haswell处理器一个周期可执行4条整数加法指令、2条浮点乘加指令,同时访存和运算指令也可同时执行。

2)使用向量指令,主要是SIMD和VLIW技术。SIMD技术将处理器一次能够处理的数据位数从字长扩大到128或256位,也就提升了计算能力。

3)在同一个芯片中集成多个处理单元,根据集成方式的不同,分为多核处理器或多路处理器。多核处理器是如此的重要,以至于现在即使是手机上的嵌入式ARM处理器都已经是四核或八核。

4) 使用异构处理器,不同的架构设计的处理器具有不同的特点,如X86 处理器为延迟优化,以减少指令的执行延迟为主要设计考量(当然今天的X86 处理器设计中也有许多为吞吐量设计的影子);如NVIDIA GPU和AMD GPU则为吞吐量设计,以提高整个硬件的吞吐量为主要设计目标。

标量单核的计算能力没有办法接着大幅度提升,而以深度学习为代表的应用对硬件计算能力的需求依旧在提升,这是个实实在在的矛盾。在可见的将来,要解决这个矛盾,软件开发人员只有代码优化和并行可以选择。

从2006年开始,可编程的GPU越来越得到大众的认可,GPU是图形处理单元(Graphics Processing Unit)的简称,最初主要用于图形渲染。自20世纪90年代开始,NVIDIA、AMD(ATI)等GPU生产商对硬件和软件加以改进,GPU的可编程能力不断提高,GPU通用计算比以前的GPGPU(General-Gurpose Computing on Graphics Processing Units)容易许多,另外由于GPU具有比CPU强大的峰值计算能力,近来引起了许多科研人员和企业的兴趣。

在深度学习应用领域,自从cuda-convnet为利用gpu的计算能力设计开始,现在主流的深度学习平台(如caffe, theano)都支持GPU的训练,可以毫不讳言的说:GPU硬件已经是深度学习训练平台的标准配置。

要将使用GPU训练获得的深度学习模型部署给用户使用时,同样需要考虑深度学习算法对硬件计算能力的需求。由于不是每个客户都有GPU硬件,故在目前实际应用中,主要的部署平台是:X86(桌面端)和ARM(移动端),为了提高吞吐量,使用更少的服务器支持更多的访问请求,或提高用户使用体验,为X86 和 ARM处理器优化就变得很有意义。

由于各种各样的原因,大多数软件开发人员并没有很好的并行和代码优化理论和代码可供参考。最近华章出版公司出版的、由异构并行计算领域专家风辰编写的《并行算法设计与性能优化》、《并行编程方法与优化实践》和《科学计算与企业级应用的并行优化》填补了国内这一领域的空白。其中《并行算法设计与性能优化》和《并行编程方法与优化实践》已经上线,可以在京东和当当上购买。

《并行算法设计与代码优化》关注在并行优化和并行计算相关的理论、算法设计及高层次的实践经验;由于这本书填补了国内代码性能优化和并行计算的空白,得到了吴韧老师的强烈推荐。如果读者想要了解代码优化和并行化背后的理论基础,可购买此书。

《并行编程方法与优化实践》关注于C程序设计语言的向量化和并行化扩展及算法到硬件的映射;此书介绍了常见的SSE/AVX/NEON SIMD指令集编程,以及用于GPU的异构并行编程语言CUDA、OpenCL和OpenACC,以及常见的用于多核编程的OpenMP标准。并且以稠密矩阵运算和图像处理为例,介绍了如何使用这些工具优化程序性能。

《科学计算与企业级应用的并行优化》则关注于如何将线性代数、偏微分方程求解、分子动力学和机器学习领域的常见算法优良的在X86和GPU平台上实现出来。

当深度学习遇上异构并行计算相关推荐

  1. 当深度学习遇上量化交易——图与知识图谱篇

    ©PaperWeekly 原创 · 作者|桑运鑫 学校|上海交通大学硕士生 研究方向|图神经网络在金融领域的应用 本文主要回顾三篇将图和知识图谱应用到量化交易上的文章. NeurIPS 2019 论文 ...

  2. 计算未来轻沙龙 | 当深度学习遇上归纳推理,图神经网络有多强大?

    作为一名新世纪的深度学习炼丹师 是否整天面对各种结构的原(shu)料(ju)? 对于无规则的空间数据 传统炼丹大法好像并不能发挥奇效 图作为一种非常神奇的表示方式 可以表示生活中绝大多数现象或情境 那 ...

  3. 深度学习遇上稀缺数据就无计可施?这里有几个好办法

    2019-12-07 05:30:39 作者 | Tyler Folkman 编译 | 杨晓凡 对于深度学习而言,在有很多数据的情况下,再复杂的问题也不在话下,然而没有这么多数据呢?本文作者 Tyle ...

  4. 当深度学习遇上量化交易——公开信息篇

    ©PaperWeekly 原创 · 作者|桑运鑫 单位|上海交通大学硕士生 研究方向|图神经网络在金融领域的应用 本文主要回顾三篇利用文本信息和音频信息进行量化交易的文章. StockNet 论文标题 ...

  5. 当深度学习遇上量化交易——因子挖掘篇

    ©PaperWeekly 原创 · 作者|桑运鑫 学校|上海交通大学博士生 研究方向|图神经网络在金融领域的应用 在深度学习的所有应用场景中,股价预测也无疑是其中一个异常诱人的场景.随着传统线性模型的 ...

  6. 当深度学习遇上Web开发:Spring和OpenAI如何实现图片生成?

    文章目录 一.简介 1. 什么是Spring和OpenAI 2. 生成图像的意义和应用场景 二.相关技术介绍 1. 深度学习模型 2. GAN模型 3. TensorFlow框架 四.简单的Sprin ...

  7. 【高效炼丹-筑基期】当深度学习遇上概率分布,你不能不知道的神奇度量方法:KL散度!

    什么是KL散度 KL散度(Kullback-Leibler divergence),也称为相对熵,是一种用于衡量两个概率分布之间差异的度量方法.它可以描述两个分布之间的距离,用于衡量模型预测结果与真实 ...

  8. 当深度学习遇上图: 图神经网络的兴起!(文末送书)

    当深度学习遇上图,会碰撞出怎样的火花呢? 本文就带你来了解一下--近年来逆势而上的一门技术:图神经网络! 内容选自<图神经网络:基础与前沿(全彩)>一书! 01 什么是图 也许我们从来没有 ...

  9. 广告深度学习计算:异构硬件加速实践

    丨目录: - 前沿 1. 算力需求与供给 1.1 算力需求:模型复杂度 1.2 算力供给:异构硬件计算能力 1.3 问题与优化方法 2. 算法-系统-硬件协同性能优化 2.1 算法优化 2.2 系统优 ...

最新文章

  1. js的下拉框事件之onchange
  2. mysql 按月自动建表
  3. Flex DataGrid可编辑对象实现Enter跳转
  4. 用友云平台,真正的云原生架构,加速云应用落地 1
  5. ubuntu命令模式中文乱码
  6. 当神经网络遇上量子计算:谷歌证明量子神经网络可训练图像分类
  7. offsetLeft
  8. 关于python中enumerate和zip函数的用法及举例
  9. VMware Converter迁移linux系统虚拟机
  10. iOS 录音踩坑之旅
  11. STM32的延迟函数1us、1ms
  12. 针孔相机模型和相机内参矩阵K
  13. FISCO BCOS最强学习路径,汇聚全网资源(2022更新版)
  14. 匹配指定字符背后的所有内容(正则表达式)
  15. 使用Java 2D绘制黑白太极图案
  16. windows server 2016 开启多用户登陆
  17. 中缀和后缀表达式的转换
  18. 鲁泰纺织:在行业整合中稳健前行
  19. 软件的生命周期和测试的生命周期的区分
  20. RestartOnCrash-自动重启崩溃或挂起的应用程序

热门文章

  1. java动态添加组件_有关Java Swing动态增加组件
  2. 福田车载无线充电器方案开发设计_过年自驾回家,带上优胜仕车载无线充电器,一放即充导航无忧...
  3. matlab理想低通滤波器代码_自己动手,解开Matlab下AMD锐龙处理器性能封印
  4. java list 遍历 删除元素_java中List遍历删除元素相关做法和注意事项
  5. office上下滑动滚轮特别卡_滚轮及部件|自动扶梯和自动人行道
  6. 虚拟机增强工具的安装
  7. Hbase 技术细节笔记(上)
  8. 博客园添加访问人数统计超详细教程
  9. C语言之随机数和字符串输入输出
  10. Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API