诺邦在线 首页 资讯信息行业动态

完全硬件指南:教你 DIY 一套自己的深度学习机器

2019-1-21 10:54 168 0 来自: 36氪
简介
在各大技术公司纷纷开源框架的背景下,人工智能日益成为普通开发者也能折腾的东西。当然,要想自己也能玩玩人工智能,你需要一套合适的硬件。如何才能搭建一套合适的人工智能,尤其是当今最火的深度学习的硬件呢?为 ...

在各大技术公司纷纷开源框架的背景下,人工智能日益成为普通开发者也能折腾的东西。当然,要想自己也能玩玩人工智能,你需要一套合适的硬件。如何才能搭建一套合适的人工智能,尤其是当今最火的深度学习的硬件呢?为了帮助大家避免一些硬件配置的坑,深度学习的资深玩家Tim Dettmers将自己的经验教训总结成了这篇深度学习的完全硬件指南,供各位玩家参考。

完全硬件指南:教你 DIY 一套自己的深度学习机器

深度学习是一项非常耗算力的工作,所以你得有一个带很多内核的CPU,对吧?或者买高速CPU也许是浪费?在开发深度学习系统的时候,你能够做的最糟糕的事情之一就是在不必要的硬件上浪费钱。以下我将一步步地引导你了解搭建一套廉价的高性能系统所需的硬件。

这些年来,我总共搭建了7台不同的深度学习工作站。虽然进行了精心的研究和论证,但我在选择硬件部件方面还是犯了不少错误。在本篇指南中,我希望分享一下我在这些年学到的经验,以便你不再犯我犯过的那些错误。

本文将按照错误的严重程度来排序。这意味着通常最浪费钱的错误排在前面。

GPU图形处理器

本文假设你使用GPU来做深度学习。如果你正在为深度学习搭建或者升级系统的话,省掉GPU是不明智的做法。GPU是深度学习应用的核心——它对处理速度的改进实在是太大了,容不得无视它的存在。

我之前在GPU推荐的博文中已经详细讨论过GPU的选择,挑选GPU大概是你做深度学习系统最关键的选择了。在选择GPU时你可能会犯额错误主要有3个:(1)糟糕的性价比,(2)内存不足,(3)冷却不好。

要想有好的性价比,我一般建议用RTX 2070或者 RTX 2080 Ti。如果你用这些板卡你得用16位的型号。否则的话,去eBay淘GTX 1070、GTX 1080、GTX 1070 Ti是不错的选择,这些GPU你可以用于32位(但不是16位)。

选择GPU的时候要当心内存需求。在内存相同的情况系,与GTX板卡相比,可以跑16位的RTX板卡能训练的模型规模可以是前者的2倍。而且此类RTX板卡还有内存优势,选择RTX板卡并学习如何有效地使用16位模型能带你走很远的路。一般而言,对内存的需求大概是这样的:

  • 追求最高水准的研究:>=11 GB

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

  • 任何其他研究:8 GB

  • Kaggle竞赛:4 – 8 GB

  • 初创企业:8 GB(不过要根据特定应用领域情况来确定模型规模)

  • 公司: 8GB用于原型开发, >=11 GB用于训练

冷却是要留意的另一个问题,尤其是如果你买多块RTX板卡的话。如果你想把GPU插在相互挨在一起的PCIe槽的话,你的确保自己的GPU有一块风力强劲的风扇。否则的话你可能就要遇到温度问题,然后你的GPU就会变慢(约30%)并且死得更快。

完全硬件指南:教你 DIY 一套自己的深度学习机器

排成一排的嫌疑犯

RAM

你认得出哪个硬件部件要对性能糟糕负责任吗?或者也许是CPU的错?RAM的主要错误是买时钟频率太高的RAM。第二个错误是买的RAM不足,没法获得流畅的原型体验。

所需的RAM时钟频率

RAM时钟频率是内存公司推销的噱头,引诱你买“更快”的RAM其实得到的性能好处寥寥。最好的解释可以看看Linus Tech Tips的视频《RAM速度真的重要吗?》

此外,重要的一点是要知道RAM速度对于更快的CPU RAM->GPU RAM传输来说并不相干。这是因为(1)如果你用的是固定内存,你的小批量(mini-batches)数据会在不需要CPU参与的情况下传输给GPU,以及(2)如果你不用固定内存,那么用高频内存和低频内存的性能差别大概在0-3%之间——所以还是把你的钱花在其他地方吧!

RAM大小

RAM大小并不影响深度学习的性能。然而,它有可能妨碍你舒服地执行你的GPU代码(不需要交换到硬盘去)。为了舒服地使用GPU,你应该要有足够的RAM。这意味着你至少应该有匹配最大GPU的RAM容量。比方说,如果你有一块代24GB内存的Titan RTX,那你至少应该有24 GB的RAM。然而,如果你的GPU不止一块的话,你不需要有更多的RAM。

“RAM匹配最大的GPU内存”这条策略的问题是,如果你处理的是大型数据集的话,你可能仍然会RAM不足。这里的最佳策略是匹配你的GPU,如果你觉得自己的RAM不足的话就多买点。

另一项策略则受心理影响:心理学告诉我们,专注是一种会随着时间流逝而减少的资源。RAM是你可以预留注意力资源给更困难的编程问题的少数硬件之一。如果你有更多RAM的话,就不需要花费大量时间去绕开RAM瓶颈,而是把你的注意力集中在更紧迫的事情上。RAM多的话你就可以避开那些瓶颈,节省时间并提高更迫切问题的生产力。尤其是在Kaggle竞赛上。我发现额外的RAM对于特征工程非常有用。所以如果你有钱并且要做大量的预处理的话,则额外的RAM也许是个好的选择。所以如果采取这项策略的话,你会想马上要更多的廉价RAM而不是等到后面。

CPU

大家犯的主要错误是把太多的注意力放在了CPU的PCIe通道上。你不应该太过关注PCIe通道。相反,只需要看看你的CPU和主板组合是否支持你想要跑的GPU数量即可。第二个最常见的错误是CPU过于强大。

CPU与PCIe(串行总线)

对于PCIe通道大家都疯了!然而,事实上它对深度学习性能几乎毫无影响。如果你有一个GPU,只有在需要迅速将你的数据从CPU RAM传输到GPU RAM时才用到PCIe通道。但是,一批32张的ImageNet图像(32x225x225x3)以及32位模型用16通道需要1.1毫秒,8通道需要2.3毫秒,4通道需要4.5毫秒。这些都是理论数字,实际上你经常会看到PCIe速度要慢一半——但是这仍然是非常快了!PCIe的时延通常是纳秒级的,所以时延可以忽略不计。

那么小批量的32张ImageNet图像和RestNet-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通道性能提升只有3.2%左右。然而,如果你用的是PyTorch的数据加载器+固定内存的话,性能提升为0%。所以如果你用单GPU的话就不要浪费钱到PCUe通道上了!

当你选择CPU PCIe通道以及主板PCIe通道时,确保你选择的组合支持你想要数量的GPU。如果你买的主板支持2GPU,并且你最终想要两块GPU的话,确保你买的CPU支持2块GPU,但未必需要看PCIe通道的情况。

PCIe通道与多GPU并行

如果你采用数据并行机制利用多个GPU来训练网络的话,PCIe通道重要吗?我曾经在ICLR2016上发表过一篇文章谈这个问题,可以告诉你的是,如果你有96个GPU,那PCIe就真的很重要。然而,如果捏GPU数量在4个及以下的话,那通道就没太大关系。如果你用23个GPU做并行化,我根本就不在意通道的事情。GPU的情况下,我会确保每GPU可得到PCIe通道的支持(总计就是32通道)。既然根据经验法则几乎没人会跑超过4GPU的系统:所以就不要为了争取更多PCIe通道数/GPU多花钱了——因为花了也是白花!

所需CPU内核数

要想对CPU做出明智选择我们首先需要理解CPU以及CPU与深度学习的关系。CPU对深度学习有何贡献呢?当你在GPU上跑深度学习网络时CPU几乎不做什么计算。基本上它(1)发起GPU功能调用,(2)执行CPU功能。

目前为止CPU最有用的应用是数据处理。有两种不同的常见数据处理策略,它们各有不同的CPU需求。

第一种策略是在训练时进行预处理:

循环:

加载小批量数据

预处理小批量数据

训练小批量数据

第二种策略是在进行任何训练前预处理:

  1. 处理数据

  2. 循环:

       1、加载预处理小批量数据

       2、训练小批量数据

对于第一种策略,带多核的好的CPU可显著提升性能。对于第二种策略,你就不需要好的CPU了。对于第一种策略,我建议每GPU最少配置4线程——通常是每GPU 2内核。对此我没有做过严格的硬件测试,但你应该得到每额外内核/GPU 0-5%的性能提升。

对于第二种策略,我建议每GPU最小配置2线程——通常就是每GPU一个内核。如果你采用的是第二种策略并且内核数很多的话在性能方面你不会看到太明显的提升。

所需的时钟频率

大家一想到高速CPU往往首先想到的是时钟频率。4GHz要比3.5GHz好对吧?在比较相同架构(比如英特尔Ivy Bridge)的处理器这个结论一般是对的,但是架构不同的就不好比了。此外,这个也未必都是最好的性能评测指标。

深度学习的情况下CPU完成的计算其实是很少的:一般就是这里增加几个变量,那里计算一下布尔表达式,对GPU或者在程序内进行一些函数调用——这些都要靠CPU的内核时钟频率。

虽说这些理由似乎通情达理,但事实上我在跑深度学习程序时CPU利用率却达到了100%,问题出在哪里呢?我试着对CPU核心时钟频率做了一些降频处理来一探究竟。

完全硬件指南:教你 DIY 一套自己的深度学习机器

MNIST与ImageNet数据集的CPU降频:性能用不同CPU核心时钟频率跑200次MNIST或者50次ImageNet所需时间来衡量,以最快时钟频率所得结果作为每块CPU的基线。比较结果:从GTX 680升到GTX Titan大概有+15%的性能提升;GTX Titan升级到GTX 980又有+20%的提升;对于任何GPU来说GPU超频可带来约+5%的性能提升。

注意,这些实验都是在过时的硬件上进行的,不过,这些结果对于相同的CPU/GPU应该还是一样的。

硬盘/SSD

硬盘通常不是深度学习的瓶颈。不过,如果你干蠢事的话它就会伤害到你:如果你有时候需要从硬盘读取数据(阻塞等待)的话,则一个100MB/s的硬盘会让你付出代价——大小为32的小批量ImageNet数据集就要185毫秒!然而,如果你在使用前采取异步获取数据的话(比如torch vision加载器),尽管这个小批量的加载时间还是185毫秒,但是并不会影响性能,因为大多数ImageNet的深度神经网络计算时间都是200毫秒左右,也就是说上一批计算完时下一次的预加载已经完成了。

不过,出于舒心和生产力的考虑我建议用SSD:这样程序启动和响应会更快,对大文件的预处理也要快一点。如果你买的是NVMe SSD,那么相对于一般SSD体验还会更加流畅。

因此理想的配置是用一块大但慢的硬盘来装数据集,用SSD来改善舒适度和生产力。

电源

一般来说,你当然希望电源可以适应所以将来要用的GPU。GPU的能效通常会逐步变高:所以尽管其他的部件可能需要替换,但电源可以用很久,一次买个好电源是不错的投资。

电源功率要买多大呢?你可以把CPU、GPU所需功率加起来再考虑10%的其他部件开销并作为用电高峰的缓冲。比方说,如果你有4个GPU,每个是250瓦TDP,以及一个150瓦TDP的CPU的话,则对电源的最小需求为4×250 + 150 + 100 = 1250瓦。我通常会再加10%以确保万无一失,这样的话需求就是1375瓦。取整就是1400瓦的电源。

还有重要的一点要注意,有时候即便电源功率足够,但可能它额8针或6针接线不够。确保电源的接线数量足以连上你所有的GPU!

还有一点就是要买高功效的电源——尤其是如果你要跑很多GPU并且跑很久的话。

满功率(1000-1500瓦)跑4GPU的系统来训练卷积神经网络2周需要消耗300-500kWh,德国的电费是20分/kWh,所以大概就是600-100欧元。如果这个价格是针对100%能效的话,用80%能效比电源训练这样一个网络还要额外多18-26欧元!单GPU的就少很多,但道理是一样的——多花点钱到高能效电源上面是有道理的。

没完没了地跑几个GPU会显著增加你的碳排放。如果你想做个负责任的人的话,可以考虑采用碳平衡方案,比如纽约大学的Machine Learning for Language Group (ML2)——实现简单、廉价,应该成为深度学习研究人员的标准。

CPU与GPU制冷

制冷很重要,而且会成为降低性能的重大瓶颈,其影响甚至比糟糕的硬件选择还要大。标准的散热器或者一体式水冷解决方案对你的CPU来说也许就OK了,但是GPU需要特别考虑。

收藏 邀请

鲜花

握手

雷人

路过

鸡蛋

相关分类

精彩阅读

广告位

关注我们:锦文与你快乐分享

官方微信

APP下载

全国服务热线:

0312-2335877    0312-2339711

地址:河北省定州市北城区大道观街

Email:jwkj@dzjwkj.com

Powered by Dzjwkj! X3.2© 2013-2018 Jinwen Inc.  定州锦文科技有限公司 版权所有   

定州锦文科技有限公司   冀ICP备17008983号-11