在尝试寻找专门用于人工智能的服务器机架和主板时,我被提示回答这个问题。我自然去了超微网站。在那里,支持“人工智能”类别中最大 GPU的机箱+主板最多可以支持 8 个。此外,Nvidia DGX-1 也只有 8 个 Tesla P100 GPU。顺便说一句,我上次检查的 Matlab 不支持超过 8 个 GPU。
那么,超过 8 个 GPU 是否适用于 DL?我会参考 Caffe、CNTK、Tensorflow 和 Torch7。
在尝试寻找专门用于人工智能的服务器机架和主板时,我被提示回答这个问题。我自然去了超微网站。在那里,支持“人工智能”类别中最大 GPU的机箱+主板最多可以支持 8 个。此外,Nvidia DGX-1 也只有 8 个 Tesla P100 GPU。顺便说一句,我上次检查的 Matlab 不支持超过 8 个 GPU。
那么,超过 8 个 GPU 是否适用于 DL?我会参考 Caffe、CNTK、Tensorflow 和 Torch7。
我最近对这个主题做了一些研究。这一切都归结为并行化。
基本上有两种方法可以做到这一点:模型并行化或批量并行化。
模型并行化是指在多个 GPU 之间按层拆分模型。据我所知,您不能在 GPU 之间拆分层,因此 8 个 GPU 将服务于 8 个非常广泛的层。TensorFlow 支持这种方法。在我看来,超过 6 个这样没有意义。
批处理并行化是指您在每个 GPU 上并行运行整个模型,然后拆分批处理并并行处理。这是通过定义一个更大的批次来完成的,该批次将被拆分并在拆分后成为所需的批次大小。在这种情况下,批量拆分和更新权重是在 CPU 上完成的(在 Tensorflow 的情况下),并且在 3 个 GPU 之后,任何额外的 GPU 对训练速度都只有边际改进(根据报告)。所以在这里,即使是 4 也没有意义,而 8 简直是疯了。 这是批处理并行化的示例。
或者,如果你擅长编码,你可能想看看这篇论文,第 3.5 节解释了如何使用 8 个 GPU 来服务于 4 层 LSTM 网络。也许你可以做这样的事情来利用 DGX-1,但据我所知,Tensorflow 不支持将一个层拆分为多个 GPU。我的结论是,使用 8 个 GPU 已经非常困难,超过这个总线速度就会成为瓶颈。
扩展:
我仔细检查了总线速度,我错了,应该没有问题。训练中消耗的大部分时间是反向传播的计算工作。
实际上 PCIe 速度受 CPU 和主板芯片组的限制。CPU 具有由主板分配的 PCIe 通道。目前最强的单 CPU 是拥有 40 条通道的 Broadwell-E(Skylake 传闻有 44 条)。Mobo 将 x16 或 x8 带宽分配给 PCIe 外围设备。因此,使用 40 通道 CPU,您可以运行 2 个 x16 (2 * 16 = 32 < 40) 的卡或 5 个 x8 (5 * 8 = 40) 的卡。这里需要提到的是,M.2 也使用 PCIe 通道,因此对于后一个选项忘记了和 M.2 驱动器。单 CPU 系统不会占用 8 个 GPU,这就是他们在 DGX-1 中需要双 CPU 的原因。下一个限制是主板芯片组。目前最强大的是X99和C6系列。X299 将在下周公布,如果有记忆的话,可能很快就会有 C6 替代品。
由于 PCIe 速度不是机器学习的瓶颈,因此您的问题的更新答案将是 GPU 越多越好。使用 PCIe 3.0 在 x8 上的限制似乎是 5,但由于无法在 GPU 之间拆分层,因此很少需要更多。(并且仍然有意义的最深 NN 可能被认为是 5-6 层。)