我有一个关于时间序列的下一步预测模型,它只是一个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
。
答案 0 :(得分:2)
在尝试了很多事情后,我想我发现了问题。显然,CUDNN库在PyTorch中是次优的。我不知道它是PyTorch中的错误还是CUDNN中的错误但是在做什么
torch.backends.cudnn.enabled = False
解决了这个问题。使用上述线路,使用GPU或CPU进行训练会在同一时期产生相同的损失。
修改强>
似乎是权重规范化和CUDNN的相互作用导致出现问题。如果我删除重量标准化,它的工作原理。如果我删除CUDNN它的工作原理。似乎只有在组合中它们才能在PyTorch中起作用。