基于pytorch的代码在GPU和CPU上训练时,训练输出结果不同问题

2022-10-20 11:37:11

最近打算将代码放在GPU上跑,但是每次跑出来的结果都和CPU跑出来的结果不同,代码是完全一样的,为什么会出现这个问题呢?

这是CPU(上)GPU(下)运行结果,可以看出来第一次迭代就不同的结果。分析了很久,还以为是GPU浮点运算误差导致的,结果最后发现是随机种子产生的随机数不同。这里就贴一下我遇到的随机数种子问题吧。

在CPU上我本来是这样设置的。 这里是在CPU上运行的,所以将参数设置为的是使用CPU产生的随机数,就是这里,将代码放在GPU上跑时,这里的device是GPU,是由GPU产生的随机数,所以这个语句导致的就是随机数产生不一样,即使随机种子一样的,但是不同device产生了不同的随机数。

为了解决这个问题只需要把代码改一下就行,如上图,这里表示将参数指定到CPU或者GPU上,但是参数的生成都是使用CPU生成的。在CPU上跑,那么就是CPU生成,CPU使用,但是在GPU上跑的时候也是由CPU生成,但是参数搬到了GPU上,这里主要是使随机数的产生都是由CPU产生。问题解决,这个问题虽然不难,但是也需要注意一下。

  • 作者:toroxy
  • 原文链接:https://blog.csdn.net/toro12306/article/details/117624166
    更新时间:2022-10-20 11:37:11