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 的权重归一化。
在尝试了很多事情之后,我想我找到了问题所在。显然,CUDNN 库在 PyTorch 中是次优的。我不知道这是 PyTorch 中的错误还是 CUDNN 中的错误,但正在做
torch.backends.cudnn.enabled = False
Run Code Online (Sandbox Code Playgroud)
解决了这个问题。使用上面的代码,使用 GPU 或 CPU 进行训练在同一时期给出了相同的损失。
编辑:
似乎是权重归一化和 CUDNN 的相互作用导致了出错。如果我删除重量归一化,它会起作用。如果我删除 CUDNN,它会起作用。似乎只有组合它们在 PyTorch 中不起作用。