网上的教程很少,基本都是2019年或之前的,而且很多坑,所以这里分享一个比较新的安装方法
参考链接:
1.基本环境
硬件:3700x和2070super
操作系统:Ubuntu20.04
2.踩坑记录
我首先尝试在anaconda创建一个新的虚拟环境安装(安装顺序:CUDA10.0 -> Anaconda3 -> 创建新虚拟环境 -> 安装Pytorch-Encoding),但是最后发现这样会遇到很多bug,这些bug都导致import encoding失败,我把我遇到的但是最后都无法解决的bug列在这里:
Subprocess.CalledProcessError:Command '['ninja','-v']' returned non-zero exit status 1.
这个问题是我import encoding时遇到的第一个问题,在官方github的issue里也有很多类似问题,这个我的解决方法是找到报错文件将[‘ninja’,’-v’]改成[‘ninja’,’–version’]no module named 'enclib_cpu' 或者 no module named 'enclib_gpu'
解决完上个问题,再import encoding就遇到这个问题, 这里参考的是参考链接2的解决方法,需要注意的是如果使用"pip install torch-encoding"在cpu和gpu文件夹下是没有setup.py的,必须从github克隆源文件安装才有。但是我尝试这个方法没有成功,最后在cpu文件夹下编译运行"python setup.py build"会报错
3.安装过程
上面的坑我尝试了好久都解决不了,期间尝试过更换CUDA版本,Python版本,PyTorch版本,都以失败告终,最后灵机一动,尝试在Anaconda默认的base环境里安装,竟然成功了(具体为啥base就可以,我就不深究了,可能还是版本问题,还请大神指点),环境依赖主要参考官方教程,下面把步骤分享给大家
3.1安装CUDA10.0和cudnn
这里参考参考链接3,我是新装的Ubuntu系统,所以之前没有装过CUDA,已经装过的请参考其他教程。要注意的是一定要在安装CUDA之前独立安装显卡驱动,这里我用的命令是sudo ubuntu-drivers autoinstall
,否则会出现一些奇怪的问题,比如我直接安装CUDA,重启就会卡在登录界面。注意预先安装了驱动在安装CUDA时就不要再安装了
3.2安装Anaconda3
直接到Anaconda官网下载Python 3.7的64-Bit (x86)Installer (522 MB),我下载下来的文件名是Anaconda3-2020.02-Linux-x86_64.sh。之后安装最好不用root权限,直接bash Anaconda3-2020.02-Linux-x86_64.sh
安装到非root用户下,安装时选择默认的选项
3.3安装ninja
参考官方教程
wget https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip
sudo unzip ninja-linux.zip -d /usr/local/bin/
sudo update-alternatives --install /usr/bin/ninja ninja /usr/local/bin/ninja 1 --force
3.4安装PyTorch1.4
参考官方教程,在base环境运行conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
,如果cudatoolkit选择的是10.0,安装的就是对应的PyTorch最新版本1.4
3.5安装Pytorch-Encoding
参考官方教程,这里注意不要加--pre
,直接pip install torch-encoding
,我安装后的版本是1.2.0
3.6测试
在base环境python
,import encoding
没有报错说明安装成功,最后把环境依赖的版本列在下面:
- gcc / g++ 7.5.0
- python 3.7.6
- cudatoolkit 10.0.130
- ninja 1.8.2
- torch 1.4.0 / torchvision 0.5.0
- torch-encoding 1.2.0
4.其他
就算按照上面的步骤安装,还是会有一些报错(也可能没有),但都是可以解决的,列在下面以供参考:
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.
这个在我重新在普通用户安装Anaconda后出现了(原来安装在/root下,普通用户调用不太方便),重新按照3.3运行了一边就可以了subprocess.CalledProcessError: Command '['which', 'c++']' returned non-zero exit status 1
,这个应该是c++的问题,在报错文件里把c++改成g++,或者在/usr/bin里创建软连接ln -s g++ c++
转载:https://blog.csdn.net/weixin_41244934/article/details/106304088