【问题标题】:nerual networks: gpu vs no-gpu神经网络:gpu vs no-gpu
【发布时间】:2017-04-25 21:16:36
【问题描述】:

我需要将循环神经网络作为语言模型进行训练,因此我决定使用带有 theano 后端的 keras。使用带有一些显卡的普通PC而不是不能进行gpu计算的“酷”服务器机器会更好吗? 是否存在边界(可能由 NN 的架构和训练数据量给出)将“cpu-learnable”问题与可以(在合理时间内)完成的问题区分开来只使用gpu?

(我可以访问我工作的公司的旧生产服务器。它有 16 个内核,大约 49GB 的可用 RAM,所以我以为我已经准备好接受培训了,现在我正在阅读关于 gpu 优化 theano 正在做的事情,我我想我基本上没有它就搞砸了。)

编辑

我刚刚遇到了这个article,Tomáš Mikolov 说他们在 10 天内成功地训练了一个具有 1024 个状态的单层循环神经网络,同时只使用了 24 个 CPU,没有使用 GPU。

【问题讨论】:

  • 我不知道有任何人在 CPU 上训练 NN。您的 CPU 可能有 16 个内核,但即使是像 GeForce GT 430 这样的破旧 GPU,也有 96 个 (CUDA) 内核。因此,GT 430(2010 年推出!)仍将比新的 2016 年英特尔至强处理器更快。 (无论如何,不要获得 GT 430,那只是我在 Google 上找到的最古老的 GPU 之一)
  • 谢谢!我想这个问题可以重述为“可以在 GPU 上完成多少 NN 训练”……很高兴知道“没有人”这样做。对我来说完美的答案,虽然让我很难过:)
  • 永远无法确定 96 个 CUDA 内核会胜过 16 个 CPU 内核,除非您使用您正在使用的神经网络对其进行基准测试。使用 SSE 在 CPU 上可以轻松处理 100 个节点的单隐藏层 NN。将数据传入和传出 GPU 所需的时间可能会成为此类简单网络的瓶颈。

标签: machine-learning neural-network gpu theano keras


【解决方案1】:

有没有界限

将 CPU 与 GPU 分开的是内存访问。如果您经常访问神经网络中的值,CPU 会做得更好,因为它可以更快地访问 RAM。如果我没记错的话,获取更新(SGD、RMSProp、Adagrad 等)需要访问这些值。

当计算量大于内存访问时,建议使用 GPU,例如训练深度神经网络。

只有利用 gpu 才能(在合理的时间内)完成

不幸的是,如果你想解决这样一个难题,Theano 将是一个糟糕的选择,因为你被限制在单台机器上运行。尝试其他允许跨机器在多个 CPU 和 GPU 上运行的框架,例如 Microsoft CNTK 或 Google TensorFlow。

认为我基本上搞砸了

差异(可能是加速或减速)不会那么大,具体取决于神经网络。此外,在您的机器上运行神经网络计算可能会妨碍您的工作。所以你最好使用那个额外的服务器并让它变得有用。

【讨论】:

  • GPU 有自己独立的 RAM,通常非常快 - 例如Titan X 板载 12GB DDR5 内存。
  • 但是图形 RAM 上的内容必须转移到 RAM 上,以便非 Theano Python 代码在其上工作,而且各种梯度下降方法似乎都是这种情况。
  • 是的,确实如此:将内容从 CPU RAM 移动/复制到 GPU RAM 很慢。但是您将所有权重和参数复制到 GPU 一次,因此您不会在每次迭代中都这样做。 (至少如果您的模型确实适合您的 GPU - 如果不适合,那么您就不走运了...)
  • 慢,我总是听到人们谈论从 CPU 和 GPU 来回复制数据有多慢。虽然不必要的糟糕实现可能会破坏性能,但请意识到它一点也不慢。现代显卡可以通过 pci 传输 32 Gb/s,即使对于 Titan X,这意味着填充图形内存需要 300 毫秒。我想说瓶颈通常在其他地方,例如,如果数据是从磁盘加载的。
猜你喜欢
  • 2019-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 2011-01-12
  • 2020-08-07
  • 2015-05-17
  • 2017-08-21
  • 2015-05-16
相关资源
最近更新 更多