深度学习硬件选购“避坑”完全指南

深度学习属于计算密集型任务,搭建硬件环境至关重要,例如选择多内核的快速CPU和其他相关硬件配置,但是,在构建深度学习硬件系统时,最常见的“天坑”就是在没有必要的硬件上浪费钱。在这里,我们推荐阅读深度学习博主Tim Dettmers撰写的“深度学习硬件指南”,原文编译如下:

多年来,我总共建立了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时尤其要留意内存要求。RTX卡可以以16位运行,可以训练相比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)16倍通道需要1.1毫秒,8倍通道2.3毫秒,4倍通道4.5毫秒。这些是理论数字,实际速度可能会减半 – 但这仍然是闪电般的快速!

下面是用ResNet-152进行ImageNet32位图像迷你批次传输测试的实际结果与理论数据的对比:

  • 前向和后向传递总用时: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。因此,时钟频率并不总是衡量性能的最佳标准。

在深度学习的应用场景中,CPU计算负载不高:在这里增加一些变量,在那里评估一些布尔表达式,在GPU或程序内进行一些函数调用 。

但是当我运行深度学习程序时,CPU使用率经常会飙到100%,那么CPU的频率对深度学习系统性能的影响到底有多大呢?我做了一些CPU内核速率的降频实验来找出答案。

MNIST和ImageNet上的CPU降频:可以看出不同主频CPU在内核大幅降频后对整个系统的性能影响不大(没有必要购买太高主频的昂贵的CPU)。作为比较:从GTX 680升级到GTX Titan的性能约为+ 15%; 从GTX Titan到GTX 980另外+ 20%性能; GPU超频可为任何GPU带来约+ 5%的性能

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

硬盘/ SSD

硬盘通常不是深度学习的瓶颈。但是,如果你决策错误依然会对你造成伤害:如果你在需要时从磁盘读取数据(阻塞等待),那么一个100 MB / s的硬盘驱动器将花费大约185毫秒的时间用于32的ImageNet迷你批次 – 哎哟!但是,如果您在使用数据之前异步获取数据(例如Torch视觉加载器),那么您将在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将大大增加您的碳足迹,并将使运输(主要是飞机)和其他有助于您的足迹的因素蒙上阴影。如果你想要负责,请考虑像NYU机器学习语言组(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),我不推荐水冷。当4个甚至更多高性能GPU插满插槽的时候,散热的重任就需要交给水冷了。水冷却的另一个优点是它可以更安静地运行,如果你在其他人工作的区域运行多个GPU,这是一个很大的优势。水冷却每个GPU需要花费大约100美元和一些额外的前期成本(大约50美元)。水冷还需要一些额外的工作来组装你的计算机,但有很多详细的指南,它应该只需要几个小时的时间。维护不应该那么复杂或费力。

为了更好的冷却效果购买大机箱?

我为我的深度学习集群购买了大型塔式机箱,有着更多的GPU风扇位置,但我发现这其实是没有必要的,大机箱只有大约2-5°C的温度下降,却导致空间占用和成本上的飙升,不值得投资。其实最重要的是直接在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英寸显示器上花的钱可能是我做过的最好的硬件投资。使用多台显示器时,生产力会大幅提升。仅仅使用一台显示器的话,工作几乎陷于瘫痪。如果您无法高效操纵系统,那么快速深度学习系统有什么用呢?

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

结论/ 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更高效。

第一时间获取面向IT决策者的独家深度资讯,敬请关注IT经理网微信号:ctociocom

   

除非注明,本站文章均为原创或编译,未经许可严禁转载。

相关文章:


关于作者