硬件设备,是任何一名深度学习er不可或缺的核心装备。各位初级调参魔法师们,你们有没有感到缺少那一根命中注定的魔杖?
可是,各种CPU、GPU、内存条、外设,那么多品牌种类型号参数,到底该怎么选?
为了帮你凑齐一套能打的装备,一位名叫Tim Dettmers的歪果小哥哥将自己一年组装七部工作站的装机经验凝练成一篇实用攻略分享了出来,帮你确定一整套硬件选型,并且,还根据今年的新硬件做了推荐。
好啦,下面我们从GPU开始,依次看看各重要部件应该如何选择,全文超过5000字,预计阅读时间11分钟。当然,文末还为大家准备了“精华清单”~
显卡(GPU)是深度学习的重要部件,甚至比CPU更重要。做深度学习不用GPU只用CPU显然是不明智的,所以作者Tim先介绍了GPU的选择。
选购GPU有三大注意事项:性价比、显存、散热。
使用16bit的RTX 2070或者RTX 2080 Ti性价比更高。另外在eBay上购买二手的32bit GTX 1070、GTX 1080或者1080 Ti也是不错的选择。
除了GPU核心,显存(GPU RAM)也是不可忽视的部分。RTX比GTX系列显卡在显存方面更具优势,在显存相同的情况下,RTX能够训练两倍大的模型。
通常对显存的要求如下:
如果想在研究中追求最高成绩:显存>=11 GB;
在研究中搜寻有趣新架构:显存>=8 GB;
其他研究:8GB;
Kaggle竞赛:4~8GB;
创业公司:8GB(取决于具体应用的模型大小)
公司:打造原型8GB,训练不小于11GB
需要注意的是,如果你购买了多个RTX显卡,一定不要忽视散热。两个显卡堆叠在相邻PCI-e插槽,很容易令GPU过热降频,可能导致性能下降30%。这个问题后面还会具体讨论。
选择内存(RAM)有两个参数:时钟频率、容量。这两个参数哪个更重要?
炒作内存时钟频率是厂家常用的营销手段,他们宣传内存越快越好,实际上真的是这样吗?
知名数码博主Linus Tech Tips解答了这个问题:厂商会引诱你购买“更快”的RAM,实际上却几乎没有性能提升。
内存频率和数据转移到显存的速度无关,提高频率最多只能有3%的性能提升,你还是把钱花在其他地方吧!
内存大小不会影响深度学习性能,但是它可能会影响你执行GPU代码的效率。内存容量大一点,CPU就可以不通过磁盘,直接和GPU交换数据。
所以用户应该配备与GPU显存匹配的内存容量。如果有一个24GB显存的Titan RTX,应该至少有24GB的内存。但是,如果有更多的GPU,则不一定需要更多内存。
Tim认为:内存关系到你能不能集中资源,解决更困难的编程问题。如果有更多的内存,你就可以将注意力集中在更紧迫的问题上,而不用花大量时间解决内存瓶颈。
他还在参加Kaggle比赛的过程中发现,额外的内存对特征工程非常有用。
过分关注CPU的性能和PCIe通道数量,是常见的认知误区。用户更需要关注的是CPU和主板组合支持同时运行的GPU数量。
人们对PCIe通道的执念近乎疯狂!而实际上,它对深度学习性能几乎没有影响。
如果只有一个GPU,PCIe通道的作用只是快速地将数据从内存传输到显存。
ImageNet里的32张图像(32x225x225x3)在16通道上传输需要1.1毫秒,在8通道上需要2.3毫秒,在4通道上需要4.5毫秒。
这些只是是理论数字,实际上PCIe的速度只有理论的一半。PCIe通道通常具有纳秒级别的延迟,因此可以忽略延迟。
Tim测试了用32张ImageNet图像的mini-batch,训练ResNet-152模型所需要的传输时间:
前向和后向传输:216毫秒
16个PCIe通道CPU-> GPU传输:大约2毫秒(理论上为1.1毫秒)
8个PCIe通道CPU-> GPU传输:大约5毫秒(2.3毫秒)
4个PCIe通道CPU-> GPU传输:大约9毫秒(4.5毫秒)
因此,在总用时上,从4到16个PCIe通道,性能提升约3.2%。但是,如果PyTorch的数据加载器有固定内存,则性能提升为0%。因此,如果使用单个GPU,请不要在PCIe通道上浪费金钱。
在选择CPU PCIe通道和主板PCIe通道时,要保证你选择的组合能支持你想要的GPU数量。如果买了支持2个GPU的主板,而且希望用上2个GPU,就要买支持2个GPU的CPU,但不一定要查看PCIe通道数量。
如果在多个GPU上训练网络,PCIe通道是否重要呢?Tim曾在ICLR 2016上发表了一篇论文指出(https://arxiv.org/abs/1511.04561):如果你有96个GPU,那么PCIe通道非常重要。
但是,如果GPU数量少于4个,则根本不必关心PCIe通道。几乎很少有人同时运行超过4个GPU,所以不要在PCIe通道上花冤枉钱。这不重要!
为了选择CPU,首先需要了解CPU与深度学习的关系。
CPU为深度学习中起到什么作用?当在GPU上运行深度网络时,CPU几乎不会进行任何计算。CPU的主要作用有:(1)启动GPU函数调用(2)执行CPU函数。
到目前为止,CPU最有用的应用是数据预处理。有两种不同的通用数据处理策略,具有不同的CPU需求。
第一种策略是在训练时进行预处理,第二种是在训练之前进行预处理。
对于第一种策略,高性能的多核CPU能显著提高效率。建议每个GPU至少有4个线程,即为每个GPU分配两个CPU核心。Tim预计,每为GPU增加一个核心 ,应该获得大约0-5%的额外性能提升。
对于第二种策略,不需要非常好的CPU。建议每个GPU至少有2个线程,即为每个GPU分配一个CPU核心。用这种策略,更多内核也不会让性能显著提升。
4GHz的CPU性能是否比3.5GHz的强?对于相同架构处理器的比较,通常是正确的。但在不同架构处理器之间,不能简单比较频率。CPU时钟频率并不总是衡量性能的最佳方法。
在深度学习的情况下,CPU参与很少的计算:比如增加一些变量,评估一些布尔表达式,在GPU或程序内进行一些函数调用。所有这些都取决于CPU核心时钟率。
虽然这种推理似乎很明智,但是在运行深度学习程序时,CPU仍有100%的使用率,那么这里的问题是什么?Tim做了一些CPU的降频实验来找出答案。
CPU降频对性能的影响:
请注意,这些实验是在一些“上古”CPU(2012年推出的第三代酷睿处理器)上进行的。但是对于近年推出的CPU应该仍然适用。
通常,硬盘不会限制深度学习任务的运行,但如果小看了硬盘的作用,可能会让你追、悔、莫、及。
想象一下,如果你从硬盘中读取的数据的速度只有100MB/s,那么加载一个32张ImageNet图片构成的mini-batch,将耗时185毫秒。
相反,如果在使用数据前异步获取数据,将在185毫秒内加载这些mini-batch的数据,而ImageNet上大多数神经网络的计算时间约为200毫秒。所以,在计算状态时加载下一个mini-batch,性能将不会有任何损失。
Tim小哥推荐的是固态硬盘(SSD),他认为SSD在手,舒适度和效率皆有。和普通硬盘相比,SSD程序启动和响应速度更快,大文件的预处理更是要快得多。
顶配的体验就是NVMe SSD了,比一般SSD更流畅。
一个程序员对电源最基础的期望,首先得是能满足各种GPU所需能量吧。随着GPU朝着更低能耗发展,一个质量优秀的PSU能陪你走很久。
应该怎么选?Tim小哥有一套计算方法:将电脑CPU和GPU的功率相加,再额外加上10%的功率算作其他组件的耗能,就得到了功率的峰值。
举个例子,如果你有4个GPU,每个功率为250瓦,还有一个功率为150瓦的CPU,则需电源提供4×250+150+100=1250瓦的电量。
Tim通常会在此基础上再额外添加10%确保万无一失,那就总共需要1375瓦。所以这种情况下,电源性能需达1400瓦。
这样手把手教学,应该不难理解了。还有一点得注意,即使一个PSU达到了所需瓦数,也可能没有足够的PCIe 8-pin或6-pin的接头,所以买的时候还要确保电源上有足够多的接头接GPU。
另外,买一个能效等级高的电源,特别是当你需要连很多GPU并且可能运行很长时间的时候,原因你懂的。
再举个例子吧,如果以满功率(1000-1500瓦)运行4 GPU系统、花两周时间训练一个卷积神经网络,需要耗用300-500度电。按德国每度0.2欧元计算,电费最终耗费约折合人民币455-766元。
如果电源效率降到80%,电费将增加140-203元人民币。
需要的GPU数量越多,拉开的差距越明显。PSU的挑选是不是比之前想象的复杂一点?
对于产热大户CPU和GPU来说,散热性不好会降低它们的性能。
对CPU来说,则标配的散热器,或者AIO水冷散热器都是不错的选择。
但GPU该用哪种散热方案,却是个复杂的事。
如果只有单个GPU,风冷是安全可靠的,但若你GPU多达3-4个,靠空气冷却可能就不能满足需求了。
目前的GPU会在运行算法时将速度提升到最大,所以功耗也达到最大值,一旦温度超过80℃,很有可能降低速度,无法实现最佳性能。
对于深度学习任务来说这种现象更常见了,一般的散热风扇远达不到所需效果,运行几秒钟就达到温度阈值了。如果是用多个GPU,性能可能会降低10%~25%。
怎么办?目前,英伟达GPU很多是针对游戏设计的,所以对于Windows系统进行了专门的优化,也可以轻松设置风扇方案。
但在Linux系统中这招就不能用了,麻烦的是,很多深度学习库也都是针对Linux编写的。
这是一个问题,但也不是无解。
在Linux系统中,你可以进行Xorg服务器的配置,选择“coolbits”选项,这对于单个GPU还是很奏效。
若你有多个GPU, 就必须模拟一个监视器,Tim小哥说自己尝试了很长时间,但还是没有什么改进。
如果你想在空气冷却的环境中运行3-4个小时,则最应该注意风扇的设计。
目前市场上的散热风扇原理大致有两种:鼓风式的风扇将热空气从机箱背面推出,让凉空气进来;非鼓风式的风扇是在GPU中吸入空气达到冷却效果。
所以,如果你有多个GPU彼此相邻,那么周围就没有冷空气可用了,所以这种情况,一定不要用非鼓风式的散热风扇了。
那用什么?接着往下看——
水冷散热虽然比风冷法成本略高,但很适用于多个GPU相邻的情况,它能hold住四个最强劲的GPU保持周身凉爽,是风冷无法企及的效果。
另外,水冷散热可以更安静地进行,如果你在公共区域运行多个GPU,水冷的优势更为凸显了。
至于大家最关心的成本问题,水冷单个GPU大概需要100美元(约690元人民币)再加一些额外的前期成本(大约350元人民币)。
除了财力准备,还需要你投入一些精力,比如额外花时间组装计算机等。这类事情网上教程已经很多了,只需要几个小时搞定,后期的维护也不复杂。
对于单个GPU,风冷便宜也够用;多个GPU情况下,鼓风式的空气冷却比较便宜,可能会带来10%~15%的性能损失。如果想追求散热极致,水冷散热安静且效果最好。
所以,风冷or水冷都合理,看你自己的实际情况和预算了。但小哥最后建议,通常情况下,还是考虑下低成本的风冷吧。
主板应该有足够的PCIe插槽来支持所需的GPU数量。但需要注意的是,大多数显卡宽度需要占用两个PCIe插槽。
PCIe太挤?
如果打算使用多个GPU,就要购买PCIe插槽之间有足够空间的主板,确保显卡之间不会相互遮挡。
选机箱的时候,必须保证机箱能装下主板顶部的全长GPU,虽然大部分机箱是没问题的,但是万一你买小了,那就得看商家给不给你七天无理由了……
所以,买之前最好确认一下机箱的尺寸规格,也可以搜一下机箱装着GPU的图,有别人的成品图的话就能买得放心一些。
另外,如果你想用定制水冷的话,保证你的机箱能装得下散热器,尤其是给GPU用定制水冷的时候,每个GPU的散热器都需要占空间。
怎么配显示器还用教?
必须得教。
Tim放出了买家秀:
是的,作为一个成熟的技术人员,用多台显示器是基本配置了。
想象一下把买家秀上这三台显示器上的内容堆到同一块屏幕里,来回切换窗口,这得多累人。
GPU:
RTX 2070、RTX 2080 Ti、GTX 1070、GTX 1080、GTX 1080,这些都不错。
CPU:
1.给每个GPU配1-2个CPU核心,具体要看你预处理数据的方式;
2.频率要大于2GHz,CPU要能支持你的GPU数量;
3.PCIe通道不重要。
内存:
1.时钟频率无关紧要,内存买最便宜的就行了;
2.内存 ≥ 显存最大的那块GPU的RAM;
3.内存不用太大,用多少买多少;
4.如果你经常用大型数据集,买更多内存会很有用。
硬盘/SSD:
1.给你的数据集准备足够大的硬盘(≥3TB);
2.有SSD会用的舒坦一些,还能预处理小型数据集。
PSU:
1.需要的功率最大值≈(CPU功率+GPU功率)×110%;
2.买一个高能效等级的电源,特别是当你需要连很多GPU并且可能运行很长时间的时,这样可以节省很多电费;
3.买之前请确保电源上有足够多的接头(PCIe 8-pin或6-pin)接GPU。
散热:
CPU:
标准配置的CPU散热器或者AIO水冷散热器;
GPU:
1.单个GPU,风冷散热即可;
2.若用多个GPU,选择鼓风式风冷散热或水冷散热。
主板:
准备尽可能多的链接GPU的PCle插槽,一个GPU需要两个插槽,每个系统最多4个GPU,不过你也要考虑GPU的厚度。
显示器:
为了提高效率,多买几块屏幕吧。
这篇指南的作者Tim Dettmers去年硕士毕业,目前在华盛顿大学读博,主要研究知识表达、问答系统和常识推理,曾在UCL机器学习组和微软实习。
按照去年毕业开始读博的话,Tim的博士才读了一年半,现在就已经是三篇顶会论文的作者了,其中还有一篇AAAI是一作,一篇ICLR是唯一作者。
另外,他还是一个刷Kaggle爱好者,曾经在2013年排到全球第63名(前0.22%)。
其实说了这么多,你也不想装机对不对?
Tim已然料到,所以,在装机指南之外,他还主动奉献了一些装机鼓励:
虽然买硬件很贵,一不小心搞错会肉疼,但是不要怕装电脑这件事。
其一,装机本身很简单,主板手册里都把如何装机写的明明白白,比装乐高难不了多少,还附带了大量的指南和分步操作视频,就算你是0经验小白也能学得会。
其二,装机这件事,只要有第一次,后面就不难了,因为所有的计算机都是那几个硬件构成的。所以,只要装一次,就可以get一门终身技能,投资回报率非常高。
所以,加油准备一台你自己的设备吧~
原文:
A Full Hardware Guide to Deep Learning
http://timdettmers.com/2018/12/16/deep-learning-hardware-guide/
作者推荐,数码博主Linus Tech Tips解答疑问:高频率内存对性能提升有用吗?(B站官方中文版):
https://www.bilibili.com/video/av14528439
— 完 —
活动报名
加入社群
量子位AI社群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;
此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。
进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态