系统一开始是CentOS 7.6,安装依赖时yum给的内核文件的版本号和uname -r的结果不一样,这时不能直接装依赖,装上后后面装驱动时会报错找不到内核头文件(最开始我直接装依赖了,以为高版本兼容低版本,然后装驱动时报错找不到957版的内核头文件),所以需先yum -y upgrade,升级完后需重启(重启后变成CentOS 7.9了),之后yum给的版本号和uname -r就一样了,就可以装依赖了。
升级前内核版本是957,yum装的话会装1160,版本不一样。
lspci | grep -i vga
lspci | grep -i nvidia
nouveau是N卡的开源驱动,linux会自动安装,不是NVIDIA官方的,安装官方驱动前需先禁止掉它。
执行lsmod | grep nouveau,如果有输出,说明未禁用;如果没有输出,说明已禁用。
vim /usr/lib/modprobe.d/dist-blacklist.conf,注释掉blacklist nvidiafb这一行,然后添加下面两行
blacklist nouveau
options nouveau modeset=0
然后重建initramfs image,执行下面的命令
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img
dracut /boot/initramfs-$(uname -r).img $(uname -r)
重启
reboot
再执行lsmod | grep nouveau,如果没有输出,说明已禁用。
yum install kernel-devel kernel-headers gcc dkms gcc-c++
官方下载页,根据你的显卡型号搜索。我的显卡是Tesla P4,咨询群里大佬,说应该用CUDA 11.2,所以这是我的型号的下载链接。
下载完后执行
chmod +x NVIDIA-Linux-x86_64-460.106.00.run
./NVIDIA-Linux-x86_64-460.106.00.run --kernel-source-path=/usr/src/kernels/3.10.0-1160.83.1.el7.x86_64 -no-x-check --no-opengl-files
# --kernel-source-path的值是装完依赖后才有这个路径
# 远程安装会检测x server,要让它不检测
# 不安装opengl,因为安装opengl,CentOS界面UI不能正常启动
安装过程中
Would you like to register the kernel module sources with DKMS?选yes(服务器选yes,本地选no)
Install NVIDIA's 32-bit compatibility libraries?选yes
安装完成后执行nvidia-smi,如果有输出,说明驱动已安装。
从最开始升级内核重启后,到这一步,装驱动时可能提示要重启,记不清了。
官方下载页,我下载的11.2.2的run文件,前面已经说了我的型号应该用这个版本。
chmod +x cuda_11.2.2_460.32.03_linux.run
./cuda_11.2.2_460.32.03_linux.run --no-opengl-libs
安装时,X表示选中,即安装,空白表示不选中,即不安装。驱动前面已经安装了,不用再安装。设成下面的样子,再Install。
CUDA Installer
- [ ] Driver
[ ] 460.32.03
+ [X] CUDA Toolkit 11.2
[X] CUDA Samples 11.2
[X] CUDA Demo Suite 11.2
[X] CUDA Documentation 11.2
Options
Install
安装完成后
vim /etc/profile
# 添加下面两行,路径要和上图中一样
export PATH=/usr/local/cuda-11.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.2/lib64:$LD_LIBRARY_PATH
# 保存并重新加载
source /etc/profile
终端输入cuda并连按两次tab,若有候选命令,则再执行nvcc --version,有输出版本信息就是安装成功。
执行CUDA的示例程序进行测试
cd /root/NVIDIA_CUDA-11.2_Samples/1_Utilities/deviceQuery
make
./deviceQuery
官方下载页,一开始直接页面内搜11.2搜到两个结果,是2021年的,然后在最顶部发现是11.x,就选它了。直接下载会提示让登录NVIDIA帐号,查到一个不用登帐号的方法,就是在下面第二张图箭头处点右键,复制链接,然后用迅雷下,但是我用迅雷下载过程中中断了,所以还是注册了帐号。
tar -xvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz
# 以下三行命令from https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html
# 参考链接中这一步复制的文件和官方文档中不太一样
cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
查到的资料是执行cat /usr/local/cuda-11.2/include/cudnn.h | grep CUDNN_MAJOR -A 2,
# 参考链接中的两个例子
[root@ctnr ~]# cat /usr/include/cudnn_v7.h |grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 5
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#include "driver_types.h"
cat /usr/local/cuda-8.0/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 6
#define CUDNN_MINOR 0
#define CUDNN_PATCHLEVEL 21
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#include "driver_types.h"
但我这没输出,查看cudnn.h,里面有一句
#include "cudnn_version.h"
再查看cudnn_version.h,里面有cuDNN版本信息,连着的三行分别代表主版本、次版本以及修定版本。
#ifndef CUDNN_VERSION_H_
#define CUDNN_VERSION_H_
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 7
#define CUDNN_PATCHLEVEL 0
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
/* cannot use constexpr here since this is a C-only file */
/* Below is the max SM version this cuDNN library is aware of and supports natively */
#define CUDNN_MAX_SM_MAJOR_NUMBER 9
#define CUDNN_MAX_SM_MINOR_NUMBER 0
#define CUDNN_MAX_DEVICE_VERSION (CUDNN_MAX_SM_MAJOR_NUMBER * 100) + (CUDNN_MAX_SM_MINOR_NUMBER * 10)
#endif /* CUDNN_VERSION_H */
前言中说了yum装的内核版本要和系统一样,你可能会想到这个命令,它就是安装和你内核版本一样的依赖。
yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
但我升级前用这个命令提示找不到957的包,然后去pkgs.org也搜不到957的包,就去群里问了大佬,他让升kernel版本,升成1160。顺便还吐槽了我们还在用3.10,而截止到2023年2月底linux官方还在维护的最低版本是4.14。
参考链接
【Linux】 查看机器是否有GPU_linux查看gpu_jn10010537的博客-CSDN博客
GPU, CUDA,cuDNN三者的关系总结_挽手等风起的博客-CSDN博客
openEuler安装GPU、CUDA、cudnn_openeuler安装显卡驱动_irrationality的博客-CSDN博客
Kubernetes管理GPU应用 - breezey - 博客园 (cnblogs.com)
Tensorflow-gpu版本安装 - breezey - 博客园 (cnblogs.com)
CentOS部署显卡驱动:CUDA,cuDNN_天然玩家的博客-CSDN博客
CentOS 7 安装 NVIDIA 显卡驱动和 CUDA Toolkit_cuda toolkit centos_XueShengke的博客-CSDN博客
centos安装cuda · 大专栏 (dazhuanlan.com)
centos7安装显卡驱动、cuda以及cudnn_yingchenwy的博客-CSDN博客
CUDA与cuDNN安装教程(超详细)_kylinmin的博客-CSDN博客
Installation Guide :: NVIDIA Deep Learning cuDNN Documentation