【问题标题】:Will adding GPU cards automatically scale tensorflow usage?添加 GPU 卡会自动扩展 tensorflow 的使用吗?
【发布时间】:2017-12-20 11:54:50
【问题描述】:

假设我可以在我的 GTX 1070 卡上使用 tensorflow 训练样本大小 N、批量大小 M 和网络深度 L。现在,假设我想用更大的样本 2N 和/或更深的网络 2L 进行训练,并且出现内存不足错误。

插入额外的 GPU 卡是否会自动解决此问题(假设所有 GPU 卡的内存总量足以容纳批次和梯度)?还是纯tensorflow不可能?

我听说有比特币或以太坊矿工,可以用多个 GPU 卡建造矿场,而且这个矿场的挖矿速度会更快。

矿场在深度学习方面的表现也会更好吗?

【问题讨论】:

  • AFAIK,在 cuda 中,您可以选择用于特定程序的 gpu。所以,我想,不,它不会扩展。
  • 为什么要平均梯度?

标签: tensorflow deep-learning gpu scalability


【解决方案1】:

插入额外的 GPU 卡会自动解决这个问题吗?

没有。您必须更改 Tensorflow 代码以显式计算不同设备上的不同操作(例如:在每个 GPU 上计算单个批次的梯度,然后将计算出的梯度发送到协调器,该协调器累积接收到的梯度并更新平均这些梯度的模型参数)。

此外,Tensorflow 非常灵活,允许您为每个不同的设备(或不同的远程节点,都是一样的)指定不同的操作。 您可以在单个计算节点上进行数据扩充,并让其他计算节点处理数据而不应用此功能。您只能在一个设备或一组设备上执行某些操作。

纯tensorflow不可能吗?

使用 tensorflow 是可能的,但您必须更改为单个训练/推理设备编写的代码。

我了解到,有比特币或以太坊矿工可以使用多个 GPU 卡构建矿场,并且该矿场的挖矿速度会更快。 矿场是否也会在深度学习方面表现更好?

使用 POW(工作证明)工作的区块链需要使用类似蛮力的方法来解决难题(它们使用不同的输入计算大量哈希,直到找到有效的哈希)。

这意味着如果您的单个 GPU 可以猜测 1000 哈希/秒,则 2 个相同的 GPU 可以猜测 2 x 1000 哈希/秒。

GPU 正在执行的计算完全不相关:GPU:0 生成的数据不被 GPU:1 使用,并且计算之间没有同步点。这意味着一个 GPU 所做的任务可以由另一个 GPU 并行执行(显然每个 GPU 具有不同的输入,因此设备计算哈希来解决网络给出的不同问题)

回到 Tensorflow:一旦您修改了代码以使用不同的 GPU,您就可以更快地训练您的网络(简而言之,因为您使用的是更大的批次)

【讨论】:

  • 为什么要平均梯度?
  • 因为每个 GPU 都在自己的批次上计算梯度,所以您希望在平均方向上更新模型参数(这只是小批量梯度下降的大规模推广。而不是做梯度一个小批量的下降,你可以对几个小批量进行梯度下降)
  • 哦,我搞错了。总梯度仍然是gradient_average * n_gpu。并且每个 GPU 上的每个模型都由gradient_average 应用,而不是total_gradient
猜你喜欢
  • 2019-05-24
  • 2019-10-03
  • 2018-09-11
  • 2021-04-26
  • 2019-10-04
  • 2018-11-14
  • 2012-04-09
  • 2023-02-14
  • 1970-01-01
相关资源
最近更新 更多