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安裝流程的相關內容。