我有一个关于时间序列的下一步预测模型,它只是一个 GRU,上面有一个全连接层。当我在 50 个时期后使用 CPU 训练它时,损失为 0.10,但是当我用 GPU 训练时,50 个时期后损失为 0.15。在这两种情况下,做更多的 epochs 并不能真正降低损失。
为什么在 CPU 上训练后的性能比 GPU 好?
我尝试更改数据和模型的随机种子,这些结果与随机种子无关。
我有:
python 3.6.2
PyTorch 0.3.0
CUDNN_MAJOR 7
CUDNN_次要 0
CUDNN_PATCHLEVEL 5
编辑:
我也使用 PyTorch 的权重标准化 torch.nn.utils.weight_norm
在 GRU 和全连接层上。
最佳答案
在尝试了很多事情之后,我想我找到了问题所在。显然,CUDNN 库在 PyTorch 中是次优的。我不知道这是 PyTorch 中的错误还是 CUDNN 中的错误,但正在做
torch.backends.cudnn.enabled = False
解决了这个问题。使用上面的代码,使用 GPU 或 CPU 进行训练在同一时期给出了相同的损失。
编辑:
似乎是权重归一化和 CUDNN 的相互作用导致了出错。如果我删除重量归一化,它会起作用。如果我删除 CUDNN,它会起作用。似乎只有组合它们在 PyTorch 中不起作用。
关于python - PyTorch:用 GPU 训练比用 CPU 训练同样的东西会产生更严重的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445942/