在调用torch.cuda.is_available时,有如下报错:
cuda initialization: The Nvidia driver on your system is too old.
事情的发展是这样的:
1. 服务器的CUDA版本是10.1,仅支持pytorch版本最高1.7;前几天跑项目需要用到比较新的框架,pytorch版本需要在1.9以上。由于我之前安装CUDA环境时曾遭受过重创,故不想动CUDA的版本。此为背景。
2. 由于不想动CUDA版本又需要安装pytorch1.9,我想尝试一下在CUDA=10.1的情况下安装pytorch=1.9会发生什么。遂使用conda create一个带有python3.7的新环境,并在这个环境下直接使用
pip install torch==1.9
安装指定版本的torch。安装完毕后毫无意外的显示CUDA版本过低。
3. 本以为事情已经告一段落了,结果接下来的发生的情形让我整个人抓狂。
-- torch无法使用
【卸载1.9版torch后重新安装1.7torch,依旧显示上图CUDA报错的情况】
-- annaconda环境全部崩溃
【其他环境全部发生了改变,上述操作全部是在新环境1内进行的,结果activate老环境1老环境2老环境3,发现里面的pytorch和python版本全部和新环境1一样】
【对任意一个环境(包括再次新建环境)进行pip install,其他所有环境全部随之改变???这种在网上完全找不到类似的情况】
现在可好了,安装过一遍torch1.9,就算之后再回到1.7,整个服务器所有的环境都没有办法使用torch.cuda了,包括之前在1.7能正常运行的代码。。。
4. 痛定思痛,在勉强控制好一度要摔电脑的心情下,开始百度如何解决"The Nvidia driver on your system is too old."的问题【前提是不升级CUDA,之前升级CUDA整个服务器完全崩溃的过去还历历在目,现在只是pytorch的cuda不能访问了,至少还能随意的pip install】,尝试过无限多的无用功(此处省略N万字+N小时)。终于找到了出现问题的(部分)原因及解决方案:
-- 删除torch=1.9再安装torch=1.7后无法访问cuda的原因:
在安装过高版本torch后,之后安装torch时默认的cuda版本都与该版本对齐。也就是说,1.9的torch搭配cuda=10.2,之后再次安装的torch==1.7和1.5都默认搭配cuda=10.2,导致出现上述问题。
-- 解决方案:
在pytorch官网下载对应cuda版本的安装包进行安装,而不要再用pip进行安装了。具体安装命令如下:
pip3 install torch==1.7 torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu101
这样下载下来的就是CUDA=10.1对应的1.7版pytroch了。
-- 尚未解决:
conda环境崩溃,一个环境变其他所有环境变,目前还不知道怎么解决。
总结:
每个已解决的Error背后不知道有多少的血和泪。。。这个BUG让我付出了近一天的时间(当然也怪自己经验太少),并获得了一个完全崩溃的conda环境。
如果你看到这里,请一定要记住,只要代码能运行:
不要乱动环境!
不要乱动环境!
不要乱动环境!