在两个不同的GPU中运行相同的深度学习代码时出现非常奇怪的行为

时间:2018-02-04 20:09:06

标签: gpu pytorch

我正在使用pytorch框架训练网络。我的电脑里有K40 GPU。上周,我将1080添加到同一台计算机上。

在我的第一个实验中,我在两个GPU中观察到相同的结果。然后,我在两个GPU上尝试了第二个代码。在这种情况下,我经常"在获得"经常"可怕的结果是1080和#34;完全相同的代码"。

首先,我认为获得如此多样化产出的唯一原因是代码中的随机种子。所以,我修理了这样的种子:

torch.manual_seed(3)
torch.cuda.manual_seed_all(3)
numpy.random.seed(3)

但是,这并没有解决问题。我认为问题不能随意,因为我经常"经常"在K40和""中不断取得好成绩。在1080中获得了不好的结果。此外,我在其他2台计算机和4台其他1080 GPU中尝试了完全相同的代码,并且始终取得了良好的效果。所以,问题必须与我最近插入的1080相关。

我怀疑问题可能与驱动程序或我安装pytorch的方式有关。但是,我只会因为#34;某些"而得到不好的结果仍然很奇怪。实验。对于其他实验,我得到了相同的结果。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

问:你能告诉我这是什么类型的实验..你使用的NN架构是什么?

在下面的提示中,我假设你正在运行一个直接的反向传播神经网络。

  • 您说您的测试实验的学习是“不稳定的”#34; ? NN的培训应该不稳定"。如果是这样,不同的处理器最终会得到不同的结果,受数字精度和舍入误差的影响。 饱和度可能已经发生..检查您的体重值是否已经过大。在这种情况下1)检查你的训练输入和输出是否在逻辑上是一致的,2)在隐藏层中添加更多神经元并再次训练。

  • 检查random()调用是个好主意,但考虑到在backprop NN中有几个地方可以使用random()函数。一些反向支持NN还为训练模式添加动态噪声,以防止权重的早期饱和。如果这种训练噪音被缩放错误,你可能会得到奇怪的结果。如果没有添加噪音或太小,您可能会达到饱和状态。

答案 1 :(得分:1)

我有同样的问题。我只需更改即可解决问题

总和

torch.sum

。请尝试将所有内置功能更改为GPU之一。