基本配置
在实验室搭载RTX3090的服务器上配置Pytorch3d + pytorch + cuda + nvidia驱动 (一环扣一环)。
Ubuntu18.04 + RTX3090 + Pytorch3D0.4 + Pytorch1.8.1 + cuda11.1 + nvidia_driver455 + python3.8
正确操作:
参考Pytorch3d的官方安装说明(https://github.com/facebookresearch/pytorch3d/blob/master/INSTALL.md)给出的安装示例是基于python3.8,pytorch1.7.1 cuda10.2,但是由于3090显卡不适配CUDA11以前的版本,所以我安装的是pytorch1.8.1 + cuda11.1,从NVIDIA官网下载并安装了cuda11.1(同时安装了cuda自带的显卡驱动455)。
根据官网要求通过conda安装fvcore, ioPath, nvidiacub等一系列附加库。
因为我的环境和官网推荐的环境不同,因此conda安装自然是不能用的(实际上我试过,会产生一些conflict的问题);pip安装仅更新到cuda10.1也不能用;因此我采用了Install from GitHub:
pip install “git+https://github.com/facebookresearch/pytorch3d.git”
(https://github.com/facebookresearch/pytorch3d/blob/main/INSTALL.md#1-install-from-github)
成功!
备注:
关于pytorch 版本,理论上应该是只要是可以搭配cuda11系列的pytorch都可以
踩坑
-
用官方的conda安装会出现一堆conflict的问题,查了查好像是和conda发行版本和发行路径相关的,没有细究。
-
3090显卡不适配CUDA11以前的版本(https://forums.developer.nvidia.com/t/can-rtx-3080-support-cuda-10-1/155849)
-
显卡驱动最好是在安装cuda时候一起安装,虽然nvidia官方理论上说新显卡驱动是可以适配老cuda,但是这会造成nvidia-smi显示的cuda-driver版本和nvcc -V显示的版本不一样(https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi)。在我的实验中,torch.cuda.is_available会得到false。
-
在源码安装pytorch3d时报错,显示找不到一些cuda的库或着文件,经检查发现是CUDA_HOME的路径写错了。(https://github.com/NVIDIA/flownet2-pytorch/issues/171#issuecomment-633027047)原本在.bashrc中写的是“export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.1”,应改为“export CUDA_HOME=/usr/local/cuda-11.1”,这是因为变量CUDA_HOME在系统中之前并没有。
-
如果在安装cuda之前已经预先安装好了nVidia驱动(apt install或者官网下载后安装),则安装cuda时会先弹出警告“ Existing package manager installation of the driver found”,有两个方案处理:如果确定自己已安装的版本能行,则直接continue;如果想安装cuda自带的nVidia驱动,则先把之前的卸载干净(https://askubuntu.com/questions/1211919/error-installing-cuda-toolkit-existing-package-manager-installation-of-the-driv)
-
如果在安装cuda过程中中断,然后在nvidia-installer.log中看到“Unable to load the kernel module 'nvidia.ko’”,则说明显卡驱动和显卡不适配,就我的情况而言是当时安装CUDA10.2自带的显卡驱动和RTX3090不合适
-
当使用pytorch时出现“CUDA unknown error”,则大概率都是显卡驱动和显卡不适配或者显卡驱动和cuda不适配造成的。(https://stackoverflow.com/questions/62359175/pytorch-says-that-cuda-is-not-available)