GPU服务器的时代已经来临,GPU取代CPU来执行非图形任务,如模拟、数据挖掘、金融分析、图像识别和医疗数据生成。这些GPU的通用计算应用被称为 “GP(General-Purpose)GPU “或 “GPU计算”。

一般来讲GPU计算是使用显卡完成的,是使用显卡的一种应用。另一方面,GPU服务器是专门为GPU计算而设计的,而不是为图形。与普通显卡不同,它们没有图形输出,专门用于非图形应用。未来,GPU服务器可能成为高端GPU计算的主流。

在这里介绍Redhat系统上安装NVIDIA驱动的方法,环境如下。

  • 系统:RedHat7.6
  • 内核版本:3.10.0-957
  • GPU:NVIDIA Tesla V100 PCIE 32GB x3
  • CUDA Toolkit:10.1(版本:418.226.00)

1. 确认系统是否支持GPU

确认系统是否已连接nvida设备。

# lspci | grep -i nvidia
88:00.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] (rev a1)
89:00.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] (rev a1)
b2:00.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] (rev a1)

2. 确认系统版本

确认准备安装NVIDIA驱动的系统版本。

# uname -m && cat /etc/*release
x86_64
NAME="Red Hat Enterprise Linux Server"
VERSION="7.6 (Maipo)"
ID="rhel"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="7.6"
PRETTY_NAME="Red Hat Enterprise Linux"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:7.6:GA:server"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"

REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
REDHAT_BUGZILLA_PRODUCT_VERSION=7.6
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="7.6"
Red Hat Enterprise Linux Server release 7.6 (Maipo)
Red Hat Enterprise Linux Server release 7.6 (Maipo)

3. 确认安装GCC版本

一般来讲Linux上安装gcc版本支持CUDA Toolkit,在这里主要是确认gcc是否已安装。

# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

4. 系统安装kernel相关package

安装和内核版本一致的kernel-devel及kernel-headers。

# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

确认安装的kernel-devel和kernel-headers和内核版本 3.10.0-957 一致。

# rpm -qa | grep kernel
kernel-headers-3.10.0-957.el7.x86_64
abrt-addon-kerneloops-2.1.11-52.el7.x86_64
kernel-devel-3.10.0-957.el7.x86_64
kernel-3.10.0-957.el7.x86_64

如果已安装新版的kernel-headers或者kernel-devel的话,可使用 rpm -Uvh –oldpackage命令进行降级。

# rpm -Uvh --oldpackage kernel-headers-3.10.0-957.el7.x86_64.rpm

Redhat版本对应内核版本可在 Red Hat Enterprise Linux Release Dates 进行确认。

5. 下载NVIDIA CUDA Toolkit

访问NVIDIA官网下载CUDA Toolkit。

产品类型,产品系列,产品家族根据服务器上的可使用的GPU进行选择。
操作系统选择安装NVIDIA驱动的服务器,语言没有特殊需求的话,选择English(UK)。
CUDA Toolkit的选择非常重要,应该咨询开发调用GPU的程序的开发人员。

在这里可以确认到CUDA Toolkit对应版本为 418.226.00,确认版本无误后点击「DOWNLOAD」进行下载。

把下载本地PC的rpm上传至服务器后使用rpm命令进行安装。

# rpm -ivh nvidia-driver-local-repo-rhel7-418.226.00-1.0-1.x86_64.rpm

6. 设定Repository

NVIDIA驱动程序依赖于第3方RPM包(例如libvdpau等),在这里安装epel的yum源,并激活rhel-7-server-optional-rpms源。

# yum install https://dl.fedoraproject.org/pub/epel/epel-releaselatest-7.noarch.rpm
# subscription-manager repos --enable=rhel-7-server-optional-rpms

7. 安装Package

yum安装之前清除yum源cache。

# yum clean expire-cache

7-1. 安装vulkan-filesystem

vulkan-filesystem为第3方提供的package,并非Redhat提供的package,因此直接centos的网站上下载rpm包,进行安装。

# yum install wget
# wget http://mirror.centos.org/centos/7/os/x86_64/Packages/vulkan-filesystem-1.1.97.0-1.el7.noarch.rpm
# yum localinstall vulkan-filesystem-1.1.97.0-1.el7.noarch.rpm

7-2. 安装nvidia-driver-latest-dkms

# yum install nvidia-driver-latest-dkms

7-3. 安装cuda-drivers

yum命令安装cuda-drivers,在这里使用本地的nvidia-driver-local-rhel7-418.226.00.repo,因此指定–disablerepo=rhel-7-server-rpms。

# yum --disablerepo=rhel-7-server-rpms install cuda-drivers

8. Nouveau无效化

在/etc/modprobe.d目录下,创建blacklist-nouveau.conf文件并进行修改。

# vi /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

重新编译内核initramfs。

# dracut --force

reboot命令重启系统。

# reboot

9. nvidia-persistenced开机自动启动

使用systemctl命令启动nvidia-persistenced并设定为开机自动启动。

# systemctl status nvidia-persistenced     -> 确认状态为disabled
# systemctl start nvidia-persistenced      -> 启动服务
# systemctl enable nvidia-persistenced     -> 设定为开机自动启动
# systemctl is-enabled nvidia-persistenced -> 显示enabled

10. 确认安装结果

确认/dev目录下生成的nvidia相关设备文件。

# ls -l /dev/nvi*
crw-rw-rw- 1 root root 195, 254 11 Nov 23 16:12 /dev/nvidia-modeset
crw-rw-rw- 1 root root 235,   0 11 Nov 23 16:12 /dev/nvidia-uvm
crw-rw-rw- 1 root root 235,   1 11 Nov 23 16:12 /dev/nvidia-uvm-tools
crw-rw-rw- 1 root root 195,   0 11 Nov 23 16:12 /dev/nvidia0
crw-rw-rw- 1 root root 195,   1 11 Nov 23 16:12 /dev/nvidia1
crw-rw-rw- 1 root root 195,   2 11 Nov 23 16:12 /dev/nvidia2
crw-rw-rw- 1 root root 195, 255 11 Nov 23 16:12 /dev/nvidiactl

使用nvidia-smi命令确认。

# nvidia-smi
Tue Nov 23 16:14:57 2021
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.226.00   Driver Version: 418.226.00   CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla V100-PCIE...  Off  | 00000000:88:00.0 Off |                    0 |
| N/A   34C    P0    25W / 250W |      0MiB / 32480MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla V100-PCIE...  Off  | 00000000:89:00.0 Off |                    0 |
| N/A   35C    P0    26W / 250W |      0MiB / 32480MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla V100-PCIE...  Off  | 00000000:B2:00.0 Off |                    0 |
| N/A   36C    P0    24W / 250W |      0MiB / 32480MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

小结

参照NVIDIA提供的手册,一步一步执行即可成功安装。但推荐安装之前理解一下yum及rpm相关命令。

NVIDIA CUDA Installation Guide for Linux