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

时间:2018-01-25 15:02:55

标签: python neural-network gpu pytorch cudnn

我有一个关于时间序列的下一步预测模型,它只是一个GRU,在它上面有一个完全连接的层。当我在50个时期之后使用CPU训练它时,我得到了0.10的损失但是当我用GPU训练时,在50个时期之后损失为0.15。在任何一种情况下,做更多的时代并不能真正降低损失。

为什么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 个答案:

答案 0 :(得分:2)

在尝试了很多事情后,我想我发现了问题。显然,CUDNN库在PyTorch中是次优的。我不知道它是PyTorch中的错误还是CUDNN中的错误但是在做什么

torch.backends.cudnn.enabled = False

解决了这个问题。使用上述线路,使用GPU或CPU进行训练会在同一时期产生相同的损失。

修改

似乎是权重规范化和CUDNN的相互作用导致出现问题。如果我删除重量标准化,它的工作原理。如果我删除CUDNN它的工作原理。似乎只有在组合中它们才能在PyTorch中起作用。