我想知道Caffe
如何使用多个GPU
,以便我可以决定升级到更强大的新卡,或者只需购买同一张卡并在SLI
上运行。<登记/>
例如,我最好购买一个TitanX 12 GB
,或两个GTX 1080 8 GB
?
如果我将SLI转换为1080s,我的有效内存是否会翻倍?我的意思是我可以运行一个使用12 GB或更多GB的vram的网络吗?或者我只剩下8 GB?
如何在这种情况下使用内存?
如果安装了两张不同的卡(NVIDIA),会发生什么? caffe是否利用可用的内存? (假设一个980和一个970!)
答案 0 :(得分:5)
例如,我最好购买一台TitanX 12 GB或两台GTX 1080 8 GB?如果我将SLI转换为1080s,我的有效内存是否会翻倍?一世 我可以运行一个使用12 GB或更多GB的vram的网络吗? 或者我只剩下8 GB?
不,如果2 GPU和8Gb RAM的effective memory
大小将是8Gb,但effective batch size
将加倍,这将导致更稳定\快速训练。
如果安装了两张不同的卡(NVIDIA),会发生什么? caffe是否利用可用的内存? (假设一个980和 一个970!)
我认为您将被限制在较低的卡上并且可能与驱动程序有问题,因此我不建议您尝试此配置。 同样来自文档:
目前的实施有一个&#34;软&#34;假设设备正在 使用的是同质的。在实践中,任何相同的设备一般 课程应该一起工作,但性能和总体规模是有限的 通过使用的最小设备。例如如果你结合使用TitanX和 GTX980,性能将受到980的限制。混合很多 不同级别的电路板,例如开普勒和费米不受支持。
总结:使用拥有大量RAM的GPU可以训练更深的模型,使用多GPU可以更快地训练单个模型,并且您可以为每个GPU训练单独的模型。我会选择具有更多内存的单GPU(TitanX),因为现在深度网络更多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。
答案 1 :(得分:1)
我不相信Caffe支持SLI模式。这两个GPU被视为 单独的卡片。
当你运行Caffe并添加'-gpu'标志时(假设你正在使用 命令行),你可以指定使用哪个GPU(-gpu 0或-gpu 1 for 例)。您还可以指定多个GPU(-gpu 0,1,3),包括 使用所有GPU(-gpu all)。
当您使用多个GPU执行时,Caffe将执行培训 跨所有GPU,然后合并整个的培训更新 楷模。这有效地加倍(或者如果你有2个以上则更多 GPU)每次迭代的批量大小。
在我的情况下,我开始使用NVIDIA GTX 970(4GB卡)然后 升级到NVIDIA GTX Titan X(Maxwell版本,12 GB)因为 我的模型太大了,无法放入GTX 970.我可以运行一些 两张卡上的小型号(即使它们不相同) 只要该型号完全适合4GB的小卡。 使用标准的ImageNet模型,我可以在两张卡上执行 把我的训练时间缩短了一半。
如果我没记错的话,其他框架(TensorFlow,也许还有 Microsoft CNTK)支持在不同节点之间拆分模型 像你一样有效地增加可用的GPU内存 描述。虽然我没有亲自试过任何一个,我 了解您可以在每层基础上定义图层 执行。
帕特里克
答案 2 :(得分:1)
也许是一个迟到的答案,但caffe支持gpu并行,这意味着你确实可以充分利用两个gpu,但我建议你得到两个相同内存大小的gpu,因为我没有&#39; t think caffe允许您选择每个gpu的批量大小。
至于如何利用内存,使用多个gpu,每个gpu都会获得train_val.prototxt中指定的一批批量大小,因此,如果您的批量大小为16,那么您使用2 gpu&#39; s,你有一个有效的批量大小32。
最后,我知道对于诸如游戏这样的事情,SLI似乎效率低得多,并且通常比拥有单个更强大的GPU更有问题。因此,如果您计划使用GPU不仅仅是深度学习,我建议您继续使用Titan X