【问题标题】:How are multiple gpus utilized in Caffe?Caffe 中如何使用多个 GPU?
【发布时间】:2017-02-20 17:21:57
【问题描述】:

我想知道Caffe如何利用多个GPUs,以便我可以决定升级到更强大的新卡,或者只是购买同一张卡并在SLI上运行。
例如,我最好买一个 TitanX 12 GB 还是两个 GTX 1080 8 GB
如果我去SLI 1080s,我的有效记忆会翻倍吗?我的意思是我可以运行一个需要 12 GB 或更多 GB 虚拟内存的网络吗?还是我只剩下 8 GB 了? 同样,在这种情况下如何使用内存? 如果安装了两个不同的卡(都是 NVIDIA)会发生什么? caffe 是否使用相同的可用内存? (假设一个 980 和一个 970!)

【问题讨论】:

    标签: caffe


    【解决方案1】:

    例如,我最好购买一台 TitanX 12 GB 还是两台 GTX 1080 8 GB?如果我去SLI 1080s,我的有效记忆会翻倍吗?我 意思是我可以运行一个需要 12 GB 或更多 GB 虚拟内存的网络吗? 还是我只剩下 8 GB 了?

    不,effective memory 的大小在 2 个 GPU 和 8Gb RAM 的情况下将为 8Gb,但effective batch size 将加倍,这将导致更稳定\更快的训练。

    如果安装了两个不同的卡(都是 NVIDIA)会发生什么? caffe 是否使用相同的可用内存? (假设一个 980 和 一个970!)

    我觉得你会受限于低卡,可能驱动有问题,所以不建议尝试这个配置。 同样来自文档:

    当前的实现有一个“软”假设,即设备正在 使用的是同质的。在实践中,任何相同通用的设备 类应该一起工作,但性能和总大小是有限的 通过正在使用的最小设备。例如如果您将 TitanX 和 GTX980,性能会受到 980 的限制。 不同级别的董事会,例如不支持开普勒和费米。

    总结:使用具有大量 RAM 的 GPU,您可以训练更深层次的模型,使用多个 GPU,您可以更快地训练单个模型,还可以为每个 GPU 训练单独的模型。我会选择具有更多内存(TitanX)的单 GPU,因为现在的深度网络更多是 RAM 受限的(例如 ResNet-152 或一些语义分割网络),并且更多的内存将有机会运行更深的网络和更大的批量大小,否则如果你有一些适合单个 GPU (GTX 1080) 的任务,您可以购买 2 或 4 个以加快速度。

    这里还有一些关于 Caffe 中多 GPU 支持的信息:

    当前实现使用树缩减策略。例如如果 系统中有4个GPU,0:1、2:3会交换梯度,那么 0:2(树顶)将交换梯度,0 将计算 更新模型,0->2,然后是 0->1、2->3。

    https://github.com/BVLC/caffe/blob/master/docs/multigpu.md

    【讨论】:

      【解决方案2】:

      我不相信 Caffe 支持 SLI 模式。两个 GPU 被视为 单独的卡片。

      当您运行 Caffe 并添加“-gpu”标志时(假设您使用的是 命令行),您可以指定要使用的 GPU(-gpu 0 或 -gpu 1 例子)。您还可以指定多个 GPU (-gpu 0,1,3),包括 使用所有 GPU (-gpu all)。

      当您使用多个 GPU 执行时,Caffe 将执行训练 跨所有 GPU,然后合并跨所有 GPU 的训练更新 楷模。这实际上是翻倍(如果您有超过 2 个 GPU)每次迭代的批量大小。

      就我而言,我从 NVIDIA GTX 970(4GB 卡)开始,然后 升级到 NVIDIA GTX Titan X(Maxwell 版本,12 GB),因为 我的模型太大,无法装入 GTX 970。我可以运行一些 两张卡上的较小型号(即使它们不一样) 只要该型号完全适合较小卡的 4GB。 使用标准 ImageNet 模型,我可以在两张卡上执行 并将我的训练时间减半。

      如果我没记错的话,其他框架(TensorFlow 和也许 Microsoft CNTK)支持在不同节点之间拆分模型以 像你一样有效地增加可用的 GPU 内存 描述。虽然我没有亲自尝试过任何一种,但我 了解您可以在每层的基础上定义该层的位置 执行。

      帕特里克

      Link

      【讨论】:

      • 这个想法是否也适用于测试模式? caffe.set_mode_gpu() caffe.set_device(0) caffe 是否支持caffe.set_device 中的多个 GPU?
      • @FäridAlijani :它是很久以前的事了!但如果我没记错的话,Caffe 在测试时不支持多个 GPU。如果我没记错的话,set_device 只接受一个表示单个 gpu 的标识符
      【解决方案3】:

      也许是一个迟到的答案,但 caffe 支持 gpu 并行性,这意味着您确实可以充分利用两个 gpu,但我确实建议使用两个相同内存大小的 gpu,因为我认为 caffe 不允许您选择每个批次大小显卡。

      至于内存的使用方式,使用多个 gpu,每个 gpu 都会获得一批批大小,如您的 train_val.prototxt 中指定的那样,因此,如果您的批大小为 16 并且您使用的是 2 个 gpu,您将拥有有效批量大小为 32。

      最后,我知道,对于诸如游戏之类的事情,SLI 似乎比拥有一个更强大的单一 GPU 效率低得多,而且问题往往要多得多。因此,如果您计划将 GPU 用于深度学习以外的领域,我建议您仍然选择 Titan X

      【讨论】:

        猜你喜欢
        • 2018-04-01
        • 1970-01-01
        • 2020-12-07
        • 2017-07-13
        • 2017-09-04
        • 2023-03-09
        • 2019-06-10
        • 1970-01-01
        • 2018-11-23
        相关资源
        最近更新 更多