PyTorch:用 GPU 训练比用 CPU 训练同样的东西产生更严重的错误
PyTorch: training with GPU gives worse error than training the same thing with CPU
我有一个时间序列的下一步预测模型,它只是一个 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
。
在尝试了很多事情后,我想我找到了问题所在。显然,CUDNN 库在 PyTorch 中不是最优的。我不知道这是 PyTorch 中的错误还是 CUDNN 中的错误但是正在做
torch.backends.cudnn.enabled = False
解决问题。通过上面的代码,使用 GPU 或 CPU 进行训练会在同一时期给出相同的损失。
编辑:
似乎是权重归一化和 CUDNN 的相互作用导致了错误。如果我删除权重归一化,它就会起作用。如果我删除 CUDNN,它会起作用。似乎只有结合使用它们才能在 PyTorch 中工作。
我有一个时间序列的下一步预测模型,它只是一个 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
。
在尝试了很多事情后,我想我找到了问题所在。显然,CUDNN 库在 PyTorch 中不是最优的。我不知道这是 PyTorch 中的错误还是 CUDNN 中的错误但是正在做
torch.backends.cudnn.enabled = False
解决问题。通过上面的代码,使用 GPU 或 CPU 进行训练会在同一时期给出相同的损失。
编辑:
似乎是权重归一化和 CUDNN 的相互作用导致了错误。如果我删除权重归一化,它就会起作用。如果我删除 CUDNN,它会起作用。似乎只有结合使用它们才能在 PyTorch 中工作。