news 2026/10/5 15:41:52

Ubuntu下Tesla A100驱动离线安装全攻略:避开nouveau与黑屏

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu下Tesla A100驱动离线安装全攻略:避开nouveau与黑屏

搞 AI 训练和科学计算的朋友,一定对 NVIDIA Tesla A100 不陌生。这家伙 80GB HBM2e 显存、NVLink 互联、Ampere 架构,一台机器顶上好几张消费级显卡,是大模型训练和推理任务里的绝对主力。但很多刚接触服务器的同学,第一次在 Ubuntu 20.04 上装 A100 驱动就翻车了,不是卡在 nouveau 冲突,就是装完 nvidia-smi 报错说无法和驱动通信,要么就是重启后直接黑屏进不了系统。

这很正常。特斯拉系列驱动安装和桌面级显卡完全是两个套路,而且服务器环境千差万别,系统版本、内核、固件、BIOS 设置都会影响结果。这篇文章我就以 Tesla A100 为例,把驱动安装的完整链路、每一步的原理和坑位都拆开讲一遍,从环境检查到离线安装,再到故障排查,全程是可以直接照着抄作业的。无论你是实验室管理员、算法工程师还是运维,按照这个流程走一遍,至少能少踩一半的坑。

1. 项目概述:A100 驱动为什么这么难装

1.1 为什么 A100 驱动安装和消费级显卡不是一个套路

特斯拉系列和 GeForce 系列驱动不一样,A100 用的是 NVIDIA 数据中心专属驱动分支,必须去 NVIDIA 官网的驱动下载中心选择 “Tesla” 产品类型才能找到对应版本。它不包含你去玩游戏用的那些组件,OpenGL 之类的桌面支持被剥离或者弱化了,主要面向 CUDA、cuDNN、TensorRT 这种计算场景。

还有一个差异点:服务器上大多没有显示器、没有桌面环境,很多安装流程是纯命令行完成的。但 A100 服务器也经常有人临时装了 Ubuntu 桌面版当开发机用,这时候桌面环境的存在就会带来很大麻烦。比如 nouveau 驱动和 nvidia 驱动抢设备,X server 占用显卡,安装时停在 “You appear to be running an X server” 这种提示。如果没搞清楚这个,后面就非常被动。

另一个容易被忽略的点是时间线。A100 发布时配套的驱动是 R450 系列,之后 NVIDIA 将数据中心驱动合并为 “R470”、“R525” 这种长期支持分支。如果你给 A100 装了一个 470 之前的旧驱动,大概率新卡识别不了;如果系统内核太新,比如 Ubuntu 22.04 自带 5.15 以上内核,早期 450 系列的驱动编译模块时也可能报一堆错。驱动版本不光要匹配显卡架构,还要匹配内核版本、CUDA 版本,是一条完整的依赖链。

1.2 这篇文章适合谁,能帮你解决什么

如果你属于下面这几类人,这篇文章就是写给看的:

  • 刚拿到带 A100 的服务器,准备装 Ubuntu 跑 CUDA 环境的人
  • 实验室管理员,想把驱动装得干净、稳定,避免反复重装
  • 之前用 apt 或 runfile 装过但失败,遇到过 nvidia-smi 无法通信、nouveau 冲突、黑屏、开机循环等问题的人
  • 需要了解不同安装方式(apt、CUDA Toolkit 内置驱动、runfile)之间差异的人

我会把完整的离线安装流程写出来,同时把关键原因解释清楚。你不是只知道敲命令,而是知道为什么敲这些命令,出了问题也知道去哪里看。这比网上大多数“三步装机”教程要实用得多。

2. 安装前的环境检查与物料准备

2.1 先确认系统版本和内核

我强烈建议,安装之前先花 5 分钟把服务器环境摸清楚。不要拿到手就往里装,很多时候装不上不是驱动本身有问题,而是环境不具备条件。

先看系统发行版和内核版本:

lsb_release -a uname -r

A100 的驱动安装针对 Ubuntu 20.04 和 Ubuntu 22.04 的兼容性都很好,但内核版本影响比较大。比如 Ubuntu 18.04 默认内核 4.15,老版本内核编译新驱动时经常因为数据结构不匹配而报错误;Ubuntu 22.04 的 5.15 内核则是目前兼容性最好的内核之一。如果是其他发行版,比如 CentOS/Rocky Linux,安装逻辑类似,但包管理器、依赖和 initramfs 更新方式不同,这里我主要以 Ubuntu 的流程展开。

然后需要确认编译工具链和内核头文件是否齐全,因为 NVIDIA 驱动安装时会把内核模块 nvidia.ko 现场编译出来。没有 gcc 和 make,安装脚本直接跑不起来;没有内核头文件,编译模块时各种 “Cannot find kernel header files” 的报错就会出现。

gcc --version make --version dpkg -l | grep linux-headers-$(uname -r)

如果没装,先补上:

sudo apt update sudo apt install -y build-essential dkms sudo apt install -y linux-headers-$(uname -r)

这里特别说一下 DKMS。只要你想在升级内核之后不用手动重装驱动,就一定装上 DKMS。驱动注册进 DKMS 后,新内核更新时会自动重新编译 nvidia 模块,解决内核升级导致驱动失效的老大难问题。

2.2 识别硬件与驱动版本匹配

硬件识别要分两步。第一步在操作系统层面看显卡有没有被发现:

lspci | grep -i nvidia

正常的 A100 PCIe 卡会显示类似下面的信息:

01:00.0 3D controller: NVIDIA Corporation GA100 [A100 PCIe 40GB] (rev a1)

注意,如果显示的是 “VGA compatible controller”,说明设备已经被某种驱动接管了;如果显示 “3D controller”,意味着这是纯计算卡,通常没有 VGA 输出,这也是很正常的。

如果 lspci 完全没有 NVIDIA 设备,那问题多半不在驱动,而是物理硬件没有正常工作,常见原因包括:PCIe 插槽供电不足、卡没有完全插到位、主板 BIOS 设置里禁用了 PCIe slot、或者是 GPU 的 8-pin 电源线没接。这种情况下就算装好驱动,nvidia-smi 也不会看到任何卡。

第二步是确认驱动版本。A100 需要的最小驱动分支是 R455 之后才行,不过现在都 2025 年了,我建议至少装到 R525 以上,R535、R545 也都很稳定。可以查一下 NVIDIA 官网的 CUDA 与驱动兼容矩阵,核心原则是:你用的 CUDA 版本不能超过驱动的最高支持版本。比如 CUDA 12.4 要求驱动最低 550.54.14 这样,如果你机器上跑的是旧驱动,CUDA 就只能后退到旧版本。

我个人的习惯是:如果是新装环境,直接装最新长期支持分支的驱动;如果环境里有固定的 CUDA 和框架依赖,那就按兼容矩阵选一个折中的版本,不要盲目追新,稳定是第一位的。

2.3 编译环境、nouveau 与 Secure Boot 的处理

A100 驱动安装前有两条硬规矩必须处理:

第一条是禁止开源的 nouveau 驱动。Ubuntu 内核自带的 nouveau 模块会在系统启动时加载,然后占用显卡资源,NVIDIA 驱动无法和它共存,安装过程中经常出现 “Unable to load the kernel module"、"Nouveau is running” 这类报错。禁止 nouveau 的做法如下:

新建一个配置黑名单文件:

sudo bash -c 'echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf' sudo bash -c 'echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf'

然后更新内核镜像:

sudo update-initramfs -u

重启后,用lsmod | grep nouveau确认模块没有加载。如果重新加载了,看下是不是 BIOS 里某些兼容模式导致的内核模块强制加载,或者配置文件生效有延迟。

第二条是 Secure Boot。现在不少服务器默认开启了 UEFI Secure Boot,而 NVIDIA 驱动模块没有签名,会被内核拒载。如果你不想跟 MOK 签名流程纠缠,最简单的做法是进 BIOS 把 Secure Boot 关掉。如果你用的是云服务器或者物理机不允许关闭,就需要走签名流程,步骤会复杂不少。对于绝大多数自建实验室服务器,关掉 Secure Boot 是大家普遍的操作方式。

2.4 离线安装包的准备思路

接下来是核心物料的准备:驱动安装包。

很多服务器是不联网的,或者外网访问不稳定,所以我一直推荐提前下载好驱动安装包,通过 scp 或者挂载方式传到服务器,再本地离线安装。下载位置是 NVIDIA 官网的驱动下载中心,产品类型选择:

  • 产品类型:Tesla
  • 产品系列:A100
  • 操作系统:Linux 64-bit
  • 推荐下载类型:生产分支/最新分支

下载下来一般是这样一个文件名:

NVIDIA-Linux-x86_64-550.54.15.run

如果你用的是最新分支,名字类似:

NVIDIA-Linux-x86_64-550.54.15.run

在下载时页面上也会同时显示对应 CUDA 版本支持,很好判断。

这里有个小坑是坑过我的:很多人会顺手从 “GeForce 驱动下载中心” 下载驱动,结果发现产品列表里根本没有 Tesla 选项。别下错,A100 必须要走数据中心驱动分支,桌面版的驱动即使硬塞进去也无法支持 A100 的某些特性,比如 MIG。

3. 三种安装方式对比:apt、CUDA Toolkit 与 runfile

3.1 Ubuntu 自带 apt 驱动的上限

Ubuntu 上装 NVIDIA 驱动有几种路径,最常见的第一种是 apt。

sudo ubuntu-drivers devices

这条命令会列出推荐的第三方驱动包。apt 方式的最大优点就是省心,依赖自动搞定,版本也经过 Ubuntu 发行版测试。但它有一个明显的劣势:软件仓库里的版本通常不是最新的,而且对于超前的硬件支持的时效性一般。Tesla A100 发布初期,18.04 的 apt 仓库里就没有合适版本的驱动,很多人 apt 安装之后 nvidia-smi 直接找不到卡。

另外 apt 装的驱动其实是多个包的组合,包括 nvidia-driver、nvidia-dkms、libnvidia-compute 等一堆。装完之后想完全卸载,得小心翼翼地清理。我个人的态度是:桌面级显卡、开发机图省事,用 apt 没问题;但作为生产服务器的 A100,我不太建议用 apt,版本控制更明确的 runfile 更好。

3.2 CUDA Toolkit 自带的驱动依赖

第二种方式是装 CUDA Toolkit 时顺带装驱动。CUDA Toolkit 的本地安装包里有 cuda-drivers 这个依赖,你用sudo apt install cuda-toolkit或者直接执行 runfile 时选上驱动组件,就会把 NVIDIA 驱动一并装上。

这个方法的好处是版本一定和 CUDA 兼容,不用自己对照匹配。缺点也有:手滑把整个 CUDA Toolkit 都装上,可能会引入一堆你根本用不到的库,而且如果后来用其他方式重装了驱动,CUDA 安装器记录的依赖状态可能混乱。

我一般建议:先单独装一个稳定的驱动,再单独装 CUDA Toolkit(选择只装 Toolkit 的 .run 包),这样责任边界清晰,排查问题的时候也不用怀疑驱动和 CUDA 不是一套。

3.3 为什么生产环境我首选 runfile

第三种就是 runfile 手动安装,也是我最推荐给 A100 用户的方式。

runfile 安装包是 NVIDIA 官方的完整安装脚本,把驱动、DKMS、nvidia-smi、库文件全部打到一个包里。执行时你可以通过命令行参数细化控制,比如禁用 OpenGL、禁用 kernel module 之外的某些组件。它最大的优点是,不依赖发行版的软件仓库策略,内核模块直接针对当前内核现场编译,安装过程黑盒程度低,用户能清楚看到每一步输出了什么。

缺点就是你得自己准备依赖(gcc、make、kernel headers),并且得自己处理 nouveau、Secure Boot 这些问题。但对于能读到这篇文章的人来说,这些都不是难事。一次性把环境理干净,后面会少很多麻烦。

下面的实操流程,我采用的就是 runfile + 离线包的方式,这也是 NVIDIA 官方推荐的企业级安装方式。

4. 实操:Ubuntu 20.04/22.04 下 Tesla A100 驱动离线安装全流程

4.1 第一步:备份和清理旧驱动

如果这是全新系统,可以跳过这段,但如果你已经试过 apt 安装或者其他方式,建议先做一遍清理,避免残留冲突。

如果你确定之前是通过 apt 装的,先卸载干净:

sudo apt purge nvidia-* -y sudo apt autoremove -y

如果之前是用 runfile 装的,用 NVIDIA 官方卸载脚本:

sudo /usr/bin/nvidia-uninstall

这两个命令可能因为驱动包名称不同而报错,没关系,只要尽力清理即可。还应该删除旧的手动拷贝内核模块:

sudo rm -f /lib/modules/$(uname -r)/kernel/drivers/video/nvidia*.ko sudo rm -f /lib/modules/$(uname -r)/kernel/drivers/char/nvidia*.ko

然后sudo update-initramfs -u刷新一下,避免旧的 initramfs 里还带着 nvidia 相关的残留引用。

4.2 第二步:禁用 nouveau 并进入字符界面

这一步在服务器上不一定必须,但如果你的服务器安装了 Ubuntu 桌面版,或者你看到类似 X server 在运行的提示,就得处理。

新装环境直接把 nouveau 拉黑:

sudo bash -c 'echo "blacklist nouveau" >> /etc/modprobe.d/blacklist-nouveau.conf' sudo bash -c 'echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf' sudo update-initramfs -u sudo reboot

重启之后确认 nouveau 没有加载:

lsmod | grep nouveau

这时候模块列表应该是空的。

接下来要关闭图形桌面服务。如果你运行的是纯服务器版,没有图形界面,这一步跳过;如果有图形界面,执行:

sudo systemctl set-default multi-user.target

然后重启进入纯字符模式,或者直接在图形模式下切 tty,再用 root 做安装:

sudo init 3

注意:在图形界面下直接执行驱动安装脚本,大概率会碰到 “You appear to be running an X server” 的报错。与其后面再处理,不如一开始就准备好字符环境。

这里给个经验:如果是在数据中心远程管理,切到 multi-user.target 之后会断掉图形会话,但 ssh 连接不受影响,所以放心操作。

4.3 第三步:运行驱动安装脚本

先把 runfile 上传到服务器,然后赋可执行权限:

chmod +x NVIDIA-Linux-x86_64-550.54.15.run

执行安装之前,我先把常用参数解释一遍:

  • --no-opengl-files:不安装 OpenGL 相关文件。服务器不需要图形显示,加这个参数能避免和桌面环境的 GLX 冲突,降低黑屏概率。
  • --no-nouveau-check:安装程序默认会检查 nouveau 是否加载,如果已经通过黑名单禁用了,加不加都行。
  • --dkms:注册到 DKMS,建议加上。
  • --silent:静默模式。清楚自己要装什么的情况下,可以静默安装,但新手建议不加,看交互输出更安心。

交互模式的安装命令:

sudo ./NVIDIA-Linux-x86_64-550.54.15.run --no-opengl-files --dkms

执行后会有一堆询问,比如:

  • 是否接受 license:选 Yes
  • 是否安装 32 位兼容库:对纯计算环境可选 No
  • 是否运行 nvidia-xconfig:选 No,服务器没有显示器,不需要生成 X 配置文件

如果加了--silent,命令就是:

sudo ./NVIDIA-Linux-x86_64-550.54.15.run --silent --no-opengl-files --dkms

安装输出一般会显示 unload old driver、build kernel module、install library 这些阶段。这个阶段耗时取决于机器性能,一般 2-5 分钟,因为要现场编译 nvidia.ko。

如果编译时出现如下错误:

ERROR: Unable to load the kernel module 'nvidia.ko'. This happens most frequently when this kernel module was built using the wrong version of gcc or kernel header files.

可以尝试清理/var/lib/dkms/nvidia*和/usr/src/nvidia-*,确保 gcc、内核头文件版本匹配,然后重新执行安装脚本。

安装脚本可以在安装结束后自动帮你触发 module load,但有时它不会,所以最好自己再执行一遍:

sudo modprobe nvidia sudo modprobe nvidia_uvm sudo modprobe nvidia_drm sudo modprobe nvidia_modeset

如果modprobe nvidia报错,先看下 dmesg 输出:

sudo dmesg | tail -50

这里能看到内核给 nvidia 模块的签名、IRQ 或资源冲突等报错信息。

4.4 第四步:加载 nvidia 模块并验证

模块加载成功后,输入:

nvidia-smi

正常情况下会看到一张表格,显示驱动版本、CUDA 版本和 A100 的显存信息。例如:

+-----------------------------------------------------------------------------+ | NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | 0 A100-PCIE-40GB On | 00000000:01:00.0 On | 0 | +-------------------------------+----------------------+----------------------+

看到这张表说明驱动已经正常工作了。

要注意,在纯计算环境中,Disp.A那一列通常显示的是 Off,这是正常的。A100 本身没有显示输出,驱动是否启用了显示模式并不影响计算。

验证时再跑一下 CUDA 的 runtime 检测,最简单的就是编译 CUDA 自带的 deviceQuery 示例,或者直接用 PyTorch 确认 CUDA 可用:

python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"

如果输出True Tesla A100-PCIE-40GB,说明驱动和 CUDA 配合没问题。

5. 安装后的配置与性能验证

5.1 开启 Persistence Mode

A100 有一个特性叫做 Persistence Mode。默认情况下,显卡驱动在最后一次任务结束后会释放显存和资源,导致每次新的 GPU 任务初始化时都要重新加载一些状态,带来额外的延迟和功耗波动。对于频繁提交小任务的场景(比如交互式调试、推理服务),影响比较明显。

开启方式:

sudo nvidia-smi -pm 1

开启后,nvidia-smi里 Persistence-M 一列就会变成 On。

这个设置建议写入开机启动,不让它在重启后失效。方法是在 systemd 里加一个简单的服务文件,或者把命令写到 rc.local。我个人习惯用服务:

sudo systemctl enable nvidia-persistenced

NVIDIA 提供了一个叫 nvidia-persistenced 的工具,有些发行版需要单独安装,如果你 runfile 装好没看到这个命令,就手动在 systemd 里加上面那一句,或者用 crontab 的 @reboot 都行。

5.2 确认 ECC、带宽与多卡拓扑

A100 上的 HBM2e 显存默认是开启 ECC 的,做科学计算的人最好确认一下 ECC 是否开启,因为很多训练场景对数值正确性要求很高,ECC 可以纠正单位翻转错误。查看方式:

nvidia-smi -q | grep -i ecc

如果你需要更高显存带宽,并且确认你的任务不需要 ECC,可以手动关闭 ECC,但我不建议生产环境关。A100 的 ECC 对训练稳定性是有利有弊,对于大多数任务开着就行。

然后检查一下 PCIe 链路速度,确认带宽没有受物理条件影响:

nvidia-smi -q | grep -i pci

正常 A100 会显示 PCIe Gen4,如果是 Gen3 或者 x8 而不是 x16,得检查插槽和主板配置,否则显存带宽和 CPU 之间数据传输会成为瓶颈。

多卡环境下建议看下拓扑结构:

nvidia-smi topo -m

它能列出 GPU 和 GPU/NIC 之间的线缆连接情况,NVLink 是否有启用,以及 PIX、PXB、NODE 等 CPU 连接级别,这对多机多卡通信方案非常重要。如果发现两张 A100 之间显示的是 PHB 而不是 NV 连接,说明 NVLink 没接对。

5.3 做一个冒烟测试

驱动装好之后,我建议立刻做一次标准的冒烟测试,确保不是只有 nvidia-smi 能看,实际计算也没有问题。

最简单的测试是算一个小的矩阵乘法:

nvidia-smi

然后用 Python 快速验证 CUDA/GPU 计算:

python3 -c " import torch a = torch.randn(1024, 1024, device='cuda') b = torch.randn(1024, 1024, device='cuda') c = torch.matmul(a, b) torch.cuda.synchronize() print('GPU compute OK') "

如果没有 PyTorch,可以用 CUDA 自带的 bandwithTest 工具。在 CUDA Toolkit 安装目录下,样例工程编译一下就能测试显存带宽。这一步主要排查驱动有没有出现隐性的计算错误、显存读写是否正常。

6. 高频问题排查实录与避坑清单

6.1 “nvidia-smi has failed because it couldn't communicate with the nvidia driver”

这个错误是关于驱动的问题里出现频率最高的。字面意思就是 nvidia-smi 这个工具无法和内核里的 nvidia 驱动通信。换句话说,用户态工具找到了,但内核模块没加载,或者加载失败。

排查步骤:

第一步,看模块有没有加载:

lsmod | grep nvidia

如果输出是空的,就像我前面说的,手动加载一下:

sudo modprobe nvidia

如果 modprobe 报错,看内核日志:

sudo dmesg | grep nvidia sudo journalctl -k --no-pager | tail -100

常见的情况是编译 nvidia.ko 所用 gcc 和当前运行内核编译所用 gcc 不一致。比如系统全新装好,gcc-11 和 gcc-12 并存,导致模块加载不进去。解决办法是明确指定版本对齐,或者清理完编译工具链再重新安装驱动。

第二种情况是模块加载时报签名问题,日志里会出现 “Required key not available” 或 “Module has invalid signature”。这就是我前面提到 Secure Boot 没有关闭。要么进 BIOS 关闭,要么启用模块签名。

第三种情况是驱动和内核版本严重不兼容,模块文件没有针对当前内核编译。确认一下/lib/modules/$(uname -r)/updates/dkms/下有没有 nvidia.ko 文件,没有的话就要重新 runfile 安装一遍。

6.2 “nvrm: Can't find an IRQ for your NVIDIA card”

这个报错在部分服务器环境中比较常见,尤其是在虚拟化平台或者某些 BIOS 配置下安装时出现。意思是 NVIDIA 驱动模块在启动时找不到一个合适的中断号分配给 GPU 设备。

导致这个问题的原因通常跟 MSI/MSI-X 中断分配有关。常见场景是,主板 BIOS 里的 PCIe AER 或者 IOMMU 配置有问题,导致设备无法正确分配中断资源。一般的处理思路是:

  • 重新启动,到 BIOS 里关闭 ACS、SR-IOV,或者打开 BIOS 中 “Above 4G Decoding”,显存过大时设置这个选项会改善地址分配和中断分配。
  • 在内核启动参数里加pci=realloc,让系统重新分配 PCI 资源。
  • 如果机器是虚拟机,比如 KVM,检查是否给 GPU 透传分了足够的中断资源,尝试在宿主机关闭 IOMMU。

说实话,这个问题在不同板卡上的表现差异很大,没有统一的万能解法,但按上面这些顺序试一遍,大部分情况都能解决。真解决不了,我也曾在论坛里见过有人靠反复重启甚至换物理插槽解决的,说到底还是资源分配层面的问题。

6.3 重启后停在登录界面或黑屏

这种情况多发生在有桌面环境的机器上。安装时没有加--no-opengl-files,或安装后 X server 加载了 nvidia-opengl 的 GLX 模块但与显示管理器版本不兼容,系统就会在图形启动时崩溃,表现是黑屏或者反复回到登录界面。

解决办法:

如果还能进命令行,切换到 tty(Ctrl+Alt+F2),重新以 root 登录,然后:

sudo nvidia-xconfig

生成一个基础的 X 配置,或者把 xorg.conf 删掉,让系统用 Xorg 自带的模式:

sudo rm /etc/X11/xorg.conf

最稳妥的方法是回滚:重新执行安装脚本,这次加上--no-opengl-files,不要覆盖 OpenGL 相关文件。

sudo ./NVIDIA-Linux-x86_64-550.54.15.run --no-opengl-files --dkms

在服务器环境中,其实我建议干脆把图形界面卸载掉,直接用纯 server 版。深度学习服务器的核心是计算资源,不需要图形界面浪费内存和 GPU 上下文。

6.4 升级内核后驱动丢失

Linux 内核升级后,原来安装的驱动经常失效。原因是内核模块是针对旧内核编译的,新内核用了全新的模块目录,启动时找不到对应的 nvidia.ko。

如果你的驱动是注册了 DKMS 的,这问题一般不会出现。DKMS 会在新内核安装时自动编译新的模块镜像。你可以检查一下 DKMS 状态:

dkms status

如果输出显示 nvidia、installed,说明驱动跟上了;如果显示 “需要 build”,说明 DKMS 编译失败了,这时候要看编译日志:

sudo dkms install -m nvidia -v 550.54.15

顺便确认新内核的头文件是否安装了。如果没安装,DKMS 也无法编译:

sudo apt install linux-headers-$(uname -r)

为了避免内核升级导致机器无法启动,还有个经验可以分享:内核升级后,重启前先去/lib/modules/<新内核>/updates/dkms/看一眼 nvidia.ko 是否生成,如果没生成就别急着重启,先把问题解决再重启。

6.5 其他高频问题速查表

下面这个表是我实际操作中积累下来的一些常见问题汇总,可以作为排查时的参考:

问题/现象可能原因解决方向
安装时报 “Unable to find a suitable kernel header”内核头文件缺失安装 linux-headers-$(uname -r)
安装时报 “gcc version mismatch”系统 gcc 与编译内核用的 gcc 不一致升级或回退 gcc,保证版本一致
nvidia-smi 能看到 GPU 但显存显示 0显存 ECC 初始化异常或模块异常重置卡:nvidia-smi --gpu-reset
驱动装完,CUDA 编译报错找不到 libcuda.soLD_LIBRARY_PATH 未配置添加 /usr/local/cuda/lib64 到环境变量
多卡情况下只有一张卡能识别PCIe 插槽、NVLink 桥接问题检查硬件连接与插槽供电,查看nvidia-smi topo -m
“Failed to initialize NVML: Unknown Error”驱动服务或 nvidia-smi 与驱动版本不匹配完全卸载重装驱动
MIG(多实例 GPU)开启报错驱动版本不支持或模式未开启确认驱动 R465+,使用nvidia-smi mig -cgi配置

排错的时候,心态要放稳。显卡驱动问题最大的特点是表象相似但根因可能完全不同,不能只看最上面的报错就下手。先确认模块有没有加载,再看 dmesg,最后检查配置文件。顺序对了,大部分问题都能定位。

7. 写在最后:一点个人经验

A100 驱动安装这件事,说难也难,说简单也简单。难在,你要面对的是硬件厂商、操作系统内核、桌面环境、CUDA 工具链多方协同的问题;简单在,只要环境准备充分、安装参数合理,它其实一次就能过。

我个人目前最稳妥的组合是:Ubuntu 22.04 + 5.15 内核 + 最新长期支持分支的 Tesla 驱动 + DKMS + 关闭 Secure Boot + 禁用 nouveau。这套组合我已经在很多台 A100 服务器上实际跑过,基本没有踩过不可预测的坑。

最后再分享一个非常实用的小技巧:每次驱动安装成功后,把驱动安装包、安装命令和你的内核版本记录下来,放在一个叫driver-install-notes.txt的文件里,放在服务器 root 家目录下。这样等哪一天内核更新或者需要重建环境,翻一下这个文件,就能快速恢复到之前稳定的状态。很多人会安装完就把安装包删了,等需要重装时才后悔,我就是过来人。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 15:39:29

RIP协议综合练习:从RIPv2配置到路由防环与排障实战

1. 实验背景&#xff1a;RIP协议综合练习到底在练什么以前带新人做路由协议实验&#xff0c;我最喜欢让他们先碰RIP协议。别看这协议老得掉渣&#xff0c;距离矢量那套“听邻居说、算跳数、定期广播”的玩法&#xff0c;恰恰是理解所有动态路由协议的底座。这份rip综合练习&…

作者头像 李华
网站建设 2026/10/5 15:37:49

74HC138译码器从原理到实战:IO扩展、接线与踩坑经验

刚把一个项目里的数码管驱动方案从“一颗芯片扫一位”改成74HC138译码器来做位选&#xff0c;省下的IO直接拿去接按键和编码器&#xff0c;整块板的走线也清爽了不少。每次用到这颗芯片我都觉得它是数字电路里典型“花小钱办大事”的代表——一颗几毛钱的芯片&#xff0c;能把3…

作者头像 李华
网站建设 2026/10/5 15:37:48

Simulink与Carsim联合仿真的档位控制策略建模与实战

Simulink 和 Carsim 这对组合&#xff0c;在汽车控制策略开发里用得是真多&#xff0c;尤其是做自动变速器控制、自适应巡航、能量管理这些方向的工程师&#xff0c;基本都绕不开档位控制这一关。我自己刚接触那阵子也踩了不少坑&#xff0c;比如信号名对不上导致仿真直接报错、…

作者头像 李华
网站建设 2026/10/5 15:37:27

从零实现Linux多进程TCP并发服务器:原理、代码与排坑实战

开篇&#xff1a;先别急着写代码&#xff0c;想清楚为什么是多进程说句实话&#xff0c;现在一聊到Linux服务器编程&#xff0c;很多人第一时间想到的是epoll、io_uring、Reactor模型这些"高级货"&#xff0c;觉得多进程模型太"老古董"了。但我在实际项目里…

作者头像 李华
网站建设 2026/10/5 15:37:26

Linux防火墙iptables详解:表、链、规则与端口转发实战

在Linux服务器上摸爬滚打这些年&#xff0c;要说哪个命令最让人又爱又恨&#xff0c;iptables绝对能排进前三。它是Linux内核netfilter框架的用户态配置工具&#xff0c;负责数据包过滤、NAT地址转换、端口转发、流量审计这些最底层的网络能力&#xff1b;平时它被各种云安全组…

作者头像 李华
网站建设 2026/10/5 15:34:36

SpringBoot+Vue3+MySQL:前后端分离小区管理系统实战指南

这几年我带过的开发新人里&#xff0c;十个有八个交上来的第一个完整项目都是“管理后台”&#xff0c;而其中最适合拿来当模板、覆盖技术点最全面的&#xff0c;就是这种综合小区管理系统——Java SpringBoot做后端接口、Vue3做前端页面、MySQL存数据&#xff0c;前后端彻底分…

作者头像 李华