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

标签 python neural-network gpu pytorch cudnn

我有一个关于时间序列的下一步预测模型,它只是一个 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/

相关文章:

python - 在这种情况下, “pre-image”是什么意思?

python - 如何在不相加的情况下组合变量中的两个数字? - Python

python - 使 sphinx 的 autodoc 在参数描述中显示默认值

python:CommandError:您似乎没有安装 'mysql' 程序或在您的路径上

machine-learning - scikit learn如何实现输出层

c++ - 工作维度的重新排序可能会带来巨大的性能提升,但为什么呢?

opengl - GPU 渲染到球体上

python - 我对 keras 图层大小有什么误解?

python - 如何在 GPU 上有效并行化 AlphaZero?

haskell - 是否有在 GPU 上运行的函数式编程语言?