因为之前重装过电脑的conda,要跑一个项目(HLA),所以要重新配置一次pytorch<=1.2.0的环境。
应该是这个项目用了一些旧代码,forward过程是静态的,如果pytorch版本较高,就会报错 RuntimeError: Legacy autograd function with non-static forward method is deprecated. Please use new-style autograd function with static forward method
。
优先用官网指令
conda 和 pip 都尝试过,均显示寻找不到对应版本。
因为是官网上还在的指令,找不到就很奇怪。。。
尝试换源,用国内源,也找不到。
1 | # CUDA 9.2 |
1 | # CUDA 10.0 |
额外下载与安装
好在,在其他地方发现了这个地址。里面是pytorch官网提供的包,也就是上面指令搜索不出来的包。
找到我需要的版本(我win系统的cuda是11.1的,但是每次conda都默认给我装cuda9.2版本。高版本应该能向低兼容,为了省事,我也选择cuda9.2。)
这里有两种gpu版的包,一种标注cu92,另一种没有标注。我使用的是上面没有标注的。
最后检查环境,发现里面有cudatoolkit==9.2,不知道是哪个步骤自动下的。
检查torch情况,一切完美!
torch版本被更改
因为代码有用到torchvision,于是我又用指令自动下载了torchvision。却发现,torch版本又被改变了!一旦更改为高版本,就又不符合要求了。
把自动下载的torchvision卸载,指定下载官方给出的版本torchvision==0.4.0。conda显示找不到0.4.0版本,pip也找不到,但是打印了有的版本:
于是安装torchvision==0.4.1,安装成功,代码成功运行!
安装时的注意点
也发现了配环境中,一些以前的困惑。
更改环境中包的版本
结合以往的经验,安装各种包时会出现一些奇怪现象:比如卸载了某个包,conda list
却还在;比如安装了某个版本的包,conda list
却显示还是原版本;print(torch.__version__)
与conda list
不一致等等。
分析原因,conda可以下载某个包,pip可以下载某个包,两处下载的不同版本的包竟然是共存的!而且有着奇怪的优先关系。
推荐处理方法
如果想更改某个包的版本,尤其是torch这种比较大且比较重要的包,先用 conda uninstall torch
pip uninstall torch
卸载干净,直到conda list
和 import torch
都检测不到包为止。注意有时简单uninstall不能检测到包,需要指定uninstall torch的版本。
往环境中安装新包的速度很快
有时往环境中安装新包,发现速度非常快,一下子就显示成功安装,而且没有出进度条。我合理猜测是我的conda中其他环境中,有一模一样的包,于是可以直接用(不知道是直接引用其他环境,还是复制一份过来)。