在 CPU 和 GPU 之间进行选择以训练神经网络

数据挖掘 神经网络 深度学习 显卡
2021-10-07 21:01:45

我已经看到关于 GPU 的“开销”的讨论,对于“小型”网络,在 CPU(或 CPU 网络)上训练实际上可能比在 GPU 上更快。

“小”是什么意思?

例如,具有 100 个隐藏单元的单层 MLP 会“小”吗?

对于循环架构,我们对“小”的定义会改变吗?

在决定是在 CPU 还是 GPU 上进行训练时,是否还有其他标准需要考虑?

编辑1:

我刚刚发现了一篇博文(可能已经过时了?它是从 2014 年开始的):

“...大多数网卡 [s] 仅适用于向 CPU 注册的内存,因此两个节点之间的 GPU 到 GPU 传输将是这样的:GPU 1 到 CPU 1 到网卡 1 到网卡 2 到 CPU 2 到 GPU 2。这意味着,如果一个人选择慢速网卡,那么单台计算机可能没有加速。即使使用快速网卡,如果集群很大,与之相比,甚至无法从 GPU 获得加速到 CPU,因为 GPU 的工作速度太快,以至于网卡跟不上它们。

这就是为什么许多像谷歌和微软这样的大公司正在使用 CPU 而不是 GPU 集群来训练他们的大型神经网络的原因。"

所以在某些时候,根据这篇文章,使用 CPU 可能会更快。现在还是这样吗?

编辑 2:是的,那篇博文很可能已经过时了,因为:

现在看来,一个节点内的 GPU 是通过 PCIe 总线连接的,因此通信可以以大约 6GiB/s 的速度进行。(例如:https ://www.youtube.com/watch?v=el1iSlP1uOs ,大约 35 分钟)。演讲者暗示这比从 GPU1 到 CPU 再到 GPU2 更快。这意味着网卡不再是瓶颈。

3个回答

与其他一些答案不同,我强烈建议不要总是不加思索地在 GPU 上进行训练。这是由对图像和文本使用深度学习方法驱动的,其中数据非常丰富(例如很多像素 = 很多变量),并且模型同样具有数百万个参数。对于其他域,情况可能并非如此。

“小”是什么意思?例如,具有 100 个隐藏单元的单层 MLP 会“小”吗?

是的,按照现代标准,这绝对是非常小的。除非您有一个非常适合训练的 GPU(例如 NVIDIA 1080 或 NVIDIA Titan),否则我不会惊讶地发现您的 CPU 更快。

请注意,神经网络的复杂性还取决于输入特征的数量,而不仅仅是隐藏层中的单元数量。如果您的隐藏层有 100 个单位,并且数据集中的每个观察值都有 4 个输入特征,那么您的网络很小(约 400 个参数)。如果每个观察结果都有 1M 输入特征,就像在某些医学/生物技术环境中一样,那么您的网络在参数数量方面是相当大的。对于我回答的其余部分,我假设您的输入功能很少。观察。

我发现比较 CPU 与 GPU 性能的一个很好的例子是当我使用强化学习训练一个扑克机器人时。对于强化学习,你通常不希望你的神经网络中有那么多层,我们发现我们只需要几个参数很少的层。此外,输入特征的数量非常少。最初我在 GPU (NVIDIA Titan) 上进行训练,但由于强化学习需要大量迭代,所以花了很长时间。幸运的是,我发现在我的 CPU 上进行训练反而使我的训练速度提高了 10 倍!这只是说 CPU 有时更适合训练。

在决定是在 CPU 还是 GPU 上进行训练时,是否还有其他标准需要考虑?

重要的是要注意,在 GPU 上,您总是希望通过增加批量大小来填满整个 GPU 内存,而在 CPU 上并非如此。在 CPU 上,批量大小的增加将增加时间 pr。批。因此,如果拥有非常大的批量大小对您很重要(例如由于非常嘈杂的信号),那么使用 GPU 可能会有所帮助。我在实践中没有经历过这种情况,通常小批量是首选。

CPU 是分公司的经理,他什么都可以做,但除了委派任务之外,他的能力并不强。但是,GPU 是隐藏在您机器中的专用数学家。如果您正在执行任何数学繁重的过程,那么您应该使用您的 GPU。总是。

如果您使用任何流行的机器学习编程语言(例如 python 或 MATLAB),它是一条代码告诉您的计算机您希望这些操作在您的 GPU 上运行。

您还应该确保使用机器的所有内核。这意味着利用并行计算。特别是对于可以独立完成操作的神经网络,这将极大地提高你的速度。

我将首先引用类似问题的一些引用:

当谈到矩阵运算时,您不会三思而后行,您总是会选择 GPU。来源

GPU 中的并行架构非常适合向量和矩阵运算。 来源

因此,如果您通读这些问题,您会发现无论哪种情况,他们都建议使用 GPU;它总是会提供一些改进。

您可能已经读过“小型”网络应该使用 CPU 进行训练的原因是,为小型网络实施 GPU 训练可能比简单地使用 CPU 训练需要更多时间——这并不意味着 GPU 会更慢。

一个 100 个隐藏单元的网络有点小,相对于外面的深度网络,我称之为小网络。循环架构(大部分)具有比前馈网络更多的突触,因此 100 个隐藏单元的 RNN 比 100 个隐藏单元的 FFN“更大”。