✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。
🍎个人主页:算法工程师的学习日志
前言:硬件设备,是任何一名深度学习er不可或缺的核心装备。各位初级调参魔法师们,你们有没有感到缺少那一根命中注定的魔杖?
可是,各种CPU、GPU、内存条、外设,那么多品牌种类型号参数,到底该怎么选?文章内容较长、耐心差的小伙伴直接拉到最后看结论即可
1、GPU
显卡(GPU)是深度学习的重要部件,甚至比CPU更重要。做深度学习不用GPU只用CPU显然是不明智的,慢的如乌龟,跑个模型等几天,难熬,但适合摸鱼
使用16bit的RTX 2070或者RTX 2080 Ti性价比更高。另外购买二手的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%。
2、内存
选择内存(RAM)有两个参数:时钟频率、容量
2.1、时钟频率
内存频率和数据转移到显存的速度无关,提高频率最多只能有3%的性能提升
2.2、内存容量
内存大小不会影响深度学习性能,但是它可能会影响你执行GPU代码的效率。内存容量大一点,CPU就可以不通过磁盘,直接和GPU交换数据。
所以用户应该配备与GPU显存匹配的内存容量。如果有一个24GB显存的Titan RTX,应该至少有24GB的内存。但是,如果有更多的GPU,则不一定需要更多内存。
内存关系到你能不能集中资源,解决更困难的编程问题。如果有更多的内存,你就可以将注意力集中在更紧迫的问题上,而不用花大量时间解决内存瓶颈。
额外的内存对特征工程非常有用。
3、CPU
过分关注CPU的性能和PCIe通道数量,是常见的认知误区。用户更需要关注的是CPU和主板组合支持同时运行的GPU数量。
3.1、CPU和PCIe
PCIe通道对深度学习性能几乎没有影响。
如果只有一个GPU,PCIe通道的作用只是快速地将数据从内存传输到显存。
ImageNet里的32张图像(32x225x225x3)在16通道上传输需要1.1毫秒,在8通道上需要2.3毫秒,在4通道上需要4.5毫秒。
这些只是是理论数字,实际上PCIe的速度只有理论的一半。PCIe通道通常具有纳秒级别的延迟,因此可以忽略延迟。
用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通道数量。
3.2、PCIe通道和多GPU并行计算
如果GPU数量少于4个,则根本不必关心PCIe通道。几乎很少有人同时运行超过4个GPU,所以不要在PCIe通道上花冤枉钱,大型的数据模型例外,真有8卡GPU就可以考虑PCIe通道问题
3.3、CPU核心数
为了选择CPU,首先需要了解CPU与深度学习的关系。
CPU为深度学习中起到什么作用?当在GPU上运行深度网络时,CPU几乎不会进行任何计算。CPU的主要作用有:(1)启动GPU函数调用(2)执行CPU函数。
到目前为止,CPU最有用的应用是数据预处理。有两种不同的通用数据处理策略,具有不同的CPU需求。
第一种策略是在训练时进行预处理,第二种是在训练之前进行预处理。
对于第一种策略,高性能的多核CPU能显著提高效率。建议每个GPU至少有4个线程,即为每个GPU分配两个CPU核心。
对于第二种策略,不需要非常好的CPU。建议每个GPU至少有2个线程,即为每个GPU分配一个CPU核心。用这种策略,更多内核也不会让性能显著提升。
3.4、CPU时钟频率
4GHz的CPU性能是否比3.5GHz的强?对于相同架构处理器的比较,通常是正确的。但在不同架构处理器之间,不能简单比较频率。CPU时钟频率并不总是衡量性能的最佳方法。
在深度学习的情况下,CPU参与很少的计算:比如增加一些变量,评估一些布尔表达式,在GPU或程序内进行一些函数调用。所有这些都取决于CPU核心时钟率。
4、硬盘/固态硬盘(SSD)
通常,硬盘不会限制深度学习任务的运行,但如果小看了硬盘的作用,可能会让你追、悔、莫、及。
想象一下,如果你从硬盘中读取的数据的速度只有100MB/s,那么加载一个32张ImageNet图片构成的mini-batch,将耗时185毫秒。
相反,如果在使用数据前异步获取数据,将在185毫秒内加载这些mini-batch的数据,而ImageNet上大多数神经网络的计算时间约为200毫秒。所以,在计算状态时加载下一个mini-batch,性能将不会有任何损失。
推荐固态硬盘(SSD),SSD在手,舒适度和效率皆有。和普通硬盘相比,SSD程序启动和响应速度更快,大文件的预处理更是要快得多。
顶配的体验就是NVMe SSD了,比一般SSD更流畅。
5、电源装置(PSU)
一个程序员对电源最基础的期望,首先得是能满足各种GPU所需能量吧。随着GPU朝着更低能耗发展,一个质量优秀的PSU能陪你走很久。
应该怎么选?计算方法:将电脑CPU和GPU的功率相加,再额外加上10%的功率算作其他组件的耗能,就得到了功率的峰值。
举个例子,如果你有4个GPU,每个功率为250瓦,还有一个功率为150瓦的CPU,则需电源提供4×250+150+100=1250瓦的电量。
通常会在此基础上再额外添加10%确保万无一失,那就总共需要1375瓦。所以这种情况下,电源性能需达1400瓦。
还有一点得注意,即使一个PSU达到了所需瓦数,也可能没有足够的PCIe 8-pin或6-pin的接头,所以买的时候还要确保电源上有足够多的接头接GPU。
另外,买一个能效等级高的电源,特别是当你需要连很多GPU并且可能运行很长时间的时候,原因你懂的。
6、CPU和GPU的冷却
对于产热大户CPU和GPU来说,散热性不好会降低它们的性能。对CPU来说,则标配的散热器,或者AIO水冷散热器都是不错的选择。但GPU该用哪种散热方案,却是个复杂的事。
6.1、风冷散热
如果只有单个GPU,风冷是安全可靠的,但若你GPU多达3-4个,靠空气冷却可能就不能满足需求了。
目前的GPU会在运行算法时将速度提升到最大,所以功耗也达到最大值,一旦温度超过80℃,很有可能降低速度,无法实现最佳性能。
对于深度学习任务来说这种现象更常见了,一般的散热风扇远达不到所需效果,运行几秒钟就达到温度阈值了。如果是用多个GPU,性能可能会降低10%~25%。
怎么办?目前,英伟达GPU很多是针对游戏设计的,所以对于Windows系统进行了专门的优化,也可以轻松设置风扇方案。
但在Linux系统中这招就不能用了,麻烦的是,很多深度学习库也都是针对Linux编写的。
这是一个问题,但也不是无解。
在Linux系统中,你可以进行Xorg服务器的配置,选择“coolbits”选项,这对于单个GPU还是很奏效。
若你有多个GPU, 就必须模拟一个监视器,如果你想在空气冷却的环境中运行3-4个小时,则最应该注意风扇的设计。
目前市场上的散热风扇原理大致有两种:鼓风式的风扇将热空气从机箱背面推出,让凉空气进来;非鼓风式的风扇是在GPU中吸入空气达到冷却效果。
所以,如果你有多个GPU彼此相邻,那么周围就没有冷空气可用了,所以这种情况,一定不要用非鼓风式的散热风扇了。
6.2、水冷散热
水冷散热虽然比风冷法成本略高,但很适用于多个GPU相邻的情况,它能hold住四个最强劲的GPU保持周身凉爽,是风冷无法企及的效果。
另外,水冷散热可以更安静地进行,如果你在公共区域运行多个GPU,水冷的优势更为凸显了。
6.3、结论
对于单个GPU,风冷便宜也够用;多个GPU情况下,鼓风式的空气冷却比较便宜,可能会带来10%~15%的性能损失。如果想追求散热极致,水冷散热安静且效果最好。
所以,风冷or水冷都合理,看你自己的实际情况和预算了。通常情况下,还是考虑下低成本的风冷吧。
7、主板
主板应该有足够的PCIe插槽来支持所需的GPU数量。但需要注意的是,大多数显卡宽度需要占用两个PCIe插槽。
如果打算使用多个GPU,就要购买PCIe插槽之间有足够空间的主板,确保显卡之间不会相互遮挡。
8、机箱
选机箱的时候,必须保证机箱能装下主板顶部的全长GPU,虽然大部分机箱是没问题的,但是万一你买小了,那就得看商家给不给你七天无理由了……
所以,买之前最好确认一下机箱的尺寸规格,也可以搜一下机箱装着GPU的图,有别人的成品图的话就能买得放心一些。
另外,如果你想用定制水冷的话,保证你的机箱能装得下散热器,尤其是给GPU用定制水冷的时候,每个GPU的散热器都需要占空间。
9、显示器
作为一个成熟的技术人员,用多台显示器是基本配置了。
10、太长不看版
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的厚度。
显示器:
为了提高效率,多买几块屏幕吧。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net