# 选择服务器和 GPU

🏷 sec_buy_gpu

深度学习训练通常需要大量的计算。目前,GPU 是深度学习最具成本效益的硬件加速器。与 CPU 相比,GPU 更便宜,性能更高,通常超过一个数量级。此外,一台服务器可以支持多个 GPU,高端服务器最多支持 8 个 GPU。更典型的数字是工程工作站最多 4 个 GPU,这是因为热量、冷却和电源需求会迅速增加,超出办公楼所能支持的范围。对于更大的部署,云计算(例如亚马逊的 P3 G4 实例)是一个更实用的解决方案。

# 选择服务器

通常不需要购买具有多个线程的高端 CPU,因为大部分计算都发生在 GPU 上。这就是说,由于 Python 中的全局解释器锁(GIL),CPU 的单线程性能在有 4-8 个 GPU 的情况下可能很重要。所有的条件都是一样的,这意味着核数较少但时钟频率较高的 CPU 可能是更经济的选择。例如,当在 6 核 4GHz 和 8 核 3.5GHz CPU 之间进行选择时,前者更可取,即使其聚合速度较低。一个重要的考虑因素是,GPU 使用大量的电能,从而释放大量的热量。这需要非常好的冷却和足够大的机箱来容纳 GPU。如有可能,请遵循以下指南:

  1. 电源。GPU 使用大量的电源。每个设备预计高达 350W(检查显卡的峰值需求而不是一般需求,因为高效代码可能会消耗大量能源)。如果电源不能满足需求,系统会变得不稳定。
  2. 机箱尺寸。GPU 很大,辅助电源连接器通常需要额外的空间。此外,大型机箱更容易冷却。
  3. GPU 散热。如果有大量的 GPU,可能需要投资水冷。此外,即使风扇较少,也应以 “公版设计” 为目标,因为它们足够薄,可以在设备之间进气。当使用多风扇 GPU,安装多个 GPU 时,它可能太厚而无法获得足够的空气。
  4. PCIe 插槽。在 GPU 之间来回移动数据(以及在 GPU 之间交换数据)需要大量带宽。建议使用 16 通道的 PCIe 3.0 插槽。当安装了多个 GPU 时,请务必仔细阅读主板说明,以确保在同时使用多个 GPU 时 16×\times 带宽仍然可用,并且使用的是 PCIe3.0,而不是用于附加插槽的 PCIe2.0。在安装多个 GPU 的情况下,一些主板的带宽降级到 8×\times 甚至 4×\times。这部分是由于 CPU 提供的 PCIe 通道数量限制。

简而言之,以下是构建深度学习服务器的一些建议。

  • 初学者。购买低功耗的低端 GPU(适合深度学习的廉价游戏 GPU,功耗 150-200W)。如果幸运的话,大家现在常用的计算机将支持它。
  • 1 个 GPU。一个 4 核的低端 CPU 就足够了,大多数主板也足够了。以至少 32 GB 的 DRAM 为目标,投资 SSD 进行本地数据访问。600W 的电源应足够。买一个有很多风扇的 GPU。
  • 2 个 GPU。一个 4-6 核的低端 CPU 就足够了。可以考虑 64 GB 的 DRAM 并投资于 SSD。两个高端 GPU 将需要 1000 瓦的功率。对于主板,请确保它们具有两个 PCIe 3.0 x16 插槽。如果可以,请使用 PCIe 3.0 x16 插槽之间有两个可用空间(60 毫米间距)的主板,以提供额外的空气。在这种情况下,购买两个具有大量风扇的 GPU。
  • 4 个 GPU。确保购买的 CPU 具有相对较快的单线程速度(即较高的时钟频率)。可能需要具有更多 PCIe 通道的 CPU,例如 AMD Threadripper。可能需要相对昂贵的主板才能获得 4 个 PCIe 3.0 x16 插槽,因为它们可能需要一个 PLX 来多路复用 PCIe 通道。购买带有公版设计的 GPU,这些 GPU 很窄,并且让空气进入 GPU 之间。需要一个 1600-2000W 的电源,而办公室的插座可能不支持。此服务器可能在运行时声音很大,很热。不想把它放在桌子下面。建议使用 128 GB 的 DRAM。获取一个用于本地存储的 SSD(1-2 TB NVMe)和 RAID 配置的硬盘来存储数据。
  • 8 GPU。需要购买带有多个冗余电源的专用多 GPU 服务器机箱(例如,每个电源为 1600W 时为 2+1)。这将需要双插槽服务器 CPU、256 GB ECC DRAM、快速网卡(建议使用 10 GBE),并且需要检查服务器是否支持 GPU 的物理外形。用户 GPU 和服务器 GPU 之间的气流和布线位置存在显著差异(例如 RTX 2080 和 Tesla V100)。这意味着可能无法在服务器中安装消费级 GPU,因为电源线间隙不足或缺少合适的接线(本书一位合著者痛苦地发现了这一点)。

# 选择 GPU

目前,AMD 和 NVIDIA 是专用 GPU 的两大主要制造商。NVIDIA 是第一个进入深度学习领域的公司,通过 CUDA 为深度学习框架提供更好的支持。因此,大多数买家选择 NVIDIA GPU。

NVIDIA 提供两种类型的 GPU,针对个人用户(例如,通过 GTX 和 RTX 系列)和企业用户(通过其 Tesla 系列)。这两种类型的 GPU 提供了相当的计算能力。但是,企业用户 GPU 通常使用强制(被动)冷却、更多内存和 ECC(纠错)内存。这些 GPU 更适用于数据中心,通常成本是消费者 GPU 的十倍。

如果是一个拥有 100 个服务器的大公司,则应该考虑英伟达 Tesla 系列,或者在云中使用 GPU 服务器。对于实验室或 10 + 服务器的中小型公司,英伟达 RTX 系列可能是最具成本效益的,可以购买超微或华硕机箱的预配置服务器,这些服务器可以有效地容纳 4-8 个 GPU。

GPU 供应商通常每一到两年发布一代,例如 2017 年发布的 GTX 1000(Pascal)系列和 2019 年发布的 RTX 2000(Turing)系列。每个系列都提供几种不同的型号,提供不同的性能级别。GPU 性能主要是以下三个参数的组合:

  1. 计算能力。通常大家会追求 32 位浮点计算能力。16 位浮点训练(FP16)也进入主流。如果只对预测感兴趣,还可以使用 8 位整数。最新一代图灵 GPU 提供 4-bit 加速。不幸的是,目前训练低精度网络的算法还没有普及;
  2. 内存大小。随着模型变大或训练期间使用的批量变大,将需要更多的 GPU 内存。检查 HBM2(高带宽内存)与 GDDR6(图形 DDR)内存。HBM2 速度更快,但成本更高;
  3. 内存带宽。当有足够的内存带宽时,才能最大限度地利用计算能力。如果使用 GDDR6,请追求宽内存总线。

对于大多数用户,只需看看计算能力就足够了。请注意,许多 GPU 提供不同类型的加速。例如,NVIDIA 的 Tensor Cores 将操作符子集的速度提高了 5×\times。确保所使用的库支持这一点。GPU 内存应不小于 4GB(8GB 更好)。尽量避免将 GPU 也用于显示 GUI(改用内置显卡)。如果无法避免,请添加额外的 2GB RAM 以确保安全。

:numref: fig_flopsvsprice 比较了各种 GTX 900、GTX 1000 和 RTX 2000 系列的(GFlops)和价格(Price)。价格是维基百科上的建议价格。

浮点计算能力和价格比较
🏷 fig_flopsvsprice

由上图,可以看出很多事情:

  1. 在每个系列中,价格和性能大致成比例。Titan 因拥有大 GPU 内存而有相当的溢价。然而,通过比较 980 Ti 和 1080 Ti 可以看出,较新型号具有更好的成本效益。RTX 2000 系列的价格似乎没有多大提高。然而,它们提供了更优秀的低精度性能(FP16、INT8 和 INT4);
  2. GTX 1000 系列的性价比大约是 900 系列的两倍;
  3. 对于 RTX 2000 系列,浮点计算能力是价格的 “仿射” 函数。

浮点计算能力和能耗
🏷 fig_wattvsprice

:numref: fig_wattvsprice 显示了能耗与计算量基本成线性关系。其次,后一代更有效率。这似乎与对应于 RTX 2000 系列的图表相矛盾。然而,这是 TensorCore 不成比例的大能耗的结果。

# 小结

  • 在构建服务器时,请注意电源、PCIe 总线通道、CPU 单线程速度和散热。
  • 如果可能,应该购买最新一代的 GPU。
  • 使用云进行大型部署。
  • 高密度服务器可能不与所有 GPU 兼容。在购买之前,请检查一下机械和散热规格。
  • 为提高效率,请使用 FP16 或更低的精度。