俗话说:“工欲善其事,必先利其器。”作为想要入门深度学习的炼丹学徒,入手一套趁手的炼丹工具很有必要。
GPU是核心
传统上,装机三大件是CPU、主板和RAM(内存)。但对于深度学习而言,GPU才是核心。整个机器的配置都应该围绕GPU进行。
关于GPU的挑选,请看深度学习入门该怎么选GPU一文。
CPU不重要
如深度学习入门该怎么选GPU一文所述,深度学习的主要运算在GPU上完成,CPU完成的工作主要是programming和mini-batch。
一般计算需要比较强力的CPU,因为
比较强力的CPU有更高的频率和更多的核心;
比较强力的CPU有较大的缓存,而缓存的速度和RAM是天壤之别。
如前所述,programming和mini-batch,用不上多高的频率,也用不着多个核心。
至于缓存,对于programming而言,主要是变量和函数调用。这些完全可以放进L1缓存。而mini-batch,一般而言,缓存也放得下。比如MNIST的mini-batch大概0.4M,CIFAR大概1.5M,放缓存没问题。至于像ImageNet这种规模的数据,有85M之多,那就肯定要靠RAM,即使是强力的CPU,缓存也放不下。
CPU还有一个指标是访问内存的效率,包括内存频率和通道数。但是这两个参数对深度学习基本上没有什么影响。
如前说述,数据或者足够小,可以放进L1缓存,或者足够大,只能依靠RAM。
对于能放进L1缓存的数据,CPU可以直接访问L1缓存,无需访问内存,因此和CPU的内存频率和通道数无关。
至于依靠RAM存放的数据,基本上是数据量较大的mini-batch。这些数据量较大的mini-batch,会从RAM流入CPU,然后再由CPU传入GPU的显存。这其中,RAM到CPU是性能瓶颈。然而,一般而言,RAM的频率比CPU的内存频率低,因此买强力CPU并不能改善这里的性能。
还有一种做法就是绕过CPU,GPU和RAM直接通过DMA通讯。但是这种做法比经过CPU中转还要慢。
事实上,CUDA的异步功能是非常完善的。一旦GPU接受到第一份待处理的mini-batch,就会开始处理,在处理的过程中,会收到后面的mini-batch,一旦第一份mini-batch处理完毕,就会紧接着处理下一份mini-batch。这意味着,只有第一份mini-batch的传输会阻塞GPU的运算,后面所有的mini-batch传得慢都不会影响进度。
因此,基本上,Intel i5级别的CPU就足够了。
RAM
如上一节所述,RAM的频率和通道数不会影响深度学习的效率。
不过,DDR4的RAM有时能提升操作系统和开发环境的性能,从而提升开发效率。
考虑到RAM、CPU、GPU间的数据交换,还有操作系统和开发环境本身需要的RAM,RAM不能太小,至少不能小于GPU显存。
最后,买普通的RAM就可以。不用买带ECC校验的RAM。ECC RAM比普通的RAM贵很多,带一个额外的校验位,可以检测到RAM的错误。但是,深度学习网络是比较健壮的,不会受到一些小的误差的干扰。RAM偶尔发生的单个位的错误,并不会影响到深度学习网络。
主板
主板基本上只要注意兼容选定的GPU就可以。
另外,PCIe 3.0的主板一般要快一点。不过,PCIe 2.0通常不会成为性能瓶颈。对于整个系统而言,相比PCIe 3.0,PCIe 2.0大概有0%到5%的性能损失。
SSD
如果需要处理大规模的数据,比如大批量的32位数据集,那就上SSD。
即使数据量不大,也建议上SSD。这样可以快速加载操作系统和开发环境,显著提升开发效率。
对于一般应用而言,PCIe SSD要比SATA SSD快不少。但是,由于PCIe SSD可能会挤占同样接在PCIe上的GPU的带宽,因此可能降低整个系统的性能。这个问题在并行使用双GPU时尤为突出。当然,这也取决于主板上PCIe接口是怎么配置的。如果主板PCIe接口设计得好,安装组件的时候也没有装错,那PCIe SSD并不会影响GPU的性能。比如,对于16x/16x/8x的PCIe接口,将PCIe SSD接在8x上,并不会影响GPU的带宽。如果主板PCIe接口设计时没有考虑到这一点(对于很多应用来说,SSD挤占GPU带宽不会成为性能瓶颈),那还是选择SATA SSD比较妥当。
电源
电源功率的计算方法比较简单:
电源功率 = CPU功率 + GPU功率 + 100-300瓦
100-300瓦供其他组件使用,同时应对功率的波动。
除了功率以外,能效也是一个重要因素。因为深度学习网络训练需要跑很久,机器常常24小时运行。因此长期来看能效低的电源会多花不少电费。所以一般来说,推荐通过80plus白金牌认证的电源。除了能效高以外,一般来说白金电源也比较稳定。常常24小时高负荷运行的机器对电源的稳定性要求较高。白金电源可以降低因为电源不靠谱烧掉显卡的风险。
散热
千万不要忽视散热。
深度学习要求GPU长时间运行算法,GPU的温度也会随着时间的流逝而升高。如果散热不良,GPU的温度会很快升到80摄氏度,触发GPU的保护机制,自动降频,因此拖慢进度。
另外,散热也会影响GPU的寿命。散热不良会加速GPU老化。
在深度学习入门该怎么选GPU一文中,我们提到用于科学计算的专业卡对于深度学习而言性价比不高。然而,非专业卡,主要是为游戏设计的。PC游戏最主要的平台是Windows,因此NVIDIA的普通GPU主要为Windows系统优化,Linux环境下的默认策略对深度学习很不友好。另一方面,深度学习很多库和框架对Windows系统的支持是不如Linux好的。因此,如果选择Linux作为开发环境,就尤其要关心散热问题。
大致有三个解决方案:
通过刷BIOS来修改策略。这取决于选用的主板。有些主板并没有提供Linux下刷BIOS的软件,可以通过U盘启动刷新BIOS,或者先通过Windows刷BIOS,之后再将系统切换为Linux。
在Linux层面进行修改,比如,使用CoolBits软件。CoolBits原本是Windows平台下超频NVIDIA显卡的工具,后来被移植到Linux平台下。
上水冷。水冷的成本比较高,安装起来也稍微复杂一点。但是水冷有一个很大的好处就是比较安静,尤其是在公共办公空间,使用水冷系统能避免干扰同事工作。
机箱
如果选择小尺寸机箱的话,要注意机箱空间是否足够放下全尺寸显卡。
另外,机箱对散热也有一定影响,选择时也需要考虑。如果要上水冷的话,特别是选择分体式水冷而不是一体式水冷的话,机箱对水冷的支持情况也需要考虑。
显示器
多显示器能够显著提升开发效率。如果桌面空间够的话,可以考虑配三台显示器,一台显示相关论文,一台显示IDE,一台显示深度学习网络运行情况。
多显示器显存占用并不高,大概增加300-600MB的显存占用,一般不会对深度学习网络产生影响。所以,不用为了省这点显存专门购置带有集成显卡的CPU。
还有一种选择就是使用虚拟桌面。相比多显示器,虚拟桌面有一个额外的心智上切换的开销,虽然可能仅仅需要按一下快捷键,但这个动作可能打断当前的思路。不过相应地,使用虚拟桌面的话,颈部就不需要移动,频繁移动颈部也会导致疲劳。另外,在节约能源和节省桌面空间方面,虚拟桌面具有优势。具体是选择多显示器,还是选择虚拟桌面,取决于具体的条件和个人的习惯。
机器人网原创文章,未经授权禁止转载。详情见转载须知