创建onepose虚拟环境时一个看似复杂的报错的解决

这个错误看似先是mdl不应该为None,但是实际却为None,但是后面有一句:在处理这个异常时,出现了另一个异常

当出现这个情况时,实际上应该先处理后面这个异常,这个是gpt告诉我的(见下图):

后面这个异常报的是libcublas.so.11有问题,看似和我之前建立pixel-perfect-sfm的conda虚拟环境时ln -sfm等一系列操作有关系,但是其实不然,当时ln -s和ln -snf都只是建立了一些多余的软链接,理论上不会影响其它项目的环境配置
而当时建立那个虚拟环境时还不小心用了rm -rf,当时想删除软链接,却不小心删除了源文件,当时也已经及时做了补救,补救的方法是在虚拟机装了ubuntu22.04的版本,并且拷贝了删除的文件到删除该文件的ubuntu电脑,所以这个错误操作应该是已经得到补救了

而这个onepose异常的原因,问了一下gpt,见下图,其实是cudatoolkit的版本和cublas的版本有关:

我知道cudatoolkit是虚拟环境的cudatoolkit,版本是10.2,所以接下来我需要确认cublas的版本

chatgpt给了我很多有用的命令来确认cublas的版本:

我尝试了ldd命令,然后问了chatgpt ldd命令的具体作用:


第一条,先说,可能是cublas和cudatoolkit版本不匹配,导致的错误
第二条说卸载cudatoolkit或者卸载cublas

chatgpt 4.0的逻辑性和分析能力真的很不错


我把gpt给的命令都试了,然后主要有几点:

  • grep cuda确实是anaconda环境里的cuda(onepose 官方配置是10.2的版本)
  • 然后我用ldd命令查看了onepose的conda环境的libcublas.so.11和/usr/local/cuda的libcublas.so.11,发现这两个libcublas.so.11其实都是软链接(上图,它们是指向别的东西的,可能是链接,也可能是实际的文件,总之,它们本身是链接),链接指向的都是同一个libcublas.so.11,而这个实际的libcublas.so.11文件在/usr/local/cuda/lib64/libcublasLt.so.11,而从ubuntu文件系统去查看这个libcublasLt.so.11,会发现其实/usr/local/cuda也是一个软链接,而如果通过快捷键ctrl I查看其属性,发现/usr/local/cuda其实指向的是11.3版本的cuda(直接从英伟达官方下载安装的cuda):

这说明了什么!!cublas来自英伟达官方下载安装的cuda,而要解决的错误是cublas和虚拟环境的cudatoolkit版本不匹配,因此也就是英伟达官方下载安装的cuda和虚拟环境的cudatoolkit不兼容,那么解决方式就是两种:

一种是从英伟达官方下载安装10.2版本的cuda,然后通过ln -s将/usr/local/cuda这个文件夹链接到10.2版本的cuda文件夹,这样虚拟环境和cublas的版本都是10.2
还有一种方法是卸载虚拟环境10.2版本的cudatoolkit,重新pip一个和11.3版本的cublas能够兼容的cudatoolkit(pytorch==xxx+cu113)
而其实cudatoolkit只要是11.x,就能和11.3版本的cublas兼容:

因此我选择了第二种方法,然后真的成功解决了,跑通了。。。gpt帮了大忙了!!!

posted @ 2024-01-27 23:06  千里夫人  阅读(37)  评论(0编辑  收藏  举报