1、安装前准备工作
1.1、确认GPU型号和操作系统版本
1.2、准备gpu驱动和CUDA软件包
在nvidia官网进行驱动包下载
GPU驱动下载链接
linux系统均选择 Linux 64-bit
CUDA Toolkit选择最新版本,注意该版本建议大于等于cuda软件的版本。
CUDA下载链接
选择合适的操作系统版本进行下载,建议选择runfile(local)。
1.3、检查服务器GPU识别情况
安装GPU驱动之前需要在操作系统下查看GPU卡是否能够完全识别,如不能识别需要进行重新插拔、对调测试等步骤进行硬件排查。
#确保可以查看到所有的GPU
# lspci | grep -i nvidia
1.4、老版本软件包卸载
若安装过其他版本的GPU驱动或CUDA,请先卸载。
PU驱动卸载方法:
# /usr/bin/nvidia-uninstall -s
备注:cuda软件可以不卸载,直接安装新版本软件包,后期通过修改环境变量配置来调用不同版本的cuda软件。
CUDA卸载方法:
# /usr/local/cuda-X.Y/bin/cuda-uninstaller
或老版本卸载方法
# /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl
1.5、安装依赖包
配置yum源时,建议使用系统安装镜像配置本地源进行软件包安装,网络yum源会自动安装较新版本的软件包,因gpu驱动对系统内核与软件版本要求较高,网络yum源安装软件包机kernel相关包后,可能导致GPU驱动安装报错。
CentOS 7:
#软件包安装
# yum install gcc
# yum install gcc-c++
# yum install tar
# yum install make
# yum install bzip2(用于解压nv persistence脚本包)
# yum install pkgconfig
# yum install libglvnd-devel libglvnd(选装,测试发现centos7.9版本不安装该包会有告警提示)
# yum install elfutils-libelf-devel
SUSE:
#软件包安装
zypper in gcc
zypper in gcc-c++
zypper in tar
zypper in make
Ubuntu:
#软件包安装
# apt-get install gcc
# apt-get install g++
# apt-get install tar
# apt-get install make
# apt-get install libglvnd-dev(部分OS版本提示无该软件包,可选装)
# apt-get install pkg-config
# apt-get install build-essential
以下安装包为ubuntu 64bit 兼容运行32bit的软件包(一般16.04之前的版本安装ia32-libs,16.04及之后的版本安装lib32ncurses5 lib32z1)用于解决以下提示:
# apt-get install ia32-libs
# apt-get install lib32z1 lib32ncurses-dev(lib32z1,最后为数字1;安装lib32ncurses-dev主要是为了安装lib32ncurses#,#为数字,os版本不同软件包名称会不同)
1.6、安装kernel-devel和kernel-headers软件包
CentOS 7
# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r) ##注 kernel-devel && kernel-headers && kernel版本 必须一致,否则会出现驱动不可用
Ubuntu:
#Ubuntu一般无需安装,也可以从阿里镜像站或网易镜像站下载安装,需注意内核版本。
# apt install linux-image-$(uname -r)
# apt install linux-modules-$(uname -r)
# apt install linux-headers-$(uname -r)
SUSE:
zypper install kernel-source-$(uname -r) #只安装这一个即可
zypper install kernel-default-devel-$(uname -r)
1.7、修改系统运行级别为文本模式
GPU驱动安装必须在字符界面下进行,可以根据客户需要,临时或永久切换至字符界面后再开始进行GPU驱动安装。
CentOS 7
# init 3 (临时切换到字符界面)
# systemctl set-default multi-user.target (永久切换至字符界面启动)
Ubuntu:
init 3 (临时切换到字符界面)
systemctl set-default multi-user.target(永久切换至字符界面启动)
SUSE:
# init 3 (临时切换到字符界面)
# 永久切换至字符界面启动
vim /etc/inittab
修改
id:5:initdefault:
为
id:3:initdefault:
1.8、禁用系统自带的nouveau模块
# 检查nouveau模块是否加载,已加载则先禁用
# 这里先使用rmmod命令临时禁用nouveau模块,后续安装GPU驱动时再使用-Z或--disable-nouveau 参数永久禁用该模块
# lsmod | grep nouvea
nouveau 1949696 0
mxm_wmi 16384 1 nouveau
video 49152 1 nouveau
ttm 106496 2 drm_vram_helper,nouveau
drm_kms_helper 184320 4 ast,nouveau
i2c_algo_bit 16384 3 igb,ast,nouveau
drm 491520 6 drm_kms_helper,drm_vram_helper,ast,ttm,nouveau
wmi 32768 2 mxm_wmi,nouveau
# 系统下使用rmmod临时禁用nouveau模块
# rmmod nouveau
# 确认nouveau模块已禁用(无输出表示已禁用)
# lsmod | grep nouvea
备注:
若出现以下报错
# rmmod nouveau
rmmod: ERROR: Module nouveau is in use
请先修改系统运行级别为文本模式
2、GPU驱动安装
2.1、GPU驱动安装
# GPU驱动安装前可使用参数--check检查安装包的完整性,如下表示安装包完整。
# ./NVIDIA-Linux-x86_64-460.32.03.run --check
check sums and md5 sums are ok
# 如果客户linux系统要使用图形界面,安装驱动时务必加上参数
--no-opengl-files
# 若系统下nouveau模块已手动禁用,安装驱动时去掉-Z或--disable-nouveau参数
# 若驱动安装时忘记使用-Z或--disable-nouveau参数禁用nouveau模块,可以参考“4.1 手动禁用nouveau模块”完成禁用操作
# chmod +x NVIDIA-xxx.run
# ./NVIDIA-Linux-x86_64-460.32.03.run -a -s -Z --no-opengl-files
或
# ./NVIDIA-Linux-x86_64-460.32.03.run --accept-license --ui=none --no-questions --disable-nouveau --no-opengl-files
因驱动安装命令使用了-Z和--disable-nouveau参数,以上命令完成GPU驱动安装后,会自动生成禁用nouveau模块的配置文件,可以使用以下命令查看生成的文件:
# find / -name 'nvidia*nouveau*'
/usr/lib/modprobe.d/nvidia-installer-disable-nouveau.conf
/etc/modprobe.d/nvidia-installer-disable-nouveau.conf
2.2、GPU驱动内存常驻模式配置
两种方法配置GPU驱动内存常驻模式,选择其中一种即可,已经配置过GPU驱动内存常驻模式的系统,无需重复配置。
方法一:将 nvidia-smi -pm 1 命令添加进开机自启动配置文件并赋予文件可执行权限,参考“4.2手动配置GPU驱动内存常驻模式开机自启动”
方法二:借助GPU驱动自带工具创建系统下的nvidia-persistenced服务。
以下为利用GPU驱动自带工具配置GPU驱动内存常驻模式开机自启动,该脚本需要系统下预安装sed、useradd、userdel、id命令,否则会执行失败。
# cd /usr/share/doc/NVIDIA_GLX-1.0/samples/
# ls
nvidia-persistenced-init.tar.bz2 systemd
# tar xvf nvidia-persistenced-init.tar.bz2
# ls
nvidia-persistenced-init nvidia-persistenced-init.tar.bz2 systemd
# cd nvidia-persistenced-init/
# ./install.sh
Checking for common requirements...
sed found in PATH? Yes
useradd found in PATH? Yes
userdel found in PATH? Yes
id found in PATH? Yes
Common installation/uninstallation supported
Creating sample System V script... done.
Creating sample systemd service file... done.
Creating sample Upstart service file... done.
Checking for systemd requirements...
/usr/lib/systemd/system directory exists? Yes
systemctl found in PATH? Yes
systemd installation/uninstallation supported
Installation parameters:
User : nvidia-persistenced
Group : nvidia-persistenced
systemd service installation path : /usr/lib/systemd/system
Adding user 'nvidia-persistenced' to group 'nvidia-persistenced'... done.
Installing sample systemd service nvidia-persistenced.service... done.
Enabling nvidia-persistenced.service... done.
Starting nvidia-persistenced.service... done.
systemd service successfully installed.
#以上表示脚本配置成功
可以通过以下命令检查服务状态是否正常,并执行nvidia-smi 确认Persistence-M状态为on。
~# systemctl status nvidia-persistenced.service
2.3、nvidia-fabricmanager安装
对于nvlink sxm3/4系列GPU,如HGX-2和HGX-2-NEXT GPU模组,安装完GPU驱动后,需要单独安装与GPU驱动版本一致的nvidia-fabricmanager软件包,并开启nvidia-fabricmanager服务。
PCIE GPU无需安装该服务。
示例:
安装V450.80.02版本驱动对应的fabricmanager软件包
rpm -ivh nvidia-fabricmanager-450-450.80.02-1.x86_64.rpm
rpm -ivh nvidia-fabricmanager-devel-450-450.80.02-1.x86_64.rpm
systemctl start nvidia-fabricmanager
systemctl enable nvidia-fabricmanager
systemctl status nvidia-fabricmanager
2.4、重启系统使内核生效
因本文前面禁用了nouveau模块,需执行以下命令使OS内核生效。
若之前已成功禁用过nouveau模块,无需重复以下步骤。
centos-7
执行如下命令使内核生效(需要重启服务器后才可真正禁用nouveau)
# dracut -f
ubuntu
# update-initramfs -u
重启操作系统
2.5、检查nouveau模块及相关服务状态
重启系统后
- 检查GPU驱动内存常驻模式是否生效(若使用方法二配置GPU驱动内存常驻模式,检查nvidia-persistenced服务是否启动)
- 检查nouveau模块是否禁用
- 检查nvidia-fabricmanager服务是否启动
3、CUDA安装
3.1、安装CUDA
安装CUDA时需注意,如果之前安装过GPU驱动,安装CUDA时就不要再选择GPU驱动安装了。
安装cuda前,可以使用参数--check检查软件包完整性,如下表示软件包完整。
# ./cuda_11.1.1_455.32.00_linux.run --check
MD5 checksums are OK. All good.
#执行安装命令后,后台会先进行安装包解压,稍等1-3分钟屏幕才会有输出
# chmod +x cuda-xxx.run
# ./cuda-xxx.run --no-opengl-libs
新版本CUDA安装界面:
注意Driver选项,表示是否安装GPU驱动,如果之前已经安装了GPU驱动,这里不要再勾选。
安装完毕:
旧版本CUDA安装:
[root@ localhost ~]# ./cuda-xxx.run --no-opengl-libs
… … … …
… … … … ####约定条款,此处忽略打印
-----------------
Do you accept the previously read EULA?
accept/decline/quit: accept
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 387.26?
(y)es/(n)o/(q)uit: n ###若已经安装过驱动,则此处不需再安装
Install the CUDA 9.2 Toolkit?
(y)es/(n)o/(q)uit: y
Enter Toolkit Location
[ default is /usr/local/cuda-9.1 ]: ####回车,默认
Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: y
Install the CUDA 9.2 Samples?
(y)es/(n)o/(q)uit: y ##安装samples
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-9.2/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-9.2/doc/pdf for detailed information on setting up CUDA.
Logfile is /tmp/cuda_install_62403.log
####安装完成,如果安装失败,查看上述提示日志信息
3.2、配置环境变量
如果系统下安装了多个不同的cuda版本,可以通过修改环境变量调用不同版本的cuda软件。
添加到/etc/profile文件中,对所有用户生效
# vim /etc/profile
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
# source /etc/profile
测试cuda安装是否正确,环境变量是否识别成功
# nvcc -V
4、其他操作
4.1、手动禁用nouveau模块
检查nouveau模块是否加载,已加载则先禁用
# lsmod | grep nouveau
CentOS 7:
#没有blacklist-nouveau.conf文件则创建
# vim /usr/lib/modprobe.d/blacklist-nouveau.conf blacklist nouveau
options nouveau modeset=0
执行如下命令使内核生效(需要重启服务器后才可真正禁用nouveau)
# dracut -f
Ubuntu:
vi /etc/modprobe.d/blacklist.conf
在文本最后添加以下内容:
blacklist nouveau
options nouveau modeset=0
保存退出,执行以下命令生效:
# update-initramfs -u
重启操作系统
4.2、手动配置GPU驱动内存常驻模式开机自启动
- CentOS及Ubuntu设置方法
CentOS及Ubuntu 18以下版本参考如下设置:
GPU驱动模式设置为常驻内存:
# nvidia-smi -pm 1
设置开机自启动
vim /etc/rc.d/rc.local
在文件中添加一行
nvidia-smi -pm 1
赋予/etc/rc.d/rc.local文件可执行权限
# chmod +x /etc/rc.d/rc.local
#若无/etc/rc.d/rc.local,也可修改
vim /etc/rc.local
chmod +x /etc/rc.local
================================================
- ubuntu 18 配置方法如下:
#备注:附件已提供了编写好的rc-local.service文件,可以直接拷贝至客户OS下使用。
创建文件: vi /etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
创建文件: vi /etc/rc.local
#!/bin/sh -e
nvidia-smi -pm 1
exit 0
赋予可执行权限
chmod +x /etc/rc.local
启动服务并设置服务开机自启动
systemctl enable rc-local.service
systemctl start rc-local.service
systemctl status rc-local.service
重启系统后验证
=================================================
- SUSE OS下设置方法
vim /etc/init.d/after.local #没有就新建
nvidia-smi -pm 1
chmod +x /etc/init.d/after.local
以上即为GPU驱动及CUDA安装流程的相关内容。