1. cuda 与 nvcc 的配置
nvcc:NVIDIA Cuda compiler driver,简单的说,就是CUDA开发环境下的C语言编译器
-
查看可用cuda 版本
cd /usr/local ls
可以看到装有的cuda 版本
-
版本配置
vim ~/.bashrc 通过加入下面的语句(其中cuda-10.1 为对应可用的任意版本)export PATH="/usr/local/cuda-10.1/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH"
然后 执行 source ~./bashrc 激活
来指定采用特定的cuda版本 -
查看当前使用的版本
nvcc -V # 当然可能如果没有装nvcc 查看软件就可能看不了
正常来说就是配置的那个版本
2. 安装pytorch
cudatoolkit 的版本就根据nvcc 那个版(~/.bashrc 配置的版本) 选择就行
查看torch 对应的cuda 版本
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1
print(torch.version.cuda)
3.cuda 显示的版本
nvidia-smi 看到的cuda 版本 和 nvcc 看到的cuda 版本不一样问题
CUDA有两种API:
- 一个是驱动API(Driver Version),依赖NVIDIA驱动,由nvidia-smi查看。
- 另一个是运行API(Runtime Version)是软件运行所需要的。
一般驱动API版本>=运行API版本即可。
4.安装cuda toolkit
-
查看系统版本
uname -a 显示linux的内核版本和系统是多少位的 x86_64 表示是64位的
cat /proc/version
5. Detectron2 运行问题
运行前通过 下面指令查看环境
python -m detectron2.utils.collect_env
注意要保证几个一致性
--------------------------------------------------------------------------------------------
sys.platform linux
Python 3.7.10 | packaged by conda-forge | (default, Feb 19 2021, 16:07:37) [GCC 9.3.0]
numpy 1.19.2
detectron2 0.3 @/home/hanjun/solicucu/GeneralNet/detectron2
Compiler GCC 5.4
CUDA compiler CUDA 10.2
detectron2 arch flags 6.1
DETECTRON2_ENV_MODULE <not set>
PyTorch 1.5.0 @/home/hanjun/anaconda3/envs/torch15/lib/python3.7/site-packages/torch
PyTorch debug build False
GPU available True
GPU 0 GeForce RTX 2080 Ti (arch=7.5)
CUDA_HOME /usr/local/cuda-10.2
Pillow 8.1.2
torchvision 0.6.0a0+82fd1c8 @/home/hanjun/anaconda3/envs/torch15/lib/python3.7/site-packages/torchvision
torchvision arch flags 3.5, 5.0, 6.0, 7.0, 7.5
fvcore 0.1.5.post20210415
cv2 Not found
----------------------
1.CUDA complier 和 CUDA_HOME 已经torch.version.cuda 的版本都是一致的,比如上面10.2
然后就可以执行
python setup.py build develop
构建完detectron2 后,运行代码,若出现下面的问题
问题:CUDA error: no kernel image is available for execution on the device
执行:python -m detectron2.utils.collect_env ,检查下面信息
# 注意detectron2 arch flags, 表示采用不同的架构编译的
# 特别的 GTX1080 or GTX1080Ti 都是 arch=6.1
detectron2 arch flags 6.1
# 但是 GTX2080 arch=7.5
GPU 0 GeForce RTX 2080 Ti (arch=7.5)
所以,这两个是不兼容的,即在GTX1080 编译的代码 在RTX2080 是运行不了的,会报上面所说的问题。
所以RTX1080编译的只能在RTX1080上面或者arch=6.1的其他机器跑
所以RTX2080编译的只能在RTX2080上面或者arch=7.5的其他机器跑
这里可以查不同GPU的arch版本