
最近帮客户调一批Tesla A100的深度学习服务器光驱动就折腾了两天中间还踩了好几个坑。网上关于A100驱动安装的教程不少但大多数要么只讲runfile一条路走到底要么压根没提MIG和GPUDirect这些A100专有特性的前置要求。这篇我把完整的安装思路、操作步骤、版本匹配逻辑和排障记录都整理出来希望能帮后来的人少走点弯路。先明确一点A100是数据中心级GPU安装驱动的方法和普通GeForce游戏卡不一样对内核版本、驱动版本、CUDA版本的配套要求更高而且很多服务器是纯UEFI启动加Secure Boot开启的状态这会让驱动安装的坑比想象中多得多。本文以Ubuntu 20.04/22.04 LTS系统为主涵盖了在线安装、离线安装、故障排查和MIG配置四大部分。1. 装机前的准备工作确认硬件与系统环境1.1 如何确认GPU型号与架构拿到机器第一件事不是急着下载驱动而是先确认GPU是否真的被系统识别。A100有PCIe版和SXM版两种形态SXM版通常出现在HGX整机或DGX系列里由NVSwitch互联驱动安装逻辑一致但功耗和散热策略略有不同。确认方法很简单lspci | grep -i nvidia如果输出里能看到类似NVIDIA Corporation GA100 [A100 PCIe 40GB]或者A100 SXM4 40GB的字样说明PCIe枚举正常GPU硬件层面没问题。如果这条命令没有任何输出先别急着装驱动优先检查物理插槽和供电服务器里GPU没供电或者松了的时候lspci是看不到设备的。看到GPU之后再看系统架构。A100是Ampere架构对应微架构代号GA100这决定了驱动版本的下限。表A100关键参数与驱动要求项目参数GPU架构AmpereGA100显存规格40GB / 80GB HBM2e计算能力8.0最低驱动版本要求450.80.02含CUDA 11.0推荐生产环境驱动版本470 / 525 / 535支持的系统Linux x86_64主流 / ARM Server1.2 驱动、CUDA与系统版本的匹配逻辑很多人装驱动失败根本原因不是命令敲错而是版本匹配的思路没理顺。A100要求驱动版本最低不能低于450.80.02否则连设备都认不出来。而驱动版本又决定了能支持到哪个CUDA版本举例来说535.xx版本的驱动支持到CUDA 12.3如果你搭配CUDA 12.0那没问题但如果你用470版本去配CUDA 11.4虽然也能跑但性能特性支持就不完整。这里分享一个实用的选型经验从NVIDIA官方驱动页面下载驱动时页面上会列出一个“Supported CUDA Version”这个值代表该驱动最高支持的CUDA版本。更推荐用nvidia-smi工具进行实际版本验证而不是仅依赖页面的版本信息。所以如果你的CUDA框架需要12.1就选支持CUDA 12.1或更高的驱动。Ubuntu 20.04和22.04的内核版本差异较大20.04默认内核是5.4/5.822.04默认内核是5.15/5.19。新版驱动535对老内核的支持没有明显问题但如果是Red Hat系内核就要额外注意open-dkms模块的编译兼容性。如果机器用于生产环境建议不要追最新驱动选NVIDIA官方的长期维护分支版本比如535系列已经比较成熟性能和稳定性都经过验证。1.3 禁用nouveau与关闭Secure Boot这是整个安装流程里最容易踩坑的两个地方。禁用nouveau这一步非常重要。Ubuntu系统自带的nouveau开源驱动会和NVIDIA官方驱动抢设备节点如果不禁用安装程序在加载NVIDIA内核模块的时候会报Failed to initialize NVML: Driver/library version mismatch或者直接hang住。禁用方法是在内核启动参数里加上模块黑名单sudo bash -c echo blacklist nouveau /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo bash -c echo options nouveau modeset0 /etc/modprobe.d/blacklist-nvidia-nouveau.conf sudo update-initramfs -u修改之后必须重启重启后执行lsmod | grep nouveau看一下有没有输出。如果有输出说明没禁用干净通常是内核模块还在被占用需要再检查一下图形桌面服务。关闭Secure Boot是另一个大坑。A100服务器大多数是UEFI启动出厂时Secure Boot默认开启。如果Secure Boot开着NVIDIA驱动内核模块没有签名内核会拒绝加载安装过程可能完全正常但一重启就回到原点nvidia-smi报错说驱动不存在。处理方法有两种在BIOS里关闭Secure Boot简单粗暴适合自有服务器。保留Secure Boot给驱动模块签名适合有安全合规要求的机房环境流程较长需要在BIOS里进入MOK管理流程。提示如果你装的是带桌面环境的Ubuntu建议用runfile方式安装时加入--no-opengl-files参数避免NVIDIA驱动把系统的OpenGL库替换掉导致图形界面无法启动。A100本身不带显示输出但机器上可能还插了其他亮机卡。2. A100驱动的三种安装方式对比与选型A100驱动安装有下面几种主流方式各有利弊我分别说一下真实使用感受。2.1 runfile方式手动可控适合精细调参这种是NVIDIA官方提供的.run可执行文件安装包也是我这次实际采用最多的方式。runfile的优点是可以精确控制安装路径、不看发行版源里的旧版本脸色、排障方便缺点是升级和卸载需要额外维护。wget https://us.download.nvidia.com/tesla/535.154.05/NVIDIA-Linux-x86_64-535.154.05.run sudo chmod x NVIDIA-Linux-x86_64-535.154.05.run sudo ./NVIDIA-Linux-x86_64-535.154.05.run --silent --dkms--dkms参数非常关键它会注册DKMS支持让驱动在以后的内核升级中自动重新编译不用每次升级内核都手动装一遍驱动。2.2 apt源方式适合快速部署但版本容易落后Ubuntu的官方源和NVIDIA的CUDA apt源里都有nvidia-driver包。这种方式的优点是安装简单apt install一套搞定缺点就是版本可能偏旧。比如你做深度学习用PyTorch官方Release可能要配CUDA 11.8或12.1apt源里可能只到535分支对于A100来说535是够用的但如果你想试最新的CUDA 12.4特性apt源就不太行了。sudo apt update sudo apt install -y nvidia-driver-535如果要用apt方式建议先把NVIDIA官方CUDA源加上这样拿到的版本更新一些wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt update2.3 使用CUDA Toolkit捆绑驱动CUDA Toolkit安装包里自带了对应版本的NVIDIA驱动这种方式对于刚接触的新手比较友好因为驱动和CUDA版本天然配套少了很多匹配的烦恼。命令是sudo apt install -y cuda-toolkit-12-1或者用runfile版的CUDA安装包在交互界面里取消driver那一项不打勾就行。但我个人建议如果机器已经装了另一个版本的驱动安装CUDA Toolkit时千万不要让它再装一次驱动否则容易出现版本冲突设备节点被反复重新加载。经验做法是用CUDA Toolkit只装CUDA runtime和编译器驱动单独用官方runfile维护。2.4 离线安装思路不少内网机器和外网隔离没法直接wget。这时候就需要提前准备好离线依赖包。注意runfile本身可以离线安装这算是一个优势驱动部分只需要一个.run文件就够了。但内核编译需要的依赖如gcc、make、dkms、内核头文件必须在离线环境下提前装好。可以在一台联网机器上用apt的--download-only选项下载所有的 .deb 依赖再拷贝进内网安装。# 联网机器上收集依赖包 mkdir -p nvidia-driver-offline cd nvidia-driver-offline apt-get download dkms build-essential linux-headers-$(uname -r) gcc make # 把整个文件夹拷进内网机器后执行 sudo dpkg -i *.deb sudo ./NVIDIA-Linux-x86_64-535.154.05.run --silent --dkms主要一点离线机器的内核版本和收集依赖包时那台机器不一致会造成内核头文件版本对应不上所以离线包最好在相同系统的干净环境里准备。如果机器有apt代理也可以考虑但大部分隔离内网没这个条件。3. 实操步骤从下载驱动到nvidia-smi正常输出3.1 驱动选型与下载驱动选型这一步看起来简单但恰恰是很多人翻车的地方。NVIDIA驱动下载页面里Tesla A100归在“Data Center Driver”不是GeForce Driver。千万不要下错成GeForce Game Ready驱动否则安装程序会直接报不支持的硬件这是最常见的初坑。遇到风控严格的内网环境连NVIDIA官网都访问不了的只能用离线包拷贝进去。装的时候用--silent参数静默安装可以减少很多交互卡点但第一次安装建议还是不加--silent这样可以在交互界面确认一下组件选择。3.2 禁用开源驱动与内核准备在动手装驱动之前还有一个内核准备动作。执行sudo apt install -y gcc make dkms linux-headers-$(uname -r)这串命令把编译内核模块的工具链和当前内核的头文件都备齐了。DKMS是重点有了它驱动模块可以在系统内核升级后自动rebuild否则每次升级内核都要手动重做一遍非常麻烦。然后按照1.3节的方式禁用nouveau并重启。重启之后进入命令行模式如果桌面环境不好关可以直接用CtrlAltF3切到纯tty关闭图形服务sudo systemctl isolate multi-user.target这样能保证没有任何进程占用GPU设备安装驱动时模块才能顺畅加载。3.3 runfile安装完整流程我以535.154.05版本为例给出完整命令序列。如果你是其他版本把文件名换成你自己的即可。# 1. 进入下载目录赋予执行权限 cd /opt sudo chmod x NVIDIA-Linux-x86_64-535.154.05.run # 2. 执行安装这里我习惯加上 --no-opengl-files保持系统OpenGL稳定 sudo ./NVIDIA-Linux-x86_64-535.154.05.run --silent --dkms --no-opengl-files # 3. 确认内核模块已加载 sudo modprobe nvidia # 4. 查看安装结果 nvidia-smi安装过程中如果卡住可以用--verbose参数看详细输出能定位到具体的依赖缺失项。整个安装大概持续3-5分钟如果编译模块时间特别长超过15分钟大概率是内核头文件不匹配或者磁盘IO太慢。3.4 验证与配置持久化安装完成后nvidia-smi应该输出一张GPU信息表格显示A100的型号、显存容量、驱动版本和CUDA版本。如果能看到这张表说明基本OK了。但工作站重启之后还有几个隐藏雷nvidia-persistenced服务数据中心GPU建议常驻这个服务把GPU状态保持住避免每次有新进程访问GPU时重新初始化。启动命令sudo systemctl enable nvidia-persistenced sudo systemctl start nvidia-persistenced设备节点权限如果是给普通用户跑训练任务一定要确保/dev/nvidia*设备节点对用户有访问权限。通常NVIDIA驱动会创建nvidia组把运行用户加进这个组就行sudo usermod -aG nvidia username sudo udevadm control --reload-rules sudo udevadm trigger之后sudo reboot重启一次再次确认nvidia-smi能正常输出。到这里驱动部分就装好了接下来可以继续装CUDA Toolkit和cuDNN。4. 常见故障排查nvidia-smi报错、模块加载失败怎么办安装A100驱动遇到问题是常态心态要放平。这节我把实际过程中遇到的高频报错和排查思路完整列出来建议直接当成速查表用。4.1 nvidia-smi报错couldnt communicate with the nvidia driver这是网上搜得最多的错误几乎一搜就是一堆结果。它的出现往往意味着内核模块没有正确加载或者加载的版本和用户态工具不一致。第一步先确认模块状态lsmod | grep nvidia如果没有输出说明模块没加载。手动加载试试sudo modprobe nvidia如果手动加载时报Required key not available那就是Secure Boot的问题。如果提示找不到模块说明驱动编译产物没装进去重装驱动通常能解决。第二步看系统日志dmesg | grep -i nvidia如果日志里有NVRM: failed to initialize the NVIDIA kernel module大概率是驱动版本与内核不兼容。最常见的原因是升级内核后DKMS没有把新模块编出来重新执行/usr/bin/dkms autoinstall就好。sudo /usr/bin/dkms autoinstall sudo modprobe nvidia第三步如果以上都试过还是报错检查驱动版本是不是下错成GeForce分支了A100必须用Data Center Driver。表nvidia-smi无法通信的排查路径现象可能原因解决方案lsmod无输出modprobe报找不到模块驱动未安装或安装产物缺失重装对应版本驱动modprobe报 Required key not availableSecure Boot拦截未签名模块关闭Secure Boot或给模块签名dmesg里有 NVRM init失败内核头文件不匹配 / DKMS未编译安装对应内核头文件执行dkms autoinstallnvidia-smi输出Driver/library mismatch驱动升级后未重启重启系统或完全卸载旧驱动后重装4.2 报错NVRM: cant find an IRQ for your NVIDIA card这个问题相比前面那个更隐蔽它不是驱动本身的问题而是中断资源分配的问题。A100作为PCIe设备如果BIOS没有给它分配正确的MSI中断驱动初始化就会失败。实际排查中发现这类问题通常是PCIe ACS或IOMMU设置造成的。在BIOS中把IOMMU改成Disabled或者Passthrough模式下可能解决一部分问题但这个操作需要谨慎尤其对有多GPU的机器改IOMMU会影响PCIe设备分组。另一类可能原因是通过PCIe转接卡连接的GPU某些转接卡供电或链路协商有问题导致MSI中断无法建立。如果机器上有多个插槽可以尝试把GPU换一个槽位再测。也可以试试在grub启动参数里加pcinoacpi或者acpioff但这属于不得已的办法会影响整个系统的ACPI功能不推荐在生产环境用。4.3 驱动装了但重启后失效这是仅次于nvidia-smi无通信的第二大高频问题。很多人的表现是刚装完驱动一切正常所有测试都过了一重启就回到原点nvidia-smi又开始报错。排查这个问题的思路很简单先确认是不是Secure Boot在作恶。执行mokutil --sb-state如果输出是SecureBoot enabled而你的模块没有签名那这个问题算是坐实了。最简单的处理方式是进入BIOS关闭Secure Boot如果有合规要求必须开着就需要走MOKMachine Owner Key签名流程在第一次重启时进入蓝紫色MOK管理界面选择Enroll key输入密码确认。另一个可能导致重启失效的原因是内核更新。比如这一次开机用的是5.15.0-86内核驱动模块编译基于这个版本。后面apt自动升级到5.15.0-91如果DKMS编译失败驱动就没了。这时候手动执行dkms autoinstall重新编译即可长期方案是把内核版本锁定在某个稳定版本sudo apt-mark hold linux-image-generic linux-headers-generic4.4 多卡机器部分GPU识别不到A100服务器经常是8卡满配但有时候安装完之后nvidia-smi只识别出其中4张卡另外几张消失得无影无踪。这时候先看硬件层的PCIe枚举lspci | grep -i nvidia如果PCIe层能看到但nvidia-smi看不到可能是驱动对某个卡初始化失败看dmesg里有针对某张卡的报错。最常见是供电阻塞或者NVLink链路训练失败。有条件的话把GPU顺序换一下或者交叉验证能快速判断是卡本身问题还是槽位问题。如果PCIe层都看不到大概率就是物理接触不良或者供电没插到位。A100 PCIe版的辅助供电是8pinSXM版则依赖底板的供电规范整机供电不足时会出现部分GPU掉卡这时候优先检查电源单元策略。5. A100专有特性的前置配置MIG与GPUDirect驱动装好只是第一步。A100区别于普通游戏卡的另一大卖点是MIG多实例GPU和GPUDirect RDMA能力。这两块在驱动版本选择上有特殊要求。5.1 MIG多实例GPU的启用MIG可以把一张A100切成最多7个独立的GPU实例每个实例有自己独立显存和计算核心适合多租户场景。但MIG功能不是安装好驱动就默认开启的需要手动在GPU上启用MIG模式。在A100上启用MIG的操作# 查看当前GPU是否支持MIG以及当前MIG状态 nvidia-smi -i 0 --query-gpuname,mig.mode.current --formatcsv # 在GPU 0上启用MIG模式 sudo nvidia-smi -i 0 --mig-mode1MIG启用成功后可以用nvidia-smi mig -lgi查看已有的实例配置。一个比较常见的切分方案是把40GB的A100切成两个20GB实例或者切成1个16GB加2个8GB之类的组合具体看业务需求。MIG和GPUDirect同时使用时需要注意MIG实例的端口资源分配禁止用没有配置足够的DMA资源。重要提示MIG模式下nvidia-smi展示的显存大小会和物理显存不一样这是正常现象。另外MIG模式不支持通过CUDA_VISIBLE_DEVICES直接选择子实例需要用CUDA_MPS_PIPE_DIRECTORY或者MIG的UUID对应关系来调度。5.2 GPUDirect RDMA注意事项GPUDirect RDMA是A100在HPC和AI训练场景里的核心价值所在它允许网卡或存储设备绕过CPU直接读写GPU显存大幅降低数据拷贝延迟。如果机器上配置了Mellanox InfiniBand网卡想充分发挥A100的通信性能驱动版本至少需要满足官方GPUDirect RDMA的最低要求。配置GPUDirect的核心动作是检查网卡和GPU是否位于同一个PCIe switch或者同一个NUMA节点并开启网卡驱动的RDMA模式。常用的验证命令nvidia-smi topo -m这个命令会列出GPU之间以及GPU与网卡之间的拓扑关系如果显示NV#或NODE这种高位连接说明走的是NVLink或同一ROOTGPUDirect性能会更好如果显示PHB或SYS说明要跨CPU访问性能会有损。GPUDirect的驱动配置通常在网卡驱动侧完成NVIDIA驱动侧只要保证版本够新就行。535版本对GPUDirect的支持已经很完善实测带宽和延迟表现都稳定。6. 写在最后的几句体会A100驱动安装本身不算难难的是版本匹配和系统环境清理。我在整个过程中最大的体会就是装驱动之前先把内核版本、Direct版本换好再动手。装驱动过程中各种命令行界面上最安静但也最容易忽略的就是nvidia-persistenced服务。这个服务不启动A100在频繁被访问的时候GPU初始化时间会更长进程启动会变慢某些监控程序甚至会误报超时。另外如果你和我一样需要在几台配置完全相同的机器上批量部署建议装好一台之后把/etc/modprobe.d/blacklist-nvidia-nouveau.conf、/etc/modprobe.d/nvidia.conf、/usr/share/kernel/postrm.d/nvidia这些配置文件都备份出来用Ansible这类工具统一分发。真的能省下大量重复排障时间。最后分享一个实用小技巧升级驱动之前不用急着卸载旧驱动直接在旧驱动基础上运行新版runfile安装它会自动处理模块替换。但如果升级后出现诡异问题先别怀疑新驱动有问题回退到纯命令行模式卸载旧驱动后干净重装一次大概率能解决。我就是这样排查掉了一个困扰半天的NVLink带宽异常问题。