关于pytorch使用时的一点心得,主要是关于tensor的设备管理问题

在研究论文代码的过程中,pytorch中的模型通常是首先在__init__方法中创建tensor变量以及一些子模型

  • 第一个冷知识:在 PyTorch 中,Tensor 的初始化是在 CPU 上进行的,这是因为大多数计算机都有 CPU,并且在模型初始化阶段通常不涉及到具体的计算,因此可以在 CPU 上进行初始化以提高效率。当输入数据进入模型的 forward 函数时,PyTorch 会自动将其转移到已经指定的设备(如 GPU)上进行计算
  • 第二个冷知识:最好不要在__init__方法中对已创建的变量进行修改、计算等操作(可以初始化),首先可读性会降低,因为__init__方法的作用就只是创建变量并不涉及计算逻辑;其次若进行修改后极有可能会报错,错误有可能是one of the variables needed for gradient computation has been modified by an inplace operation,因此遇到这个问题时可以查看一下是否在__init__中对某个tensor进行了计算操作(但是这个错误也不一定完全是因为这个原因,仅供参考~),我就是将一个tensor运算后并复制给另一个变量,forward中分别对这两个变量进行计算就报错了。改正方法,在__init__方法中仅做创建、初始化操作,然后再单写一个方法获得另一个变量并在forward中调用该方法即可
  • 第三个冷知识:最好不要在__init__方法中显示地对tensor进行cuda()迁移操作,容易造成显存溢出的错误,除非你真的需要在__init__中使用GPU加快计算某些数据(一般用不到),tensor的设备管理最好交给pytorch自己管理
posted @ 2023-04-05 15:04  CodeBunny  阅读(24)  评论(0编辑  收藏  举报