内核更新时无法正常加载NVIDIA GPU(Tesla)驱动

当升级GPU实例的操作系统(例如Alibaba Cloud Linux、RedHat、CentOS、Ubuntu等)内核时,可能会因为两个内核的kABI(Kernel Application Binary Interface)不一致,导致旧内核上构建的GPU(Tesla)驱动无法在新的内核上加载。内核升级后,请根据内核的kAPI(Kernel Application Programming Interface)是否存在变化,采取不同的方案解决该问题。

问题现象

升级GPU实例的操作系统内核时,出现GPU(Tesla)驱动无法在新的内核上加载,即无法在新的内核版本上插入旧内核的NVIDIA的KO,导致该驱动无法正常使用。报错信息如下:

报错截图.jpg

问题原因

升级内核包后导致NVIDIA GPU(Tesla)驱动无法加载的可能原因如下:

  • 升级前后两个内核的kABI不一致,导致旧内核上构建的NVIDIA GPU(Tesla)驱动无法在新内核上加载。

  • NVIDIA GPU(Tesla)驱动的默认KO(Kernel Object)安装目录不在 /lib/modules/(uname−r)/extra下,导致新的内核包安装时无法对其创建软链接。

解决方案

基于以上原因,根据内核的kAPI影响情况,采取不同的解决方案:

通过DKMS自动构建NVIDIA GPU(Tesla)驱动

  1. 在NVIDIA GPU(Tesla)驱动上安装DKMS。

    1. 远程连接GPU实例。

      本文以Alibaba Cloud Linux 3系统的gn7i实例为例,具体操作,请参见通过密码或密钥认证登录Linux实例

    2. 在GPU实例上安装DKMS。

      sudo yum install dkms
    3. 手动为GPU安装NVIDIA GPU(Tesla)驱动。

      具体操作,请参见在GPU计算型实例中手动安装Tesla驱动(Linux)

      安装过程中,请注意以下几点:

      • 出现以下提示(即是否将内核模块源代码注册到DKMS)时,选择Yes

        DKMS.jpg

      • 选择Yes后NVIDIA GPU可能会报注册失败提示(如下图所示),您无需担心,直接单击OK即可。

        DKMS-OK.jpg

      • 根据实际需要选择是否安装NVIDIA的32位兼容性库。

        兼容32位.jpg

    4. 执行以下命令,检测DKMS的当前状态。

      sudo dkms status

      结果显示如下,表示DKMS已安装成功。

      注册到dkms.jpg

    5. 执行ls命令,查看/usr/src/nvidia-${nvidia 驱动版本}目录下是否存放NVIDIA GPU(Tesla)驱动相关文件。

      本示例以nvidia-${nvidia 驱动版本}nvidia-470.141.03为例,请替换成您实际的驱动版本。

      目录.jpg

      说明

      NVIDIA GPU(Tesla)驱动默认将其相关代码或文件存放在 /usr/src/nvidia-${nvidia 驱动版本} 目录下,以便DKMS在内核更新后自动重新编译和安装驱动程序的内核模块。

  2. 安装新内核触发DKMS自动构建NVIDIA GPU(Tesla)驱动。

    本示例以新内核版本5.10.134-15.al8为例,请您根据业务需要替换为实际的内核版本。

    重要

    建议先安装 kernel-devel包然后安装kernel/kernel-core包,否则,DKMS不会自动构建NVIDIA GPU(Tesla)驱动。因为kernel/kernel-core包触发DKMS,而DKMS构建NVIDIA GPU(Tesla)驱动需要kernel-devel包,此时需要手动触发DKMS构建NVIDIA GPU(Tesla)驱动。具体操作,请参见步骤3:手动触发DKMS构建Tesla驱动

    1. 执行以下命令,安装新内核的kernel-devel包。

      sudo rpm -ivh kernel-devel-5.10.134-15.al8.x86_64.rpm --force

      kernel-devel.jpg

    2. 安装kernel/kernel-core包。

      本示例以安装kernel包为例。对于Alibaba Cloud Linux 3系统来说,需要安装kernel-core包,执行sudo rpm -ivh kernel-core-5.10.134-15.al8.x86_64.rpm --force命令即可。

      sudo rpm -ivh kernel-5.10.134-15.al8.x86_64.rpm --force

      kernel.jpg

    3. 执行以下命令,检查新内核下NVIDIA GPU(Tesla)驱动是否构建成功。

      find /lib/modules/5.10.134-15.al8.x86_64/ -name *nvidia*

      image

    4. 执行sudo dkms status检查DKMS是否存在新的内核记录。

      image

  3. (条件必选)如果您先安装了kernel/kernel-core包,然后安装kernel-devel包,需手动触发DKMS构建NVIDIA GPU(Tesla)驱动。

    1. 执行以下命令,构建NVIDIA GPU(Tesla)驱动。

      sudo dkms build -m nvidia -v ${nvidia 驱动的版本} -k ${新的内核版本} --force

      主要参数说明如下:

      • ${nvidia 驱动的版本}:请替换为NVIDIA GPU(Tesla)驱动的具体版本号,例如470.141.03

      • ${新的内核版本}:请替换为新内核的具体版本号,例如5.10.134-15.al8.x86_64

      image

    2. 执行以下命令,安装已构建好的NVIDIA GPU(Tesla)驱动。

      sudo dkms install -m nvidia -v ${nvidia 驱动版本} -k ${新的内核版本} --force

      image

    3. 执行以下命令,检查新内核安装目录下NVIDIA GPU(Tesla)驱动是否已安装。

      find /lib/modules/5.10.134-16.3.al8.x86_64/ -name *nvidia*

      驱动安装.jpg

    4. 执行sudo dkms status检查DKMS是否存在新的内核记录。

      image

重新适配NVIDIA GPU(Tesla)驱动

如果内核升级后导致内核的kAPI受到影响发生变化,通过DKMS无法自动构建和安装NVIDIA GPU(Tesla)驱动,您需要重新适配NVIDIA GPU(Tesla)驱动。具体操作,请参见:在GPU计算型实例中手动安装Tesla驱动(Linux)