深度学习硬件指南

GPU

假设你将用GPU来进行深度学习或者你正在构建或者升级用于深度学习的系统,那么抛开GPU是不合理的。GPU是深度学习应用的心脏——训练过程速度的提升是非常的大的,不容忽视。

我在GPU推荐博客中对如何选择GPU讲的非常详细,如何选择GPU在深度学习系统中相当关键。在选择GPU时,你可能会犯这三个错误:(1)性价比不高,(2)内存不够大,(3)散热差。

性价比方面,我通常推荐 RTX 2070或者 RTX 2080 Ti。使用这些显卡的时候,你应该使用16位的模型,除此以外,eBay 的 GTX 1070, GTX 1080 和 GTX 1080 Ti 是非常好的选择,选择他们时,可以使用32位的模型,但不能是16位的模型。

在选择GPU时,要十分留意你的内存需求。在消耗同样内存的情况下,相比GTX,能跑16位模型的RTX能够训练2倍大小的模型。正是因为RTX有着内存优势,选择RTX、学习高效地使用16位模型,能够带给你更好的的使用体验。通常,对内存的要求大致如下:

追求最高水平分数的研究: >=11 GB

探寻有趣架构的研究: >=8 GB

其他的研究:8 GB

Kaggle:4 – 8 GB

初学者:8 GB (但是要注意检查下应用领域的模型大小)

企业: 8 GB 用于原型, >=11 GB 用于训练

在你买了多块RTX显卡时,需要留意散热问题。如果你想将 GPU 固定在彼此相邻的 PCIe 插槽中,应该确保使用带有鼓风机式风扇的 GPU。否则,您可能会遇到温度问题,并且您的 GPU 速度会变慢(约30%)并且损耗得更快。

image.png

RAM

购买内存最大的错误就是买了主频太高的内存。第二个错误是没有购买足够大的内存,导致在原型构建上出问题。

需要的主频

主频是内存公司引诱你购买“更快”的内存的一种营销手段,实际上几乎没有产生任何性能的提升。这个关于RAM的视频很详细地解释了内存在Linux上的技术窍门:内存速度真的重要吗

此外,重要的是要知道内存速度与快速CPU RAM-> GPU RAM传输几乎无关。这是因为(1)如果你使用固定内存(pinned memory),那么你的mini-batch会直接传输到GPU中而不需要CPU的干预,(2)如果你不使用固定内存的话,快的和慢的内存获得的性能差别只有0-3%——把你的钱花到别处去!

内存大小

内存大小不会影响到深度学习的性能。但是,它可能会阻碍你轻松执行GPU代码(无需交换到磁盘)。你应该有足够的内存来愉快地配合GPU工作。这意味你至少应该有匹配GPU的内存大小。比如说,如果你有一张24GB显存的Titan RTX,那你至少应该有24GB的内存。但是,如果你有多块GPU的话,你不需要更多的内存。

“在内存上匹配最大的GPU显存”策略在于,如果你在处理大数据集时,你可能够还是会内存不足。最好的方式是和你的GPU匹配,如果你觉得内存不够,再买更大的内存。

另外一个不同的策略受心理学的影响:心理学告诉我们,专注是一种随着时间推移而耗尽的资源。内存是为数不多的硬件之一,可以让您浪费专注的精力,从而聚焦在解决更困难的编程问题。如果你有更多的内存,你可以将注意力集中在更紧迫的事情上,而不是困扰在内存瓶颈上浪费了大量时间。有了大量内存你就可以避开这些瓶颈,为更为紧急的问题节约时间,提升效率。特别在Kaggle比赛中,我发现有着额外的内存对于特征工程是非常有帮助的。如果资金足够,并且好做大量的预处理工作,那么增加额外的内存是一个非常好的选择。按照这个策略,现在就要考虑购买更多、实惠的内存,而不是后面再考虑。

CPU

人们常犯的最大错误是花太多的时间纠结CPU的PCIe通道数。其实,你并不需要太在意CPU的PCIe通道数。取而代之的是,应该注重你的CPU和主板的组合是否能够支撑起想要运行的GPU数量。第二个最常见错误是购买功能过于强大的CPU。

CPU和PCI-Express(新一代总线接口)

很多人痴迷于PCIe的通道数。然而,事情的真相是PCIe(的通道数)几乎不会影响深度学习的表现。如果你只有一个单一的GPU,PCIe通道唯一的作用是能够快速地将数据从你的CPU 内存中转换到GPU 内存中。但是,一个具有32张图片的ImageNet数据集批次(数据集的shape为32225225*3)和32位模型,在16通道PCIe上训练需要1.1毫秒,在8通道上需要2.3毫秒,在4通道上需要4.5毫秒。这些仅仅是理论上的数值,而在实际中你常常会发现PCIe会比理论速度慢上两倍——但是它仍然像闪电一样快。PCIe 通道的延时通常在纳秒范围内,因此其延时问题可以被忽视。

综上考虑后,我们提出了使用152层残差网络训练一个具有32张图片的小批量ImageNet数据集所需的时间,如下所示:

向前传播和向后传播用时:216毫秒(ms)
使用16通道PCIe将数据从CPU内存转换到GPU内存用时:大概2ms(理论上1.1ms)
使用8通道PCIe将数据从CPU内存转换到GPU内存用时:大概5ms(理论上2.3ms)
使用4通道PCIe将数据从CPU内存转换到GPU内存用时:大概9ms(理论上4.5ms)
因此将4通道的PCIe换成16通道的PCIe将给你的训练表现带来大概3.2%的提升。然而,如果你的pyTorch数据下载器含有CUDA页锁定内存,那么(改变PCIe的通道)其实给你的训练表现带来的提升是0%。所以如果你仅使用1个GPU,那么不要把你的钱浪费在PCIe上!

当你在选择CPU的PCIe通道和主板PCIe通道时,(一定要)明确所选的CPU和主板组合能够支持期望的GPU数量。如果你买了一个支持2个GPU的主板,并且你最终确实需要用到2个GPU,那么就需要确认你购买的CPU能够支持2个GPU,而没有必要纠结PCIe的通道数。

PCIe通道数和多GPU并行

如果你在多GPU上并行的训练数据时,PCIe的通道数是重要的吗?针对这个问题我在2016年的ICLR会议中发表了一篇论文,而且我可以告诉你如果你有96个GPU那么PCIe的通道数确实非常重要。然而如果你只有4个或者更少的GPU,那么PCIe通道数的影响不大。如果在两到三个GPU上训练,我完全不会关心PCIe的通道数。当我使用四个GPU训练时,我才会确保每个GPU都能够得到8条PCIe通道的支持(总共32条PCIe通道)。由于几乎没有人会在超过4个GPU上面运行一个系统,那么记住一个经验准则:不要为了在每个GPU中得到更多的PCIe花额外的钱——这没有必要!

所需的 CPU 核数

为了能够在CPU上作出明确的选择,我们首先需要了解CPU以及它和深度学习间的关系。CPU为深度学习做了什么?当你在一个GPU上运行你的深度网络时,CPU仅进行很简单的运算。它主要主要(1)启动GPU函数调用,(2)执行CPU函数。

目前,CPU最大的应用是数据预处理。常用的两种数据预处理策略有着不同的CPU需求。

一种策略是在训练过程中进行预处理:

循环以下(三个)步骤:

  1.  导入小批量数据
    
  2.  预处理小批量数据
    
  3.  训练小批量数据
    

第二种预处理策略是在训练之前进行预处理操作:

  1.  导入数据
    
  2.  循环以下(两个)步骤:
     1.     导入小批量数据
     2.     训练小批量数据
    

对于第一种策略,一个多核CPU可以明显地加强训练表现。对于第二种策略,你不需要一个很好的CPU。对第一种训练策略,我建议每个GPU至少有4个线程——通常每个GPU有两个核心。我没有对此进行严格的测试,但是每增加一个核心/GPU应该有0-5%的额外性能提升。

对于第二种策略,我建议每个GPU最少有2个线程——通常每个GPU有一个核心。如果你使用第二种策略,那么更多的内核并不会给你带来明显的性能提升。

所需的 CPU 主频(时钟频率)

当人们考虑(购买)快速的CPU时,他们通常首先查看时钟频率。4GHz的CPU比3.5GHz的好,是吗?这对于比较具有相同结构的处理器来说通常是正确的,例如“Ivy Bridge微架构”,但是对于不同架构的处理器来说这并不好比较。此外,CPU主频并不总是衡量性能的最佳方法。

在深度学习中CPU仅仅做一些微不足道的计算:增加一些参数,评估布尔表达式,在GPU或程序内进行函数调用——这些都取决于CPU核心的时钟频率。

虽然这些理由看似合理,但是当我运行深度学习程序时却发现CPU使用率为100%,那么这是为什么呢?为了找寻答案,我做了一些CPU降频实验。


image.png

在MNIST和ImageNet数据集上的GPU降频实验:不同CPU时钟频率的性能以训练200个epoch的MNIST数据集和50个epoch的ImageNet数据集所花费的时间来衡量, 其中最大的时钟频率作为每个CPU的基线。作为比较:从GTX 680升级到GTX Titan的性能提升约为 15%; 从GTX Titan到GTX 980又提升20%的性能; GPU超频可为任何GPU带来5%的性能提升。

值得注意的是,这些实验是在落后过时的硬件设备上进行的,然而,对于现代的CPU/GPU它的结果仍然不变。

硬盘/SSD

一般来说硬盘不是深度学习的瓶颈。但也别整这种蠢事儿:当你从一个100MB/s的硬盘读取mini-batch为32的ImageNet时候,需要185毫秒。你可以在数据使用前异步加载数据(比如说torch vision loader),因为加载数据需要185毫秒而ImageNet上运行的大多数DNN需要200毫秒来计算。我们完全可以提前加载下一个mini-batch来避免性能损失。

从生产效率来说,我推荐SSD,因为程序启动反应更快,大文件的预处理速度也更快。另外,NVMe SSD会带给你更好的使用体验。

电源(PSU)

你得确保你的电源能够满足所有预留GPU的功率需求。一般来说,GPU能耗会越来越低,所以不用更换电源,买个好的电源是个值当的买卖。

在计算需要的功率时,你最好加上所有CPU和GPU功耗的10%作为功率峰值的缓冲。举个例子,你有四个250瓦的GPU和一个150瓦的CPU,那我们需要一个最少4×250 + 150 + 100 = 1250瓦的电源。一般我会加上至少10%来确保一切正常,那么在这种情况下一共需要1375瓦。最后我会买一个1400瓦的电源。

你得注意有些电源即使达到了要求的功率,但是没有足够的8针或者6针PCIe插槽接口。你得多多注意这点。

另外请尽量购买高功率功效的电源——特别是你运行多个GPU且长时间运行。

满负载运行一个4GPU系统(1000-1500瓦)来训练卷积神经网络两周会消耗300-500千瓦时。德国每千瓦时的价格是20分,所以会用60-100欧(66-111美金)。刚刚我们假设的电源效率是100%,如果使用的是效率是80%的电源,还要额外消耗18-26欧。使用单颗GPU的话,会少很多。但是不影响重点:值得在高效电源上多花点儿钱。

全天候的使用一些GPU会显著的增加你的碳排放足迹,甚至这比你的交通(譬如飞机)和其他因素还要多。如果你想要负责的话,可以用纽约大学机器学习语言组(ML2)- 很容易办到,也很便宜,可以作为深度学习研究院的标准。

CPU 和 GPU 的冷却系统

冷却非常重要,是整个系统中一个重要的瓶颈。相比较于糟糕的硬件选择,它更容易降低性能。对于CPU,你可以使用标准散热器或者一体化(AIO)水冷解决方案。但是对于GPU,你需要特别注意。

风冷 GPUs

如果你有多颗GPU并且他们中间有足够的空间(在3-4颗GPU的位置放置2颗GPU),风冷是安全可靠的。当你想去冷却3-4颗GPU的时候,可能会犯一个巨大的错误。这时候你需要认证考虑在这个案例中的选择。

运行一个算法的时候,现代GPU会提高他们的速度以及功耗,直至最大值。一旦GPU达到温度临界值(通常为80°C),GPU就会降低运算速度防止达到温度阙值。这样可以在保持GPU过热的同时实现最佳性能。

对于深度学习程序而言,典型的风扇速度预编程时间表设计得很糟糕。启动一个深度学习程序后几秒钟就会达到温度阙值,结果就是性能会下降0-10%。多个GPU之间相互加热,性能会下降的更明显(10%-25%)。

因为 NVIDIA GPU 在大部分情况下是作为游戏 GPU,它们对windows进行了优化。在Windows中点一点鼠标就能改变风扇计划的方式在Linux中行不通。可是大多数深度学习库都是针对Linux编写。

如果你有一台Xorg服务器(Ubuntu),唯一的选项是用“coolbits”来设置温度。对于单个GPU来说,这种方法非常奏效。当有多个GPU的时候,其中一些没有监视器,模拟出监视器来监测他们是很艰难晦涩的工作。我曾经花过很长的时间尝试使用实时启动CD来恢复我的图形设置,但是从没有在无监视器GPU上成功运行过。

在风冷系统下运行3-4颗GPU需要尤其重视风扇设计。“鼓风机式”风扇设计让冷风进入GPU,然后从机箱背部吹出热风。“非鼓风机式”风扇吸入GPU附近的空气来冷却它。但是如果是多颗GPU,那么它们的周围就没有冷空气,使用“非鼓风机式”风扇的GPU会越来越热,最终通过降低性能来降温。我们应该不惜一切代价来必变在3-4颗GPU的环境中使用“非鼓风机式”风扇。

多GPU使用的水冷系统

另一种更棒更昂贵的方式是使用水冷系统。如果你只有一颗GPU或者两颗GPU之间有足够的空间(比如在3-4颗GPU的主板上有两颗GPU),我不建议使用水冷系统。在4GPU配置中,水冷保证即使最强劲的GPU也能保持低温,而这在风冷中是不可能实现的。水冷的另一个优点是运行很安静,这对于在公共区域运行多GPU来说是一个巨大的优势。每颗GPU需要100美金的成本安装水冷,另外需要一些额外的前期成本(大约50美金)。组装有水冷的计算机也会需要一些额外工作,但是不用担心,会有详细的指南来指导你安装,仅仅需要你多付出几个小时。维护工作也没有那么的复杂费力。

一个冷却的案例

大型的塔式服务器在GPU位置有额外的风扇,所以我为深度学习集群购买了他们。然后我发现太不划算了,只下降了2-5°C却要付出大量的投资。最重要的部分是直接在GPU上安装冷却系统,完全没必要为冷却系统买贵不啦叽的壳子。

冷却的总结

对于一个GPU来说,风冷足够了。如果你有多个GPU, 你可以在接受性能损失(10% - 15%)的情况下使用“鼓风式”风冷系统,或者花更多的钱购置水冷系统,虽然难以设置但是它可以保证没有性能损失。对于不同的场景,我们可以因地制宜选择风冷或者水冷。我建议使用风冷就好--使用“鼓风式”GPU。如果你想使用水冷, 请使用一体化水冷(AIO)方案。

主板

你的主板上应该有足够的PCIe端口来支持你需要运行的GPU数量(即使你有更多的PCIe 插槽,但是一般限制最多4颗GPU);另外,铭记大部分GPU都会占据两个PCIe卡槽的宽度,所以如果想使用多颗GPU,请确保购买的主板有足够的预留空间。主板不仅需要有足够的PCIe插槽位置,而且需要支持你购买的GPU。在newegg上你可以查看到对应主板的信息和PCIe情况。

结论

结论 / 长话短说
GPU:来自eBay的RTX 2070 、RTX 2080 Ti、 GTX 1070 、GTX 1080, 和 GTX 1080 Ti 是非常好的选择。
CPU:每个GPU分配1-2个两个核心,这取决于你是怎么处理数据的。频率 > 2GHz。CPU应该要能够支持你要运行的GPU数量。PCIE通道并不重要。

RAM:

  • 时钟频率不重要 - 买最便宜的内存

  • 最少要购买和你最大的GPU显存大小的内存

  • 只有在需要的时候购买更多的内存

  • 如果你经常处理大数据集的话更多的内存是非常有帮助的

硬盘/SSD:

  • 存放数据的硬盘(>=3GB)

  • 使用SSD可以快速处理小数据集

电源

  • 把GPU和CPU需要的功率瓦数加起来,然后乘以总数的110%得到需要的功率瓦数

  • 如果使用多个GPU,要选择高效率的电源。

  • 确保电源有足够的PCIE接口(6+8引脚)

散热

  • CPU:使用标准的CPU散热或者是一体式的水冷解决方案

  • GPU:风扇散热

  • 如果购买多个GPU的话使用“鼓风式”的风扇

  • 在Xorg配置中设置coolbits标志以控制风扇速度

主板

  • 为(未来的)GPU预留尽可能多的PCIe插槽(一个GPU需要两个插槽;每个系统最多4个GPU)

显示器

  • 一个额外的显示器比一个额外的GPU更能提高你的效率

参考:https://ai.yanxishe.com/page/TextTranslation/1346?from=leiphone

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容