PyTorch:用 GPU 训练比用 CPU 训练同样的东西会产生更严重的错误

pat*_*_ai 6 python gpu neural-network cudnn pytorch

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

为什么在 CPU 上训练后的性能比 GPU 好?

我尝试更改数据和模型的随机种子,这些结果与随机种子无关。

我有:

蟒蛇 3.6.2

PyTorch 0.3.0

CUDNN_MAJOR 7

CUDNN_次要 0

CUDNN_PATCHLEVEL 5

编辑:

我还在torch.nn.utils.weight_normGRU 和全连接层上使用 PyTorch 的权重归一化。

pat*_*_ai 6

在尝试了很多事情之后,我想我找到了问题所在。显然,CUDNN 库在 PyTorch 中是次优的。我不知道这是 PyTorch 中的错误还是 CUDNN 中的错误,但正在做

torch.backends.cudnn.enabled = False
Run Code Online (Sandbox Code Playgroud)

解决了这个问题。使用上面的代码,使用 GPU 或 CPU 进行训练在同一时期给出了相同的损失。

编辑:

似乎是权重归一化和 CUDNN 的相互作用导致了出错。如果我删除重量归一化,它会起作用。如果我删除 CUDNN,它会起作用。似乎只有组合它们在 PyTorch 中不起作用。

  • 听起来像是一个严肃的发现。我建议打开一个问题,首先使用 Pytorch,然后可能使用 cuDNN (2认同)