【译文】 A Full Hardware Guide to Deep Learning - Tim Dettmers

深度学习是计算密集型的,因此您需要具有多个内核的快速CPU,对吧?或者购买快速CPU是否浪费?在构建深度学习系统时,您可以做的最糟糕的事情之一就是在不必要的硬件上浪费金钱。在这里,我将逐步指导您使用廉价高性能系统所需的硬件。

 

多年来,我总共建立了7个不同的深度学习工作站,尽管经过仔细的研究和推理,但我在选择硬件部件方面犯了很大的错误。在本指南中,我想分享一下我多年来积累的经验,这样你就不会犯同样的错误。

博客帖子按错误严重程度排序。这意味着人们通常浪费最多钱的错误首先出现。

GPU

这篇博文假设您将使用GPU进行深度学习。如果您正在构建或升级系统以进行深度学习,那么忽略GPU是不明智的。GPU只是深度学习应用程序的核心 - 处理速度的提高太大了,不容忽视。

我在GPU推荐博客文章中详细讨论了GPU的选择,而GPU的选择可能是深度学习系统最关键的选择。

选择GPU时可能会遇到三个主要错误:

(1)成本/性能不佳,(2)内存不足,(3)散热不良。

为了获得良好的性价比,我建议使用RTX 2070或RTX 2080 Ti。如果使用这些卡,则应使用16位模型。否则,来自eBay的GTX 1070,GTX 1080,GTX 1070 Ti和GTX 1080 Ti是公平的选择,您可以使用这些具有32位(但不是16位)的GPU。

选择GPU时要小心内存要求。可以运行16位的RTX卡可以训练相比GTX卡具有相同内存大两倍的型号。因此,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%)并且死得更快。

怀疑阵容
您能否识别出因性能不佳而出现故障的硬件部分?其中一个GPU?或者也许这毕竟是CPU的错?

内存

RAM的主要错误是购买时钟频率过高的RAM。第二个错误是购买不够的RAM以获得平滑的原型制作体验。

需要的RAM时钟速率

RAM时钟速率是市场营销的一种情况,RAM公司会引诱你购买“更快”的RAM,实际上几乎没有产生任何性能提升。最好的解释是“ RAM速度真的很重要吗?“关于RAM von Linus技术提示的视频。

此外,重要的是要知道RAM速度与快速CPU RAM-> GPU RAM传输几乎无关。这是因为

(1)如果您使用了固定内存,您的迷你批次将被转移到GPU而不需要CPU的参与

(2)如果您不使用固定内存,快速与慢速RAM的性能提升是关于0-3% - 把钱花在别的地方!

RAM大小

RAM大小不会影响深度学习性能。但是,它可能会阻碍您轻松执行GPU代码(无需交换到磁盘)。你应该有足够的内存来舒适地使用你的GPU。这意味着您应该至少拥有与最大GPU匹配的RAM量。例如,如果你有一个24 GB内存的Titan RTX,你应该至少有24 GB的RAM。但是,如果您有更多的GPU,则不一定需要更多RAM。

这种“在RAM中匹配最大GPU内存”策略的问题在于,如果处理大型数据集,您可能仍然无法使用RAM。这里最好的策略是匹配你的GPU,如果你觉得你没有足够的RAM,只需再购买一些。

一种不同的策略受到心理学的影响:心理学告诉我们,注意力是一种随着时间推移而耗尽的资源。RAM是为数不多的硬件之一,可以让您节省集中资源,解决更困难的编程问题。如果你有更多的RAM,你可以将注意力集中在更紧迫的事情上,而不是花费大量时间来环绕RAM瓶颈。有了大量的RAM,您可以避免这些瓶颈,节省时间并提高生产率,解决更紧迫的问题。特别是在Kaggle比赛中,我发现额外的RAM对于特征工程非常有用。因此,如果您有钱并进行大量预处理,那么额外的RAM可能是一个不错的选择。因此,使用此策略,您希望现在拥有更多,更便宜的RAM而不是更晚。

中央处理器

人们犯的主要错误是人们过分关注CPU的PCIe通道。您不应该太在意PCIe通道。相反,只需查看您的CPU和主板组合是否支持您要运行的GPU数量。第二个最常见的错误是获得一个功能太强大的CPU。

CPU和PCI-Express

人们对PCIe车道感到疯狂!然而,问题是它对深度学习表现几乎没有影响。如果您只有一个GPU,则只需要PCIe通道即可快速将数据从CPU RAM传输到GPU RAM。然而,ImageNet批次的32个图像(32x225x225x3)和32位需要1.1毫秒,16个通道,2.3毫秒,8个通道,4.5毫秒,4个通道。这些是理论数字,在实践中,你经常看到PCIe的速度是它的两倍 - 但这仍然是闪电般的快速!PCIe通道通常具有纳秒范围内的延迟,因此可以忽略延迟。

把这个放在一起我们有一个ImageNet迷你批次的32张图像和一个ResNet-152以下时间:

  • 前向和后向传递:216毫秒(ms)
  • 16个PCIe通道CPU-> GPU传输:大约2 ms(理论上为1.1 ms)
  • 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通道。

PCIe通道和多GPU并行

如果您在具有数据并行性的多个GPU上训练网络,PCIe通道是否重要?我已经在ICLR2016上发表了一篇论文,我可以告诉你,如果你有96个GPU,那么PCIe通道非常重要。但是,如果您有4个或更少的GPU,这并不重要。如果您在2-3个GPU之间并行化,我根本不关心PCIe通道。有了4个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优于3.5GHz,还是它?这对于比较具有相同架构的处理器(例如“Ivy Bridge”)通常是正确的,但它在处理器之间不能很好地比较。此外,它并不总是衡量性能的最佳方法。

在深度学习的情况下,CPU几乎没有计算:在这里增加一些变量,在那里评估一些布尔表达式,在GPU或程序内进行一些函数调用 - 所有这些都取决于CPU核心时钟率。

虽然这种推理似乎很合理,但是当我运行深度学习程序时,CPU有100%的使用率,那么这里的问题是什么?我做了一些CPU核心速率的低频实验来找出答案。

MNIST和ImageNet上的CPU降频:性能测量为100个纪元MNIST或具有不同CPU核心时钟速率的ImageNet上的半个纪元所花费的时间,其中最大时钟速率被视为每个CPU的基线。 作为比较:从GTX 580升级到GTX Titan的性能约为+ 20%;  从GTX Titan到GTX 980另外+ 30%的性能;  GPU超频可为任何GPU带来约+ 5%的性能

MNIST和ImageNet上的CPU降频:性能测量为200个历元MNIST或ImageNet上具有不同CPU核心时钟速率的四分之一时间,其中最大时钟速率被视为每个CPU的基线。作为比较:从GTX 680升级到GTX Titan的性能约为+ 15%; 从GTX Titan到GTX 980另外+ 20%的性能; GPU超频可为任何GPU带来约+ 5%的性能

请注意,这些实验是在过时的硬件上进行的,但是,对于现代CPU / GPU,这些结果应该仍然相同。

硬盘/ SSD

硬盘通常不是深度学习的瓶颈。但是,如果你做了愚蠢的事情会对你造成伤害:如果你在需要时从磁盘读取你的数据(阻塞等待),那么一个100 MB / s的硬盘驱动器将花费你大约185毫秒的时间为32的ImageNet迷你批次 - 哎哟!但是,如果您在使用数据之前异步获取数据(例如火炬视觉加载器),那么您将在185毫秒内加载小批量,而ImageNet上大多数深度神经网络的计算时间约为200毫秒。因此,在当前仍处于计算状态时加载下一个小批量,您将不会面临任何性能损失。

但是,我建议使用SSD以提高舒适度和工作效率:程序启动和响应速度更快,使用大文件进行预处理要快得多。如果您购买NVMe SSD,与普通SSD相比,您将获得更加平滑的体验。

因此,理想的设置是为数据集和SSD提供大而慢的硬盘驱动器,以提高生产率和舒适度。

电源装置(PSU)

通常,您需要一个足以容纳所有未来GPU的PSU。GPU随着时间的推移通常会变得更加节能; 因此,虽然其他组件需要更换,但PSU应该持续很长时间,因此良好的PSU是一项很好的投资。

您可以通过将CPU和GPU的功耗与其他组件的额外10%瓦特相加来计算所需的功率,并作为功率峰值的缓冲器。例如,如果您有4个GPU,每个250瓦TDP和一个150瓦TDP的CPU,那么您将需要一个最小为4×250 + 150 + 100 = 1250瓦的PSU。我通常会添加另外10%,以确保一切正常,在这种情况下将导致总共1375瓦特。在这种情况下,我会得到一个1400瓦的PSU。

需要注意的一个重要部分是,即使PSU具有所需的功率,它也可能没有足够的PCIe 8针或6针连接器。确保PSU上有足够的连接器以支持所有GPU!

另一个重要的事情是购买具有高功率效率的PSU - 特别是如果你运行许多GPU并将运行它们更长的时间。

以全功率(1000-1500瓦)运行4 GPU系统来训练卷积网两周将达到300-500千瓦时,在德国 - 相当高的电力成本为每千瓦时20美分 - 将达到60- 100欧元(66-111美元)。如果这个价格是100%的效率,那么用80%的电源进行这样的网络培训会增加18-26欧元的成本 - 哎哟!对于单个GPU而言,这一点要少得多,但重点仍然存在 - 在高效电源上投入更多资金是有道理的。

全天候使用几个GPU将大大增加您的碳足迹,它将使运输(主要是飞机)和其他有助于您的足迹的因素蒙上阴影。如果你想要负责,请考虑像纽约大学机器学习语言组(ML2)那样实现碳中性  - 它很容易做到,价格便宜,应该是深度学习研究人员的标准。

CPU和GPU冷却

冷却很重要,它可能是一个重要的瓶颈,它会比糟糕的硬件选择降低性能。对于CPU来说,使用标准散热器或一体化(AIO)水冷却解决方案应该没问题,但是对于GPU来说,需要特别注意。

风冷GPU

对于单个GPU,空气冷却是安全可靠的,或者如果您有多个GPU之间有空间(在3-4 GPU情况下为2个GPU)。但是,当您尝试冷却3-4个GPU时,可能会出现一个最大的错误,在这种情况下您需要仔细考虑您的选项。

现代GPU在运行算法时会将速度 - 以及功耗 - 提高到最大值,但一旦GPU达到温度障碍 - 通常为80°C - GPU将降低速度,以便温度阈值为没有违反。这样可以在保持GPU过热的同时实现最佳性能。

然而,对于深度学习程序而言,典型的风扇速度预编程时间表设计得很糟糕,因此在开始深度学习程序后几秒内就达到了这个温度阈值。结果是性能下降(0-10%),这对于GPU相互加热的多个GPU(10-25%)而言可能很重要。

由于NVIDIA GPU首先是游戏GPU,因此它们针对Windows进行了优化。您可以在Windows中单击几次更改风扇计划,但在Linux中不是这样,并且因为大多数深度学习库都是针对Linux编写的,这是一个问题。

Linux下唯一的选择是用于设置Xorg服务器(Ubuntu)的配置,您可以在其中设置“coolbits”选项。这对于单个GPU非常有效,但是如果你有多个GPU,其中一些是无头的,即它们没有连接监视器,你必须模拟一个硬和黑客的监视器。我试了很长时间,并且使用实时启动CD来恢复我的图形设置令人沮丧 - 我无法让它在无头GPU上正常运行。

如果在空气冷却下运行3-4个GPU,最重要的考虑因素是注意风扇设计。“鼓风机”风扇设计将空气推出到机箱背面,以便将新鲜,凉爽的空气推入GPU。非鼓风机风扇在GPU的虚拟性中吸入空气并冷却GPU。但是,如果你有多个相邻的GPU,那么周围没有冷空气,带有非鼓风机风扇的GPU会越来越多地加热,直到它们自己降低温度到达更低的温度。不惜一切代价避免3-4个GPU设置中的非鼓风机风扇。

用于多个GPU的水冷GPU

另一种更昂贵且更加工艺的选择是使用水冷却。如果您使用单个GPU或两个GPU之间有空间(3-4 GPU板中有2个GPU),我不建议使用水冷。然而,水冷却确保即使最强劲的GPU在4 GPU设置中也能保持凉爽,这在用空气冷却时是不可能的。水冷却的另一个优点是它可以更安静地运行,如果您在其他人工作的区域运行多个GPU,这是一个很大的优势。水冷却每个GPU花费大约100美元,还有一些额外的前期成本(大约50美元)。水冷还需要一些额外的工作来组装你的计算机,但有很多详细的指南,它应该只需要几个小时的时间。维护不应该那么复杂或费力。

冷却的大案例?

我为我的深度学习集群购买了大型塔,因为他们为GPU领域增加了粉丝,但我发现这在很大程度上是不相关的:大约2-5°C的降低,不值得投资和案件的庞大。最重要的部分是直接在GPU上的冷却解决方案 - 不要为其GPU冷却功能选择昂贵的外壳。在这里便宜。这个案子应该适合你的GPU,但就是这样!

结论冷却

所以最后它很简单:对于1 GPU,空气冷却是最好的。对于多个GPU,您应该获得鼓风式空气冷却并接受微小的性能损失(10-15%),或者您需要额外支付水冷却,这也更难以正确设置并且您没有性能损失。在某些情况下,空气和水冷却都是合理的选择。然而,我会建议空气冷却以简化 - 如果您运行多个GPU,请获得鼓风式GPU。如果您想用水冷却,请尝试为GPU找到一体化(AIO)水冷却解决方案。

母板

您的主板应该有足够的PCIe端口来支持您要运行的GPU数量(通常限制为4个GPU,即使您有更多的PCIe插槽); 请记住,大多数GPU的宽度为两个PCIe插槽,因此如果您打算使用多个GPU,请购买PCIe插槽之间有足够空间的主板。确保您的主板不仅具有PCIe插槽,而且实际上支持您要运行的GPU设置。如果您在newegg上搜索您选择的主板并查看规格页面上的PCIe部分,通常可以在此找到相关信息。

电脑机箱

选择外壳时,应确保它支持位于主板顶部的全长GPU。大多数情况下都支持全长GPU,但是如果你购买一个小盒子,你应该怀疑。检查其尺寸和规格; 你也可以尝试谷歌图像搜索该模型,看看你是否找到了带有GPU的图片。

如果您使用自定义水冷却,请确保您的外壳有足够的空间放置散热器。如果您为GPU使用水冷却,则尤其如此。每个GPU的散热器都需要一些空间 - 确保您的设置实际上适合GPU。

显示器

我首先想到关于显示器也是愚蠢的,但它们会产生如此巨大的差异并且非常重要,我只需要写下它们。

我在3台27英寸显示器上花的钱可能是我用过的最好的钱。使用多台显示器时,生产力会大幅提升。如果我必须使用一台显示器,我会感到非常瘫痪。不要在这件事上做出改变。如果您无法以有效的方式操作它,那么快速深度学习系统有什么用呢?

2015-03-04 13.58.10

我深入学习时的典型显示器布局:左:论文,谷歌搜索,gmail,stackoverflow; 中:代码; right:输出窗口,R,文件夹,系统监视器,GPU监视器,待办事项列表和其他小型应用程序。

关于构建PC的一些话

许多人害怕建造电脑。硬件组件很昂贵,你不想做错事。但它非常简单,因为不属于一起的组件不能组合在一起。主板手册通常非常具体如何组装所有内容,并且有大量的指南和分步视频,如果您没有经验,它们将指导您完成整个过程。

构建计算机的好处在于,您知道有关构建计算机的所有知识,因为所有计算机都以相同的方式构建 - 因此构建计算机将成为您的生活技能将能够一次又一次地申请。所以没有理由退缩!

结论/ TL; DR

GPU:RTX 2070或RTX 2080 Ti。来自eBay的GTX 1070,GTX 1080,GTX 1070 Ti和GTX 1080 Ti也不错!
CPU:每GPU 1-2个核心,具体取决于您预处理数据的方式。> 2GHz; CPU应该支持您要运行的GPU数量。PCIe通道并不重要。

RAM:
- 时钟频率无关紧要 - 购买最便宜的RAM。
- 购买至少与最大GPU的RAM相匹配的CPU RAM。
- 仅在需要时购买更多RAM。
- 如果您经常使用大型数据集,则可以使用更多RAM。

硬盘/ SSD:
- 用于数据的硬盘驱动器(> = 3TB)
- 使用SSD来提供舒适性并预处理小型数据集。

PSU:
- 加上GPU + CPU的瓦数。然后将所需功率的总和乘以110%。
- 如果您使用多个GPU,请获得高效率。
- 确保PSU有足够的PCIe连接器(6 + 8针)

散热:
- CPU:获得标准CPU散热器或一体化(AIO)水冷解决方案
- GPU:
- 使用空气冷却
- 如果您购买多个GPU 
,请使用“鼓风式”风扇获取GPU - 在您的Xorg中设置coolbits标志配置控制风扇速度

主板:
- 为您(未来)的GPU获取尽可能多的PCIe插槽(一个GPU需要两个插槽;每个系统最多4个GPU)

监视器:
- 额外的监视器可能会比其他GPU更高效。