PyTorch:使用GPU进行训练比使用CPU训练相同的内容产生更差的错误

7
我在时间序列上有一个下一步预测模型,它只是一个GRU,并在其顶部添加了一个全连接层。当我使用CPU进行训练时,在50个epochs后,损失为0.10,但是当我使用GPU进行训练时,50个epochs后的损失为0.15。在任何情况下,更多的epochs并不能降低损失。
为什么在CPU上训练后性能比GPU更好?
我尝试更改数据和模型的随机种子,这些结果与随机种子无关。
我有:
Python 3.6.2
PyTorch 0.3.0
CUDNN_MAJOR 7
CUDNN_MINOR 0
CUDNN_PATCHLEVEL 5
编辑:
我还在GRU和全连接层上使用了PyTorch的权重归一化torch.nn.utils.weight_norm。
1个回答

7

经过尝试,我认为我找到了问题所在。显然,在PyTorch中,CUDNN库不太优化。我不知道这是PyTorch的一个bug还是CUDNN的一个bug,但是做

torch.backends.cudnn.enabled = False

解决了问题。有了上述方法,使用GPU或CPU进行训练,在相同的epoch中给出相同的loss。

编辑:

看起来是权重归一化和CUDNN之间的交互导致问题出现。如果我去除权重归一化,它就可以正常工作。如果我去除CUDNN,它也可以正常工作。看起来只有在组合使用PyTorch时它们才无法正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接