前言
随着以后要学习的项目越来越多,不同的工程用不同的环境是早晚面对的事。
之前做的少,一直都是许多项目都用这一个envs,很难管理。今天花了一天时间,就想做一件事,重新弄一下referformer和deformdetr的这两个项目的环境,给他们分开。
正题
拿到一个项目,第一件事是根据install.md里的要求,安装对应的版本环境。一般的步骤都是
1先 using Anaconda to create the conda environment.
2conda install pytorch and torchvision and ! cudatoolkit
3install other necessary packages
4compiling CUDA operators
首先我分别按照两个项目各自要求的torch torchvision 版本安装各自的环境,服务器系统的cuda 运行版本是10.2 (通过运行 nvcc -V 来看当前运行版本)
需要注意的第一个坑是,
在执行一个新的工程的时候,按照它的md要求安装对应版本的pytorch torch vision时,,一定要把cudatoolkit也加上,而且是改成nvcc -V指定的版本。
比如我nvcc -V是10.2,那我安装deformable detr环境的时候需要输入下面的指令(从pytorch官网找conda指令的对应的pytorch、torchvision、cudatoolkit版本的指令)
原md是
conda install pytorch=1.5.1 torchvision=0.6.1 cudatoolkit=9.2 -c pytorch
需要将cudatoolkit改成10.2
所以是
conda install pytorch=1.5.1 torchvision=0.6.1 cudatoolkit=10.2 -c pytorch
否则在Compiling CUDA operators(比如执行sh ./make.sh 或 python setup.py build install 时候),将会报第一个错:
The detected CUDA version (10.2) mismatches the version that was used to compile
PyTorch (11.5). Please make sure to use the same CUDA versions.
因为nvcc是我当前系统运行时的cuda版本,是10.2。如果我在下载pytorch、torch vision的时候没有指定下载cudatoolkit的话,会出现下面这样,cuda会乱?而这个文件貌似是编译pytorch时对应的cuda版本,所以可能会出现上面这种报错。
pytorch pytorch::pytorch-1.11.0-py3.9_cuda11.~ --> conda-forge::pytorch-1.11.0-cuda112py39ha0cca9b_202 None
torchvision pytorch::torchvision-0.12.0-py39_cu115 --> conda-forge::torchvision-0.13.0-cuda112py39hd2c45b6_0 None
所以!一定先根据nvcc -V的cuda版本,从pytorch官网找对应的torch版本的指令!
************************************************华丽分割线**********************************************
跳过这个坑之后,继续尝试Compiling CUDA operators时还会有错,一直面临与ninja -v有关的报错,在cpp_extension。(看到好多说改这个文件里的ninja --version 但是对我来说不管用)
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.
The above exception was the direct cause of the following exception:
因为每次这个报错都会丢出超级长的内容,不知道到底要从哪里找源头,所以这个问题困扰了我快要一天,偶然间,耐心再看看这个报错,终于意外找到了切入点,搜索了下面这句话
build.ninja... Compiling objects... Allowing ninja to set a default number of workers...
(因为不管我按照md里的要求,安装多少遍我的环境里的torch torchvision cudatoolkit,只要Compiling CUDA operators就会报与ninja相关的错,所以意外找到了上面搜索的关键词源头)
所以,第二个坑是执行Compiling CUDA operators里 的相关文件时候,总是报上面的错。最终在下面的链接里找到了解决方案。
make.sh · Issue #10 · fundamentalvision/Deformable-DETR · GitHub
即,在执行类似 sh ./make.sh操作前,加绿线这句话!
我当前的cuda是10.2,执行完这句话以后貌似cuda变成了11.0?(因为紧接着我配置referformer的环境时,在执行python setup.py build install之前,也加了这句话,就会又报错 坑一 的问题),所以这句话的作用是什么??(在referformer里,我在执行 python setup.py build install 之前,也加了这句export CUDA_HOME=/usr/local/cuda-10.2,不过需要把11.0变成我nvcc对应的10.2的,然后就好了!也同样能编译了!)
最后
我也不知道为什么,我第一次安装referformer的环境的时候,好像是有加export这句话去修改cuda环境变量。但当时没记录,可能比较幸运的成功了,但这次就因为忘记这个关键步骤了所以一直困在第二个坑里,差点没爬出来。以后在安装配置东西的时候,还是保持记录吧,如果你知道export CUDA_HOME这句话的作用,欢迎告诉我,谢谢!
痛,实在太痛了,我淋过雨所以。。。。。orz