1. 问题
之前就发现,nvidia-smi 中的CUDA 版本与 nvcc不一致,nvidia-smi的结果显示CUDA版本是11.0,而从nvcc-V命令来看,却是CUDA 10.0。但是跑代码也没啥问题。
2. 分析
其实是因为CUDA 有两种API,分别是运行时 API 和 驱动API,即所谓的 Runtime API 与 Driver API。
nvidia-smi 的结果除了有 GPU 驱动版本型号,还有 CUDA Driver API的型号,这里是 11.0。
而nvcc的结果是对应 CUDA Runtime API。
命令 | CUDA API类型 | 显示 | CUDA版本号例子 | 说明 |
---|---|---|---|---|
nvidia-smi | Driver API | GPU 驱动版本号;CUDA Driver API号 | 11.0 | |
nvcc -V | Runtime API | CUDA Runtime API | 10.0 | 安装python包(例如torch)需要匹配runtime cuda版本 |
3. 总结
nvidia-smi版本大于nvcc -V的版本不会有什么问题,如果版本小了,可以去官网:https://www.nvidia.cn/geforce/drivers/ 下载高版本的。
3.1 如果我们想要安装新的cuda
1)去官网找到想要安装的cuda版本,指英伟达官网
https://developer.nvidia.com/cuda-11.1.0-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=runfilelocal
2) 这里有一些选项
read EULA? 选择accept
当出现这个报错时:
解决办法:
3)安装完毕后,在/usr/local里面会有对应设为cuda-10.0文件
然后我们配置环境
sudo vim ~/.bashrc
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.0/bin$PATH
# 保存退出,然后执行
source ~/.bashrc
完成上述步骤后,执行nvcc --version就是更新的版本的cuda了,然而我的并没有!!!!!!!!!!出现的还是cuda 9.0!!!!!!
解决办法:
1) 卸载cuda 9.0指令
sudo apt-get autoremove nvidia-cuda-toolkit
卸载之后,使用 nvcc -V 提示没有这个文件,即卸载成功
2)为cuda10.0建立软链接:
sudo rm -rf cuda # 删除之前创建的软链接
sudo ln -s /usr/local/cuda-10.0/ /usr/local/cuda # 建立新的软链接(制定链接版本为10.0)
然后终于成功了。