一纸辛酸泪……..
安装tensorflow gpu需要先安装cudn 和 cudnn
现在我已经安装好了cudn,nvcc-v 也可以正常显示,但是在/usr/local/文件夹下却没有cuda文件夹.
2.问题由来
通常我们在安装cudnn时,先进行安装cuda,然后下载cudnn文件,通过
tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
#命令解压文件,会得到一个cuda文件夹,逐一执行下面的命令进行cudnn的安装
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
#完成后,通过下面的命令查看安装情况,如果结果如下图逐行显示版本号,则安装成功
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
但是现在并没有这个文件夹该如何做呢?
3.问题定位
使用指令
whereis cuda
输出
cuda: /usr/lib/cuda /usr/include/cuda.h
找到了cuda的位置
4.问题原因
之所以在这两个位置是由于,通过sudo apt install nvidia-cuda-toolkit
这种安装方法在/usr/include和/usr/lib/cuda/lib64中安装cuda
5.问题解决
找了cuda的位置后,安装cudnn,将上述指令替换为
tar -xzvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
#命令解压文件,会得到一个cuda文件夹,逐一执行下面的命令进行cudnn的安装
sudo cp cuda/include/cudnn*.h /usr/include/
sudo cp cuda/lib64/libcudnn* /usr/lib/cuda/lib64/
sudo chmod a+r /usr/include/cudnn.h
sudo chmod a+r /usr/lib/cuda/lib64/libcudnn*
#完成后,通过下面的命令查看安装情况,如果结果如下图逐行显示版本号,则安装成功
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
注意需要将cuda.h与cudnn.h文件放在同一文件夹下.
nvcc和nvidia-smi显示的cuda版本不一致解释:
nvcc属于cuda的编译器,将程序编译成可执行的二进制文件,nvidia-smi全称是NVIDIA System Management Interface,是一种命令行使用工具,旨在帮助管理和监控NVIDIA GPU设备。
cuda有runtime api和driver api,两者都有对应的cuda版本,nvcc –version显示的就是前者对应的cuda版本,而nvidia-smi显示的是后者对应的cuda版本。
用于支持driver api的必要文件由GPU driver install安装,nvidia-smi就属于这一类API;而用于支持runtime api的必要文件是由cuda toolkit install安装的。nvcc是与cuda toolkit一起安装的cuda compiler-driver tool,它只知道自身构建时的cuda runtime版本,并不知道安装了什么版本的GPU driver,甚至不知道是否安装了GPU driver。
cuda toolkit install通常会集成了GPU driver install,如果你的cuda均通过cuda toolkit install来安装,那么runtime api和driver api的版本应该是一致的,也就是说,nvcc -V和nvidia-smi显示的版本正常是一样的,否则你可能使用了单独的GPU driver install来安装GPU driver,这样就会导致nvidia-smi和nvcc -V显示的版本不一样。
通常,driver api的版本能向下兼容runtime api的版本,即nvidia-smi显示的版本大于nvcc -V时通常是可以使用的。
#runtime api就是runfile类型的安装文件,driver api就是deb类型的安装文件。