这一篇笔记主要是对实验室服务器选型的一些调研。
当然,其中的很多知识也许在自己以后的装机岁月中会用到。
(目前忽略AMD,毕竟没有接触过,也不是主流)
服务器目标
服务器需要扮演的角色有:
- 作为云化环境下的低层资源。
- 提供GPU计算能力给深度学习或者其他科学计算。
硬件列表
首先,要作为一台PC,它的组成部分至少有,机箱、主板、CPU、内存、硬盘、电源和CPU散热器。
其次,作为需要提供GPU计算能力的服务器,那么它就需要GPU硬件。
- 机箱
- 主板
- CPU
- GPU
- 内存
- 硬盘
- 电源
- CPU散热
下面,一个一个硬件的来记录调研的信息以及一些自己的理解。
首先可以参考一下A Full Hardware Guide to Deep Learning-Tim Dettmers, 其中比较详细的说了各个部分的问题。
PCIe
首先,还是需要先了解一下PCIe通道,在主板、CPU、GPU的参数说明中通常会看到它, 在平常自己攒机的硬件选择时,通常都不用考虑它,因为你不会上多个GPU,但是一旦考虑到要装多个GPU的情景, 最好还是要了解一下。
PCI-Express (peripheral component interconnect express),它是一种高速串行计算机扩展总线标准, PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽, 主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。
目前一般都是PCIe 3.0,下面的表来自百度百科:
PCI Express 版本 | 行代码 | 传输速率 | 吞吐量 | |||
×1 | ×4 | ×8 | ×16 | |||
1.0 | 8b/10b | 2.5GT/s | 250MB/s | 1GB/s | 2GB/s | 4GB/s |
2.0 | 8b/10b | 5GT/s | 500MB/s | 2GB/s | 4GB/s | 8GB/s |
3.0 | 128b/130b | 8GT/s | 984.6MB/s | 3.938GB/s | 7.877GB/s | 15.754GB/s |
4.0 | 128b/130b | 16GT/s | 1.969GB/s | 7.877GB/s | 15.754GB/s | 31.508GB/s |
5.0 | 128b/130b | 32 or 25GT/s | 3.9 or 3.08GB/s | 15.8 or 12.3GB/s | 31.5 or 24.6GB/s | 63.0 or 49.2GB/s |
可以看到3.0单通道的传输速率为984.6MB/s。
简单说一下984.6MB/s是怎么和前面参数联系在一起的:
这里的
行代码
为128b/130b
,意思就是传输的130bit
中有128bit
是实际传输的数据,其中的2bit
可能是附带的信息位什么的,传输速率
为8GT/s
,意思是传输能力为8Gbps
(我是这样理解的),注意到Gbps
表示1000兆比特
,所以:
通常,主板参数中会显示它的PCIe通道数,这表示它所能最大支持的通道数,其实就是PCIe插槽插满的通道数, 要注意到,PCIe插槽的长度并不固定,如下图所示:
CPU的PCIe通道数表示CPU所包含的通道数,也就是CPU能够提供的PCIe通道数量,即使主板上有再多的PCIe插槽, CPU的PCIe通道数不够也没用(这里不准确,可能主板支持PCIe扩展,但那好像也不能根本性解决问题)。
GPU的通道数表示GPU所需要使用的通道数,同时也表示插上它需要多大的PCIe插槽,通常都是x16的。 要注意到在PCIe3.0的时代,在深度学习方面,通常x16的通道GPU是用不完的,或许x8就已经足够了, 当然,如果PCIe通道能够完全满足是最好的。
PS:如果一颗CPU有40
个PCIe通道,插入两块GPU是能够满足的,也就是16 + 16
,如果插上3块GPU,
一般变成16 + 8 + 8
,插上四块GPU时变成8 + 8 + 8 + 8
。
另外,PCIe通道不只是GPU能用,例如高端的固态硬盘使用的就是PCIe通道。
总结一下,也就两个问题:
- 主板的PCIe插槽要够。
- CPU能提供的PCIe通道要够。
主板
主板的选择主要考虑的点:
- PCIe插槽数,能否插下四张GPU。
- CPU槽数,是否要插两个CPU。
- 最大内存容量。这个看实际的需求来选择即可。
这里先说一说单CPU的主板选择:
大部分人的选择都是华硕X99-E WS
,因为它支持7×PCI-E X16显卡插槽
。
也就是它有7个插槽,所以它能够插下4张GPU(并不是有多少插槽就能插多少张GPU,事实上空间不足导致有的插槽不能再插)。 如果考虑可能会插到4张GPU的话,这张板子会是不错的选择。
但是,考虑到机器并不光是提供深度学习计算能力,还要有足够的CPU资源来进行虚拟化,所以可能需要选择到两路CPU。
一旦扯到两路CPU,感觉就像进入了一个另外的领域似的,因为支持两路CPU的都是服务器主板,资料也不多,非常复杂。
目前一般自己组机的话推荐使用 C612 芯片组的板子,支持两路CPU,PCIe插槽也多。
总之主板这方面的知识目前还是非常的欠缺…
对于华硕主板的详细参数可以去华硕官网查看,asus.com, 另外supermicro.org可以查到大部分主板的参数。
内存插槽数/通道数:
考虑到内存的扩展性,自然需要考虑内存通道数量的问题。
内存通道这个概念很容易混淆,可以参考:
简单来说,现在的主板大多支持双通道,比较好的主板(例如x99,服务器主板)会可能支持到四通道(也有支持三通道的主板,但是很少见)。 那么只支持双通道但是有四个内存插槽的板子什么意思?十分简单的来说,就是一个通道可以插两块内存, 当两块内存插在同一个通道上的时候,它只是容量叠加,当两个通道分别插上一块或两块内存的时候,才会开启双通道。 也就是两个通道,每个通道两个插槽,自然就是四个插槽。
CPU
CPU的选择主要考虑两点:
- 核心数,核心数越多并行能力就越强。
- PCIe通道数,目前单颗CPU最多的能够支持到40个通道。
- 最大支持内存。
对于单CPU的选择,就没什么要求,看它够不够40个通道,然后才是频率与核心数量, 如果不考虑并行,在运行深度学习模型的时候,其实只使用了CPU单核心,因为大部分计算工作都是GPU做了, CPU没有太大的任务,所以通常CPU核心数不关键,频率也不是很关键,不要太低就行了。
型号 | 核心数 | PCIe通道数 | 最大内存支持 | ECC内存支持 |
---|---|---|---|---|
i7-6850k | 6核12线程 | PCIe通道数40 | 最大内存支持128G | 不支持ECC内存 |
i7-7800x | 6核12线程 | PCIe通道数28 | 最大内存支持128G | 不支持ECC内存 |
E5-2620 v3 | 6核12线程 | PCIe通道数40 | 最大内存支持768G | 支持ECC内存 |
对于双路CPU来说,那都是E3/E5,这个通常也不用怎么考虑,选两个通道数够的,频率别太低的就行。
Intel的CPU参数查询可以去官网:intel.com。
GPU
对于选择GPU主要需要考虑的点:
- 价格。毕竟GPU可能是整台主机最贵的硬件,一般还是要掂量掂量。
- 深度学习的计算能力。时间也是金钱。
直接推荐阅读:
Picking a GPU for Deep Learning-Slav Ivanov
这里面讲了很多关于深度学习GPU选择的问题。
AMD还是NVIDIA
在深度学习这个方面,目前不用考虑AMD。
NVIDIA显卡的选择
首先,所选择的型号需要支持CUDA
,支持列表CUDA GPUs。
深度学习需要用到cuDNN库,那么自然需要显卡支持CUDA
。
另外,由于NVIDIA在10系列的显卡上发了力,这一代的提升完全是突破式的,导致在深度学习的机器门槛低了很多,
1080
、1080Ti
、TITAN Xp
这些桌面用户级显卡现在也完全可以胜任深度学习的计算,
比起老架构的计算卡甚至可以快出很多倍。
来看一看1080Ti与K80的比较:
从上图中,大概可以估计1080Ti比K80在深度学习模型的训练上,要快4倍以上。(那么K80之类的计算卡现在还有什么竞争力?这里需要注意到计算卡是双精度的,但是1080Ti之类的是单精度的,但是在很多需要计算的领域,包括深度学习,只需要单精度就够了。)
正是由于10系列显卡的发力,所以现在很多人以及实验室都会自己组装深度学习的工作站,因为这实在比直接买带计算卡的服务器便宜多了。
价格
以2018年3月11日网上的价格为例:
型号 | 品牌 | 价格 | 网站 |
---|---|---|---|
1080 | 公版 | $989.99 | 亚马逊 |
1080Ti | 公版 | ¥10350.00 | 京东 |
TITAN Xp | 公版 | ¥11999.00 | 京东 |
TITAN V | 公版 | ¥26688.00 | 京东 |
K80 | 公版 | $2298.00 | 亚马逊 |
P6000 | 公版 | $4,669.00 | 亚马逊 |
ps:价格都是随意看的,可能不准确,同时亚马逊到国内还有关税没有考虑。
之前1080Ti
性价比是最高的,因为那时公版1080Ti
也就5000~6000人民币,现在涨了快一倍,
感觉TITAN Xp
也可以考虑了。当然,怎么都比计算卡性价比高。
内存
对于深度学习来说,内存其实并不重要,实际上训练数据都会读入到显存里面,
大部分装机建议内存至少要大于显存(显卡的内存总和),因为GPU显存大小并不大(以TITAN X
为例,它的显存只有12G,也就是插4张也才48G显存,这时候64G的内存也是足够了)。
对于单CPU的主板来说,因为是大多是消费级,也基本不用至强CPU(不是所有主板都能插至强系列),所以基本不能使用ECC内存, 所以通常就直接考虑平常常见的内存就行,海盗船、金士顿、芝奇等的DDR4都可以。
对于双路CPU的主板来说,一般都要使用服务器内存,也就是带ECC功能的内存,同时为了良好的扩展性, 最好是RDIMMs的(LRDIMMs更好),相关可以参考:
LRDIMMs, RDIMMs, and Supermicro’s Latest Twin-AnandTech
另外简单说一下,对带有ECC的内存,还有一种是RECC内存(Reg ECC
),它多比纯ECC内存要多带了一个Register
,
它起到扩大内存容量的作用。
具体怎么选择,凭我的知识说不好。
————分割线————
下面首先十分推荐阅读内存系列一:快速读懂内存条标签-老狼, 写得很好。
内存条长短
内存条有好几种长度,也就是不同的插槽类型,这个需要与主板相匹配。
内存频率:
内存频率类似于CPU频率,频率越高也运行越快,但是在内存的频率选择时,需要按主板的内存频率支持来选。
内存容量:
内存容量都是2的次方的大小,平常PC使用的一般是4G或者8G的大小,但也有单条16G、32G的大小。
硬盘
首先这里不讨论固态盘,硬盘的选择需要考虑下列问题:
- 容量。
- 速度。
首先,需要注意到PC硬盘的定位是有好几种的,最简单的,看硬盘颜色, 分为黑盘、蓝盘、绿盘、红盘、紫盘等,关于它们之间的区别,看一个小科普就好:
你知道电脑硬盘有几种颜色吗?有哪些用途及如何选用你知道吗?-sohu
至于选哪种硬盘,个人使用蓝盘就够了,要好一点就用企业级的。
然后简单的知道硬盘还有两种接口就行,SAS和SATA。
电源
- 功率大小。
- 价格。
首先,对于功率大小,就是要保证电源能够提供给各个部件足够的功率,功率计算网站:
OuterVision® Power Supply Calculator
电源功率一定不能选小了,否则就会很尴尬,而且还要考虑到多个显卡扩展的情况,
如果考虑到4显卡扩展,可能至少需要一个1600w的电源。
至于价格,一般情况下当然是电源越好,价格越高,考虑到可能不间断运行,在电源上就一定要舍得, 并且电源价格实际上也不算太高。
CPU散热
- 水冷:冷却效果好,安静,好看,但是可能漏液,导致BOOM。
- 风冷:冷却效果比不上水冷,声音稍大,安全性较好。
这个就看个人喜好了,如果是实验室,当然还是风冷稳一点,品牌一般推荐猫头鹰。
机箱
机箱的选择可能会简单一点,也就是要一个足够大的机箱,能够放下主板以及其它的硬件就好了。
如果是机房统一管理放置的情况下,一般都是机架式或刀片服务器,可以插在机架上,占用空间少,放便管理。 但是这类服务器机箱一般比较小,放不下普通消费级显卡。所以在这种情况下一般考虑塔式机箱, 也就类似平常PC机的主机。
对于个人组装单CPU型的,一般推荐海盗船AIR540。对于双CPU型的,不知道能否装下主板, 这可以在购买时咨询店家。
双CPU所需的机箱不太清楚,可以在购买时询问一下店家。
最终建议
如果是单CPU的深度学习工作站,那完全可以自己买配件组装:
- 组装过程十分简单。即使没有装过,看看教程也能学会。
- 过程很有意思。
- 对于每天接触电脑的人来说,这些知识也算生活技能了。
但是如果是双CPU,服务器主板,不太建议自己组装(可以买别的商家组好的),主要是:
- 各个配件不熟。
- 配件不好买。
- 商家组好的那种也不算太坑,并且可以询问商家定制化配置,出了问题也好处理。
所有参考资料
A Full Hardware Guide to Deep Learning-Tim Dettmers
What is a PCI-Express Lane?-superuser
LRDIMMs, RDIMMs, and Supermicro’s Latest Twin-AnandTech