https://www.toutiao.com/a6675902565571363339/

搞AI,谁又没有“GPU之惑”?

张量核心、显存带宽、16位能力……各种纷繁复杂的GPU参数让人眼花缭乱,到底怎么选?

从不到1000元1050 Ti到近30000元的Titan V,GPU价格的跨度这么大,该从何价位下手?谁才是性价比之王?

让GPU执行不同的任务,最佳选择也随之变化,用于计算机视觉和做NLP就不太一样。

而且,用云端TPU、GPU行不行?和本地GPU在处理任务时应该如何分配,才能更省钱?

最合适的AI加速装备,究竟什么样?

现在,为了帮你找到最适合的装备,华盛顿大学的博士生Tim Dettmers将对比凝练成实用攻略,最新的模型和硬件也考虑在内。

到底谁能在众多GPU中脱颖而出?测评后马上揭晓。

文末还附有一份特别精简的GPU选购建议,欢迎对号入座。

最重要的参数

针对不同深度学习架构,GPU参数的选择优先级是不一样的,总体来说分两条路线:

卷积网络和Transformer:张量核心>FLOPs(每秒浮点运算次数)>显存带宽>16位浮点计算能力

循环神经网络:显存带宽>16位浮点计算能力>张量核心>FLOPs

这个排序背后有一套逻辑,下面将详细解释一下。

在说清楚哪个GPU参数对速度尤为重要之前,先看看两个最重要的张量运算:矩阵乘法卷积

举个栗子,以运算矩阵乘法A×B=C为例,将A、B复制到显存上比直接计算A×B更耗费资源。也就是说,如果你想用LSTM等处理大量小型矩阵乘法的循环神经网络,显存带宽是GPU最重要的属性。

矩阵乘法越小,内存带宽就越重要。

相反,卷积运算受计算速度的约束比较大。因此,要衡量GPU运行ResNets等卷积架构的性能,最佳指标就是FLOPs。张量核心可以明显增加FLOPs。

Transformer中用到的大型矩阵乘法介于卷积运算和RNN的小型矩阵乘法之间,16位存储、张量核心和TFLOPs都对大型矩阵乘法有好处,但它仍需要较大的显存带宽。

需要特别注意,如果想借助张量核心的优势,一定要用16位的数据和权重,避免使用RTX显卡进行32位运算

下面Tim总结了一张GPU和TPU的标准性能数据,值越高代表性能越好。RTX系列假定用了16位计算,Word RNN数值是指长度<100的段序列的biLSTM性能。

这项基准测试是用PyTorch 1.0.1和CUDA 10完成的。

△ GPU和TPU的性能数据

性价比分析

性价比可能是选择一张GPU最重要的考虑指标。在攻略中,小哥进行了如下运算测试各显卡的性能:

  • 用语言模型Transformer-XL和BERT进行Transformer性能的基准测试。
  • 用最先进的biLSTM进行了单词和字符级RNN的基准测试。
  • 上述两种测试是针对Titan Xp、Titan RTX和RTX 2080 Ti进行的,对于其他GPU则线性缩放了性能差异。
  • 借用了现有的CNN基准测试。
  • 用了亚马逊和eBay上显卡的平均售价作为GPU的参考成本。

最后,可以得出CNN、RNN和Transformer的归一化性能/成本比值,如下所示:

△ CNN、RNN和Transformer的每美元性能

在上面这张图中,数字越大代表每一美元能买到的性能越强。可以看出, RTX 2060比RTX 2070,RTX 2080或RTX 2080 Ti更具成本效益,甚至是Tesla V100性价比的5倍以上

所以此轮的性价比之王已经确定,是RTX 2060无疑了。

不过,这种考量方式更偏向于小型GPU,且因为游戏玩家不喜欢RTX系列显卡,导致GTX 10xx系列的显卡售价虚高。此外,还存在一定的单GPU偏差,一台有4个RTX 2080 Ti的计算机比两台带8个RTX 2060的计算机性价比更高。

所需显存与16位训练

GPU的显存对某些应用至关重要,比如常见的计算机视觉、机器翻译和一部分NLP应用。可能你认为RTX 2070具有成本效益,但需要注意其显存很小,只有8 GB

不过,也有一些补救办法。

通过16位训练,你可以拥有几乎16位的显存,相当于将显存翻了一倍,这个方法对RTX 2080和RTX 2080 Ti同样适用。

也就是说,16位计算可以节省50%的内存,16位 8GB显存大小与12GB 32位显存大小相当。

云端or本地?TPU or GPU?

搞清楚了参数,还有更眼花缭乱的选项摆在面前:

谷歌云、亚马逊AWS、微软的云计算平台都能搞机器学习,是不是可以不用自己买GPU?

英伟达、AMD、英特尔、各种创业公司……AI加速芯片也有不少品牌可选。

面对整个行业的围攻,Tim分析了各家平台的优缺点。

英伟达

英伟达无疑是深度学习硬件领域的领导者,大多数深度学习库都对英伟达GPU提供最佳支持。而AMD的OpenCL没有这样强大的标准库。

软件是英伟达GPU非常强大的一部分。在过去的几个月里,NVIDIA还在为软件注入更多资源。例如,Apex库对PyTorch中的16位梯度提供支持,还包括像FusedAdam这样的融合快速优化器。

但是英伟达现在有一项非常坑爹的政策,如果在数据中心使用CUDA,那么只允许使用Tesla GPU而不能用GTX或RTX GPU。

由于担心法律问题,研究机构和大学经常被迫购买低性价比的Tesla GPU。然而,Tesla与GTX和RTX相比并没有真正的优势,价格却高出10倍。

AMD:

AMD GPU性能强大但是软件太弱。虽然有ROCm可以让CUDA转换成可移植的C++代码,但是问题在于,移植TensorFlow和PyTorch代码库很难,这大大限制了AMD GPU的应用。

TensorFlow和PyTorch对AMD GPU有一定的支持,所有主要的网络都可以在AMD GPU上运行,但如果想开发新的网络,可能有些细节会不支持。

对于那些只希望GPU能够顺利运行的普通用户,Tim并不推荐AMD。但是支持AMD GPU和ROCm开发人员,会有助于打击英伟达的垄断地位,将使每个人长期受益。

英特尔:

Tim曾经尝试过至强融核(Xeon Phi)处理器,但体验让人失望。英特尔目前还不是英伟达或AMD GPU真正的竞争对手。

至强融核对深度学习的支持比较差,不支持一些GPU的设计特性,编写优化代码困难,不完全支持C++ 11的特性,与NumPy和SciPy的兼容性差。

英特尔曾计划在今年下半年推出神经网络处理器(NNP),希望与GPU和TPU竞争,但是该项目已经跳票。

谷歌:

谷歌TPU已经发展成为一种非常成熟的云端产品。你可以这样简单理解TPU:把它看做打包在一起的多个专用GPU,它只有一个目的——进行快速矩阵乘法。

如果看一下具有张量核心的V100 GPU与TPUv2的性能指标,可以发现两个系统的性能几乎相同。

TPU本身支持TensorFlow,对PyTorch的支持也在试验中。

TPU在训练大型Transformer GPT-2上取得了巨大的成功,BERT和机器翻译模型也可以在TPU上高效地进行训练,速度相比GPU大约快56%。

但是TPU也并非没有问题,有些文献指出在TPUv2上使用LSTM没有收敛。

TPU长时间使用时还面临着累积成本的问题。TPU具有高性能,最适合在训练阶段使用。在原型设计和推理阶段,应该依靠GPU来降低成本。

总而言之,目前TPU最适合用于训练CNN或大型Transformer,并且应该补充其他计算资源而不是主要的深度学习资源。

亚马逊和微软云GPU:

亚马逊AWS和Microsoft Azure的云GPU非常有吸引力,人们可以根据需要轻松地扩大和缩小使用规模,对于论文截稿或大型项目结束前赶出结果非常有用。

然而,与TPU类似,云GPU的成本会随着时间快速增长。目前,云GPU过于昂贵,且无法单独使用,Tim建议在云GPU上进行最后的训练之前,先使用一些廉价GPU进行原型开发。

初创公司的AI硬件:

有一系列初创公司在生产下一代深度学习硬件。但问题在于,这些硬件需要开发一个完整的软件套件才能具有竞争力。英伟达和AMD的对比就是鲜明的例子。

小结:

总的来说,本地运算首选英伟达GPU,它在深度学习上的支持度比AMD好很多;云计算首选谷歌TPU,它的性价比超过亚马逊AWS和微软Azure。

训练阶段使用TPU,原型设计和推理阶段使用本地GPU,可以帮你节约成本。如果对项目deadline或者灵活性有要求,请选择成本更高的云GPU。

最终建议

总之,在GPU的选择上有三个原则:

1、使用GTX 1070或更好的GPU;

2、购买带有张量核心的RTX GPU;

3、在GPU上进行原型设计,然后在TPU或云GPU上训练模型。

针对不同研究目的、不同预算,Tim给出了如下的建议:

最佳GPU:RTX 2070

避免的坑:所有Tesla、Quadro、创始人版(Founders Edition)的显卡,还有Titan RTX、Titan V、Titan XP

高性价比:RTX 2070(高端),RTX 2060或GTX 1060 (6GB)(中低端)

穷人之选:GTX 1060 (6GB)

破产之选:GTX 1050 Ti(4GB),或者CPU(原型)+ AWS / TPU(训练),或者Colab

Kaggle竞赛:RTX 2070

计算机视觉或机器翻译研究人员:采用鼓风设计的GTX 2080 Ti,如果训练非常大的网络,请选择RTX Titans

NLP研究人员:RTX 2080 Ti

已经开始研究深度学习:RTX 2070起步,以后按需添置更多RTX 2070

尝试入门深度学习:GTX 1050 Ti(2GB或4GB显存)

传送门

http://timdettmers.com/2019/04/03/which-gpu-for-deep-learning/

除了教你选GPU之外,作者Tim Dettmers之前还写过一篇包含了全套硬件的深度学习装机指南,欢迎继续阅读:

深度学习装机指南:从GPU到显示器,全套硬件最新推荐

—  —

深度学习GPU最全对比,到底谁才是性价比之王?相关推荐

  1. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)

    1.什么是CUDA CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA推出的通用并行计算架构,该架构 ...

  2. 2017深度学习最新报告及8大主流深度学习框架超详细对比(内含PPT)

    2017深度学习最新报告(PPT) ​ 深度学习领军人物 Yoshua Bengio 主导的蒙特利尔大学深度学习暑期学校目前"深度学习"部分的报告已经全部结束. 本年度作报告的学术 ...

  3. 教你如何挑选深度学习GPU

    教你如何挑选深度学习GPU 即将进入 2018 年,随着硬件的更新换代,越来越多的机器学习从业者又开始面临选择 GPU 的难题.正如我们所知,机器学习的成功与否很大程度上取决于硬件的承载能力.在今年 ...

  4. 深度学习配置环境全攻略

    深度学习配置环境全攻略 1. 安装python2.7 外网链接教程 安装所有必需的依赖项 sudo apt-get update sudo apt-get install build-essentia ...

  5. Ubuntu18.04深度学习GPU环境配置

    Ubuntu18.04深度学习GPU环境配置 Ubuntu 18.04.cuda 9.0.cuDnn v7.TensorFlow/Keras 与anaconda 1.背景 为了加速神经网络的训练,使用 ...

  6. 深度学习GPU服务器配置

    深度学习GPU服务器配置(TITAN RTX) 配置清单 名称 品牌 规格型号 技术参数 显卡 英伟达 TITAN RTX TAITAN RTX 24G 主板 华硕 x299 EXTREME ASUS ...

  7. 如何挑选深度学习 GPU?

    如何挑选深度学习 GPU? 深度学习是一个对计算有着大量需求的领域,从一定程度上来说,GPU的选择将从根本上决定深度学习的体验.因此,选择购买合适的GPU是一项非常重要的决策.那么2020年,如何选择 ...

  8. fpga深度学习gpu加速_TornadoVM:使用GPU和FPGA加速Java

    fpga深度学习gpu加速 重要要点 TornadoVM是一个编程和执行框架,用于在异构硬件(多核CPU,GPU和FPGA)上卸载和运行JVM应用程序 TornadoVM通过OpenCL的新后端扩展了 ...

  9. windows7系统,NVIDIA GeForce GTX 750 Ti 2G显卡搭建caffe、TensorFlow、Keras深度学习GPU环境

    windows7系统,NVIDIA GeForce GTX 750 Ti 2G显卡搭建caffe.TensorFlow.Keras深度学习GPU环境 事情的由来 第一步,你得先有个windows7操作 ...

  10. 深度学习GPU环境搭建

    深度学习GPU环境搭建: 安装步骤: 1.安装GPU驱动:官网有(可以理解为告诉电脑这个东西怎么使用) 不同厂家的不一样,用于深度学习的一般是NVIDIA.AMD家. 本人是NVIDIA家,驱动长这样 ...

最新文章

  1. 一通骚操作,我把SQL执行效率提高了10000000倍!
  2. 第五节13读取配置中的连接字符串
  3. 数据类型 类型检测
  4. Spring MVC 中急速集成 Shiro 实践
  5. c语言while退出无限循环,请教:为什么我用while(!feof(fp))时会出现无限循环????...
  6. Linux NB的单行命令
  7. 专科学历事业单位工资计算机,事业单位人来告诉你:学历跟入编之后待遇关系有多大!很直接...
  8. Docker小白到实战之开篇概述
  9. Java,JavaFX的流利设计风格文本字段和密码字段
  10. Linux系统文件类型 特殊文件 和 进程间通信机制
  11. Ubuntu如何定时清理内存
  12. spark 类别特征_spark 机器学习基础 数据类型
  13. HBase shell命令
  14. 转:英语 表示字母、数字的复数
  15. TF实战丨使用Vagrant安装Tungsten Fabric
  16. HPUoj1210: OY问题 [搜索](DFS
  17. 【Android -- 写作工具】Markdown 分割线
  18. es6 去掉空格_ES6之字符串
  19. 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《一》资源介绍
  20. java.lang.NoSuchMethodException错误

热门文章

  1. java永久区_方法区、永久代和元空间Metaspace
  2. 计算机键盘有哪些作用,电脑键盘各个按键有哪些作用 电脑键盘各个按键作用介绍...
  3. 如何保证测试质量之Bug管理规范及流程
  4. 还停留在图片识别?谷歌已经开始研究视频识别了
  5. 关于ksps(A/D转换速率单位)
  6. 洛谷P3398 仓鼠找suger
  7. 【FinE】远期、期货、互换定价
  8. 华为前端社招OD面试(已拿offer)
  9. antd 自定义表单验证 onBlur
  10. uva 10066 The Twin Towers (最长公共子序列)