炼丹服务器 CentOS 7 安装 NVIDIA 显卡驱动
1、相关背景
本篇博客记录了安装 NVIDIA GPU 驱动程序的操作指南,旨在确保在新的GPU机器上实现统一的驱动安装,以维持GPU驱动程序版本的一致性,尤其适用于算法推理集群和训练集群的环境搭建。
2、准备工作
① 显卡和对应的GPU驱动版本、下载方法
在进行NVIDIA GPU驱动程序安装之前,首先执行命令 lspci | grep -i nvidia
,以查看显卡版本信息。根据具体的显卡型号和操作系统进行安装。
以下是以L40显卡和CentOS系统为例。进入网站 下载 NVIDIA 官方驱动 | NVIDIA,根据具体的显卡型号和操作系统,点击相应选项后进行搜索,即可看到多个版本号。根据上述驱动版本进行选择并下载。
② 核对内核版本和源码版本
如果内核版本和源码版本不一致,可能会导致安装 NVIDIA GPU 驱动程序时出现问题。
ls /boot | grep vmlinu
rpm -aq | grep kernel-devel
③ 安装依赖环境
根据你的操作系统,执行以下命令来在线安装 gcc,如果您的服务器没有网络,可以选择后面的离线安装方法。
yum install gcc
yum install gcc-c++
如果离线安装则需要在有网络连接的环境中获取离线安装包,您可以选择在官网或者可靠的镜像网站下载与你的操作系统版本和架构相匹配的 .rpm
文件,例如根据我当前的环境在 阿里云镜像站 拉取相关包。
接下来,需要将下载好的离线安装包通过U盘或其他适配的方式传输到目标离线环境中,由于我的有网络连接主机可以通过内网访问到目标离线主机,所有我可以直接使用SCP(基于SSH协议的文件传输工具)在网络上安全地传输文件。
scp /path/to/gcc_packages/*.rpm username@target_host:/path/to/gcc_packages
最后,进入安装包所在的目录,你可以选择以下两种方式进行安装:
- 通过
rpm -ivh
安装单个 RPM 包:rpm -ivh xx.rpm
- 通过
rpm -Uvh
统一安装多个 RPM 包,忽略依赖关系和强制安装:rpm -Uvh *.rpm --nodeps --force
安装完成后,你可以使用 gcc -v
和 g++ -v
命令来验证 GCC 和 G++ 的安装情况。如果能够看到版本信息,那么说明安装成功。
④ 屏蔽系统自带的 nouveau
在某些 Linux 发行版中,系统自带一个名为 nouveau 的开源 NVIDIA 显卡驱动,可能会与官方的 NVIDIA 官方驱动发生冲突,导致安装后系统无法正确识别和加载 NVIDIA 的驱动程序。首先,运行以下命令来检查是否有 nouveau 驱动正在运行:
lsmod | grep nouveau
如果上述命令有输出,需要修改 dist-blacklist.conf
文件屏蔽系统自带的 nouveau 驱动,以确保新的 NVIDIA 驱动能够正确被系统识别和加载。
vim /lib/modprobe.d/dist-blacklist.conf
在文件中,将 blacklist nvidiafb
注释掉(在行首添加 # ),然后添加以下语句:
blacklist nouveau
options nouveau modeset=0
⑤ 重建 initramfs image
initramfs(initial RAM file system)是一个临时的根文件系统,用于在 Linux 系统引导过程中加载必要的驱动程序和文件系统模块。首先,我们需要备份当前的 initramfs image 文件,以便在需要时进行恢复:
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
接下来,我们将系统的运行级别修改为文本模式,这样可以确保在重建 initramfs image 时不会受到图形界面的影响:
systemctl set-default multi-user.target
然后,我们使用dracut命令来重建initramfs image,确保它包含最新的内核模块和驱动程序:
dracut /boot/initramfs-$(uname -r).img $(uname -r)
完成上述操作后,我们需要使用命令 reboot
重启服务器,以使新的配置生效。系统将加载新的 initramfs image,同时nouveau 驱动被禁用,执行命令不会有任何输出。
3、安装 NVIDIA 显卡驱动(NVIDIA Driver)
你可以根据上面提供的官网驱动下载地址,使用 wget 下载链接
在线进行下载,或者在有网络环境的主机下载后传输到目标离线主机中。进入到驱动路径下,给予下载的驱动程序执行权限,并进行安装:
chmod a+x NVIDIA-Linux-x86_64-*.run
# 需要 root 权限,如果非 root 账户需要前面加 sudo 操作
./NVIDIA-Linux-x86_64-*.run -no-x-check
在安装过程中,若有如下提示,选择 “No” 继续安装,其他提示选择默认即刻。即使出现警告,也可以忽略并继续,直到安装完成。
安装完成后,我们可以通过以下命令检查显卡驱动是否成功安装:
nvidia-smi
4、安装 CUDA 加速库
你可以访问 NVIDIA的官方网站 获取CUDA Toolkit,或者前往旧版本的 CUDA Toolkit下载地址 以获取相应的旧版本。下载完成对应版本安装包之后,我们给予安装文件执行权限,并运行安装命令。
chmod a+x cuda_*_linux.run
./cuda_*_linux.run
在安装过程中,可能会询问是否需要下载驱动(Driver)。通常情况下,请选择”否”,即在 Driver 选项中取消选择(将 [X]
改为 [ ]
),然后继续安装。
然后,我们需要通过命令 vim ~/.bashrc
配置环境变量,在文件末尾添加如下两行(请将下面 cuda 版本替换成你安装的版本):
export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
使用以下命令刷新 ~/.bashrc 配置文件,使编辑后的新配置生效:
source ~/.bashrc
最后,测试并查询nvcc版本,检查是否安装成功:
nvcc -V
5、Docker 显卡适配
你可以进入 官网提供 GitHub 仓库 找到对应系统版本的安装包下载,例如本文环境的安装包可以在 下载目录 中找到,需要下载的四个安装包如下所示:
- libnvidia-container1:这是 NVIDIA 容器运行时的库文件,用于支持 NVIDIA GPU 加速的容器运行。它提供了容器运行时需要的基本功能和接口。
- libnvidia-container-tools:这个包提供了一些用于管理 NVIDIA 容器运行时的工具,例如命令行工具,用于配置和管理 NVIDIA GPU 加速容器的运行时环境。
- nvidia-container-toolkit-base:这是 NVIDIA 容器工具包的基础部分,包含了运行容器所需的基本工具和库文件。
- nvidia-container-toolkit:这个包包含了更多的 NVIDIA 容器工具,用于支持容器中的 GPU 加速功能,提供了与 NVIDIA GPU 相关的容器运行时支持。
下载完成后,进入安装包路径通过 rpm -Uvh
统一安装多个 RPM 包,忽略依赖关系和强制安装:
rpm -Uvh *.rpm --nodeps --force
安装完成后,请重启 Docker 服务以应用更改:
systemctl restart docker
通过上述操作,您现在可以使用 --gpus all
选项创建容器,并且在容器中正常地利用 GPU 资源了。