ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

麒麟服务器安装RTX 5080驱动实战:从依赖准备到runfile安装全流程

麒麟服务器安装RTX 5080驱动实战:从依赖准备到runfile安装全流程 前阵子单位一台麒麟服务器要跑AI推理任务新采购的机器配了RTX 5080。当时心想显卡驱动不是装上就行的事吗结果真正操作起来才发现Linux服务器装N卡驱动跟Windows完全是两个世界尤其是在麒麟这种有自己软件仓库的发行版上。从最初的识别不到显卡到编译报错、模块加载失败前前后后折腾了两天才算稳定跑通CUDA。这篇文章把整个过程完整记录下来包括怎么识别系统分支、怎么准备离线依赖、具体的安装命令以及我踩过的几个比较隐蔽的坑希望能给同样在麒麟服务器上装NVIDIA 5080显卡驱动的朋友提供一份可以直接照做的参考。1. 方案选型为什么必须用570驱动以及runfile为什么最稳1.1 先分清你的麒麟是哪个“派系”麒麟服务器操作系统V10这套东西覆盖了好几种底子不同SP版本之间差别非常大。有些版本底层是RHEL系包管理用yum/dnf有些版本底层是Debian/Ubuntu系包管理用apt。这个差别如果一开始没搞清楚后面的所有操作都会跑偏。判断方法很简单两行命令的事cat /etc/os-release cat /etc/kylin-release重点看ID和VERSION_ID这两行。如果系统里同时存在/etc/redhat-release或者ID字段带redhat、centos、anolis、openeuler字样那基本就是RHEL系。如果出现ubuntu或debian字样则是apt系。我见过有人拿着基于Ubuntu的麒麟V10非要硬套yum命令装依赖结果卡在源配置上几个小时最后换了思路才跑通。这个区分为什么这么关键因为NVIDIA驱动的runfile安装包在编译内核模块时需要找内核头文件和编译工具链不同派系对应不同的依赖包名称搞错一个字母都装不上。另外麒麟系统为了保持自身稳定性软件仓库里的包版本往往比上游发行版保守尤其显卡驱动这种跟内核强绑定的包仓库里大概率是旧版本这也是后文说为什么不要轻易用系统源装驱动的原因。1.2 RTX 5080对驱动版本有硬性要求RTX 5080用的是Blackwell架构GPU代号GB203流处理器对应的计算能力是sm_120。这对Linux驱动提出了一个硬性要求驱动版本必须达到570系列以上。一开始我是直接从麒麟软件源里搜索nvidia结果把仓库里现有的rpm包装上去重启后执行nvidia-smi系统直接报“No devices were found”。查了一圈才发现麒麟仓库里的NVIDIA驱动停留在535/545这个级别这些是为Ada Lovelace架构也就是RTX 40系准备的根本不认Blackwell的新卡。显卡插在PCIe槽上系统NVIDIA驱动装好了但驱动不认识显卡硬件等于白装。后来查NVIDIA官方Release NoteBlackwell桌面显卡从570.86.16才开始有正式支持CUDA Toolkit版本要求12.8及以上。所以驱动选型的标准非常明确版本号必须570且优先选择当时官方发布的最新稳定版。GPU架构代表显卡对应驱动版本最低CUDA版本Ada LovelaceRTX 4080 / 409053512.0BlackwellRTX 5080 / 509057012.8HopperH100 / H80052512.0这里有一个很容易被忽略的点即使你用的不是5080而是3090或者4090驱动也不一定可以通用。每个大版本驱动有自己支持的GPU列表选U前顺手看一下Release Notes里的“Supported Products”列表别拿570驱动去装老卡也别拿535去装5080省得来回折腾。1.3 三种常见安装方式的取舍NVIDIA驱动在Linux上有几种装法我实际试用下来总结如下系统源安装yum/dnf/apt优点是简单但麒麟源里的NVIDIA包版本通常很旧大概率只支持到RTX 30系或40系。对5080来说这条路基本走不通。CUDA Toolkit捆绑安装NVIDIA官网的CUDA安装包会附带一个匹配的驱动。这种方式适合确定要装CUDA的场景但要注意安装包里的驱动版本不一定是最新的且一次装完两个大件出问题的时候不好定位。官网runfile安装这种方式是我最终采用的。runfile是NVIDIA官方提供的独立驱动安装包体积一百多MB包含了完整的驱动程序和安装脚本不依赖特定发行版仓库也不污染系统包管理器安装、卸载都清晰可控。最终的结论是服务器内网部署、要支持新卡runfile是最稳妥、最可控的方案。下面整个流程也是围绕runfile展开的。2. 动手前的基础准备依赖、内核、nouveau一次搞定2.1 安装编译依赖与内核头文件runfile安装驱动时会在本地编译一个内核模块这个过程需要gcc、make和当前内核对应的开发包。很多人在这一步就栽了最常见的报错是“Unable to find the kernel source tree”本质就是内核开发包没装或版本不匹配。RHEL系麒麟执行yum install -y gcc make kernel-devel-$(uname -r) kernel-headers-$(uname -r) elfutils-libelf-devel libglvnd-devel基于Ubuntu的麒麟执行apt install -y build-essential linux-headers-$(uname -r) pkg-config libglvnd-dev这里有几个细节需要特别注意。第一uname -r输出的内核版本号必须和kernel-devel的版本完全一致比如当前内核是4.19.90-25.10.v2101.ky10.x86_64那kernel-devel也必须是同版本。第二如果系统里装了多个内核一定要确认当前启动的是哪一个别给旧内核装了驱动重启进新内核还是识别不了。第三编译工具链的版本不要太新也不要太旧麒麟V10自带的gcc一般是7.x或8.x编译570驱动完全够用没必要手动升级gcc。如果服务器在内网yum源又是离线的这部分依赖包可以通过挂载麒麟ISO镜像做本地源来解决或者在能联网的机器上用yum install --downloadonly --downloaddir/tmp/deps把rpm包全部下载下来再拷贝到服务器上执行本地安装。注意下载依赖的机器架构必须是x86_64否则包不通用。2.2 禁用nouveau不然后面一定报错nouveau是Linux内核自带的NVIDIA开源驱动虽然性能不行但确实存在。NVIDIA官方驱动安装脚本在检测到nouveau在运行时会直接拒绝继续安装。就算用--no-nouveau-check强行跳过装完也容易出现花屏、黑屏、系统卡死这类问题。所以禁用nouveau是必须做的一步。创建黑名单文件cat /etc/modprobe.d/blacklist-nouveau.conf EOF blacklist nouveau options nouveau modeset0 EOF然后重建initramfs。RHEL系麒麟用dracut --force基于Ubuntu的麒麟用update-initramfs -u执行完后必须重启重启后验证一下lsmod | grep nouveau如果输出为空说明nouveau已经彻底禁用了可以继续下一步。如果还有输出大概率是initramfs没有重建成功或者系统里还有其他地方引用了nouveau模块需要检查/etc/modprobe.d/目录下是不是有多个配置文件冲突。2.3 清理旧驱动和内核模块如果这台服务器之前装过NVIDIA驱动不管是曾经失败过还是成功过都要先清理干净否则新旧驱动混在一起会出现“NVML Driver/library version mismatch”这种让人摸不着头脑的报错。一种典型场景是之前用发行版源装过驱动可以用包管理器卸载yum remove nvidia* # RHEL系 apt remove nvidia* # Debian系如果之前是runfile装的使用自带的卸载脚本nvidia-uninstall卸载之后再去检查一下内核模块目录里有没有残留的nvidia相关文件ls /lib/modules/$(uname -r)/kernel/drivers/video/看到nvidia*.ko就把它们删掉。这个步骤很多人会忽略但恰恰是最容易留坑的地方。老模块残留在initramfs里新驱动装完重启内核可能会先加载旧模块导致新工具链和旧内核模块接口对不上报错信息五花八门排查起来非常浪费时间。2.4 内网环境下怎么凑齐离线安装包麒麟服务器部署在内网是常态依赖包和驱动文件都得提前备好。我的经验是准备两样东西一是编译依赖的rpm包。在有外网的机器上执行yum install --downloadonly --downloaddir/tmp/deps gcc make kernel-devel-$(uname -r) kernel-headers-$(uname -r) elfutils-libelf-devel libglvnd-devel然后把/tmp/deps整个目录拷贝到服务器服务器上执行yum localinstall /tmp/deps/*.rpm最后取消这个本地rpm包的缓存避免污染系统源。二是NVIDIA驱动runfile本身。这个文件是完整的离线包不需要在线下载其他内容。我自己习惯在内网机器上建一个/opt/nvidia目录专门放驱动和之后要用的CUDA Toolkit安装包方便统一管理、多台机器复用。同时建议把驱动版本号写进文件名比如NVIDIA-Linux-x86_64-570.124.06.run时间一长你就知道哪个文件对应哪个版本不然隔几个月再回来看一堆run文件完全分不清。另一个重要提醒是装完驱动后不要急着升级内核。runfile驱动默认不会自动注册到DKMS每次内核升级后都必须手动重新编译安装。如果确实需要升级内核建议先把驱动卸载、升级内核、再重装驱动顺序反了模块就废了。3. 驱动安装全流程实操记录3.1 下载驱动并校验文件完整性浏览器直接访问NVIDIA官网驱动下载页面选择Linux、x86_64、生产分支会得到一个类似NVIDIA-Linux-x86_64-570.124.06.run的文件。下载后建议做一次MD5校验防止传输过程中文件损坏md5sum NVIDIA-Linux-x86_64-570.124.06.run从官网页面复制一下官方MD5值能对上再继续。这一步看似多余实际很有必要我从网盘下载过一份损坏的驱动安装到一半突然报“corrupted installer, cannot continue”又重新传了一遍才解决。在跨网络传输大文件时文件完整性校验就是省时间的关键。3.2 切换运行级别并执行安装如果服务器上有图形界面必须先切到纯命令行模式否则安装脚本检测到X Server正在运行会直接报“The X server is running”。切换命令统一用systemctl isolate multi-user.target或者传统一点用init 3。切完之后按CtrlAltF2进到字符终端确认没有图形进程再用。接下来执行安装chmod x NVIDIA-Linux-x86_64-570.124.06.run sudo sh NVIDIA-Linux-x86_64-570.124.06.run --no-opengl-files --dkms这里我用了两个关键参数它们的作用值得说明一下。--no-opengl-files的意思是不要安装OpenGL相关的库文件。在纯计算、AI训练推理、无头服务器场景下这个参数能避免NVIDIA的OpenGL库和系统自带的Mesa/OpenGL实现产生冲突减少桌面环境出问题的概率。但如果你的服务器将来要做GPU渲染、硬件编解码或远程虚拟桌面那OpenGL库还是需要的这时候就不要加这个参数。--dkms是把内核模块注册到DKMS以后内核升级时DKMS会自动帮助重新编译驱动模块对服务器长期运维来说是刚需。不过使用--dkms前需要系统已安装dkms包麒麟仓库里一般有先执行yum install dkms或者apt install dkms装上即可。安装脚本运行过程中会问几个问题比如是否接受许可协议、是否安装32位兼容库等。接受协议、选Yes即可。整个编译过程大概五到十分钟取决于CPU性能。看到“Installation done”说明驱动已经装好。我很建议这一步骤结束后仍然重启一次机器因为虽然理论上装完直接加载模块也能用但让新模块彻底替换旧环境最稳。我第一次装完图省事不重启直接跑nvidia-smi发现3D加速没有真正生效重启后一切正常。3.3 验证驱动与CUDA可用性重启后执行nvidia-smi正常会看到类似这样的输出----------------------------------------------------------------------------- | NVIDIA-SMI 570.124.06 Driver Version: 570.124.06 CUDA Version: 12.8 | |--------------------------------------------------------------------------- | 0 NVIDIA GeForce RTX 5080 ... | -----------------------------------------------------------------------------看到显卡型号和驱动版本都正确列出来说明驱动安装成功了。这里需要强调一个很多人都会误解的点nvidia-smi输出的“CUDA Version”表示的是当前驱动支持的最高CUDA运行时版本并不代表你已经安装了CUDA Toolkit。要跑CUDA程序还需要单独安装CUDA Toolkit版本必须低于或等于驱动支持的版本。对于5080最低要求是CUDA 12.8如果你要跑的框架比如PyTorch需要更高版本同样要确认驱动是否支持。4. 安装中最容易翻车的问题与排查实录4.1 “kernel source tree not found”基本是依赖没对这个报错算是runfile安装中最常见的一道坎。完整信息一般是这样The kernel build path is /lib/modules/4.19.90-25.10.v2101.ky10.x86_64/build but this directory does not exist原因很明确内核开发包没装或者装错了版本。解决路径如下uname -r yum list installed | grep kernel-devel如果kernel-devel没装上用2.1节的命令补装。如果装了但版本跟uname -r对不上那就重新安装对应版本yum reinstall kernel-devel-$(uname -r)还有一种情况是/lib/modules/$(uname -r)/build这个软链接断了需要手动重建ln -s /usr/src/kernels/$(uname -r) /lib/modules/$(uname -r)/build这个报错排查起来不难但很耗耐心尤其是麒麟系统自带多个内核版本的时候。建议固定一个内核启动用grub2-set-default 0指定默认启动项避免驱动和内核反复失配。4.2 nvidia-smi报NVML mismatch新旧模块打架症状是执行nvidia-smi时报错NVML Driver/library version mismatch这几乎都是因为没有卸载干净旧驱动。旧NVIDIA内核模块还挂在内存里新工具链已加载新模块两者接口对不上就会出这个提示。最快的处理办法是重启让系统干净地加载新模块。如果重启后依旧报错需要重建initramfsdracut --force或者update-initramfs -u再做一次新旧模块的彻底替换。这个问题在升级驱动时特别容易出现所以升级前一定要把旧驱动完全清理干净别想着直接覆盖安装。4.3 Secure Boot让模块加载失败新版服务器主板默认开启Secure Boot时NVIDIA内核模块因为没有签名会无法加载。症状是nvidia-smi报告找不设备dmesg里能看到类似permission denied的错误日志。解决办法有两个。最省事的是进BIOS关闭Secure Boot。很多服务器的BMC远程控制台就能操作不用跑到机房按电源键。另一种是用mokutil对驱动模块签名这个方案非常麻烦涉及密钥生成、导入、重启确认等多个环节在内网环境性价比极低除非有硬性合规要求否则直接关Secure Boot就好。这个操作只影响启动时的签名校验不影响系统安全性和业务运行。4.4 双显卡环境下的驱动冲突与处理服务器上如果有两块不同型号的N卡或者N卡加Intel集显的组合装驱动也容易出问题。最常见的现象是集显输出画面的机器N卡驱动装完后显示器没输出。这不一定代表驱动装坏了很多时候是因为N卡没有连接显示器系统图形输出完全由集显承担N卡被当作纯计算卡使用这是正常状态。用nvidia-smi -L确认GPU是否被系统识别只要能看到显卡驱动就是正常的。多卡场景还要注意电源供电。5080这个级别功耗不低服务器电源如果带不动或者PCIe供电线没插好驱动装完GPU也会显示在PCIe列表里但跑计算直接掉卡或性能大降。这时候先查BMC日志看功耗和传感器别急着重装驱动。对于N卡A卡这样的跨厂商异构环境两个驱动可以共存但要注意kernel module的加载顺序。实际踩坑下来建议先禁用nouveau和amdgpu的自动加载再用rungile安装各自的官方驱动最后重启。这样做冲突概率最低。4.5 常见错误速查表错误信息可能原因处理方式No devices were found驱动版本太旧不识别5080更换570驱动No devices were foundnouveau没有完全禁用重新配置黑名单并重建initramfsThe kernel build path ... does not existkernel-devel缺失或版本不匹配安装匹配内核版本The X server is running图形界面还在运行切换到multi-user.targetUnable to load the nvidia-drm kernel module内核模块编译失败或Secure Boot开启检查编译依赖关闭Secure BootNVML Driver/library version mismatch新旧驱动模块共存卸载旧驱动后重启gcc: command not found缺少编译工具链安装gcc和makeCould not load libcuda.so.1CUDA Toolkit未安装或LD_LIBRARY_PATH未配置安装CUDA Toolkit并配置环境变量这里的每一类问题我在实际安装过程中几乎都遇到过尤其是“No devices were found”这个提示背后原因最多一定要从驱动版本、nouveau状态、硬件供电三个方向分别排查不要再重装无用功。这套流程后面我又在另外几台机器上验证过只要把系统分支认准、依赖备齐、旧驱动清干净RTX 5080在麒麟服务器上装驱动其实是比较流畅的。最后再说两个小技巧如果你之后要装CUDA Toolkit一定先把驱动装好再去装CUDA顺序反了CUDA很可能会把驱动覆盖成旧版本导致显卡再次失联另外NVIDIA的runfile支持--update参数紧急情况下可以只更新驱动而不动CUDA这在排查环境问题时很实用。记住这两点能少走不少弯路。
返回列表