Ubuntu 16.04安装AMD显卡驱动与ROCm平台实战指南
发布时间:2026/8/13 13:51:20 作者:尧图编辑部 阅读量:1,286

1. 从一次失败的AI画图尝试说起那天我打算在实验室一台老旧的Ubuntu 16.04服务器上跑一个PyTorch的模型试试用AMD显卡做点AI画图的实验。这台机器配置了一块Radeon RX 580显卡按理说性能足够。我信心满满地敲下python train.py结果终端无情地抛出了一行错误RuntimeError: No CUDA-capable device is detected。那一刻我就知道熟悉的“驱动地狱”又来了。对于很多从Windows转向Linux特别是使用AMD显卡的朋友来说驱动安装从来都不是一件“下一步、下一步、完成”的轻松事。尤其是在Ubuntu 16.04这个已经停止官方维护的经典版本上安装AMD GPU驱动更像是一场与系统底层、软件仓库和硬件兼容性的三方博弈。网上教程五花八门有让用ubuntu-drivers自动安装的有让去AMD官网下载.run文件的还有让添加第三方PPA源的但很少有人告诉你为什么你的方法不行以及各种方法背后隐藏的“坑”在哪里。这篇文章就是我在那台Ubuntu 16.04机器上从驱动完全缺失到最终成功运行PyTorch GPU计算的完整踩坑与填坑记录。我会详细拆解每一步操作背后的逻辑解释为什么某些“流行”方法会失败并分享最终稳定可用的方案。无论你是想用AMD显卡跑深度学习如PyTorch、TensorFlow还是仅仅为了启用显卡的图形加速这篇基于实战的经验总结都能帮你少走弯路。2. 环境侦察与方案选型为什么不能盲从“最新”动手之前必须先搞清楚战场情况。我的环境是Ubuntu 16.04.7 LTS (Xenial Xerus)内核版本4.15.0-213-generic显卡是AMD Radeon RX 580 (Polaris架构)。Ubuntu 16.04默认使用的是开源的radeon驱动这个驱动稳定但只提供基础的显示功能不支持OpenCL、ROCm等计算平台无法用于GPU加速计算。2.1 可选驱动方案深度剖析面对AMD显卡在Linux下通常有三条路开源Mesa驱动默认由xserver-xorg-video-ati或xserver-xorg-video-amdgpu包提供。优点是与系统集成度最高最稳定。缺点是功能有限像我的RX 580开源驱动无法启用其完整的GCN架构特性更别提跑PyTorch了。AMD官方闭源驱动AMDGPU-PRO这是AMD官方为专业应用和计算提供的驱动包包含了完整的OpenCL、Vulkan支持以及专有的内核模块。听起来很美好对吧但这就是第一个大坑。AMDGPU-PRO对系统内核版本、X Server版本、编译器工具链有极其严格的要求。Ubuntu 16.04后期更新的内核很可能不在其官方兼容列表内强行安装会导致图形界面崩溃、无法登录。AMD开源计算平台ROCm这是AMD对标NVIDIA CUDA的异构计算平台。从ROCm 3.5左右版本开始AMD逐渐将显卡驱动内核态也整合进了ROCm的安装包中通过其安装脚本可以一并安装兼容的驱动。这是目前社区更推荐用于深度学习等计算任务的方案。2.2 决策依据与风险预判我最初尝试了去AMD官网下载对应Ubuntu 16.04的AMDGPU-PRO驱动。安装过程看似顺利但重启后系统卡在了登录界面输入密码后黑屏闪退回登录。这就是典型的驱动与当前系统环境尤其是内核或图形服务器不兼容。通过CtrlAltF3切换到文本终端查看/var/log/Xorg.0.log果然发现了一堆AMDGPU模块加载失败的错误。教训一对于老旧发行版官方闭源驱动的兼容性矩阵是“死”的而你的系统通过常规更新是“活”的两者极易发生错位。于是我把目光投向了ROCm。ROCm的官方文档声明支持Ubuntu 20.04/22.04等对16.04的支持早已终止。但是社区中仍有在16.04上成功安装旧版本ROCm如3.3、3.5的案例。这成了我的主攻方向。选择ROCm还有一个关键原因像PyTorch、TensorFlow这些主流框架其AMD GPU支持后端pytorch-rocm,tensorflow-rocm都是围绕ROCm生态系统构建的。即使你勉强装上了能开机的AMDGPU-PRO驱动没有ROCm运行时深度学习框架依然无法调用GPU。注意在开始任何驱动安装前务必做好系统快照或备份。对于云服务器或虚拟机先打一个快照。对于物理机至少确保你有办法通过恢复模式或Live USB进入系统进行修复。我的第一次尝试就差点让这台服务器“变砖”。3. 彻底清理与准备为ROCm安装扫清障碍在安装新驱动前必须确保系统是“干净”的特别是如果你已经尝试过其他驱动并失败了。残留的驱动文件是导致各种灵异问题的根源。3.1 核验当前驱动状态首先查看当前系统加载的显卡驱动模块lsmod | grep -E “amdgpu|radeon”如果看到radeon被加载说明正在使用开源驱动。如果看到amdgpu则可能是之前安装的驱动或系统自动加载的。同时使用lspci -k命令在显示显卡信息的那一行看Kernel driver in use:后面跟的是什么。3.2 执行深度清理如果之前安装过AMDGPU-PRO或旧的ROCm必须使用官方卸载脚本或手动清理。对于AMDGPU-PRO如果还能找到当初下载的.run文件可以尝试sudo amdgpu-pro-uninstall。但更通用的方法是手动清理移除相关软件包这是一个繁琐但必要的过程。我们需要查找并移除所有可能与AMD官方驱动相关的包。# 查找所有名称中包含amdgpu, rocm, amd的包 dpkg -l | grep -E “amdgpu|rocm|amd” | awk ‘{print $2}’ amd_packages.txt # 仔细检查这个列表避免误删系统关键包如amd64-microcode。确认后批量移除 sudo apt-get purge $(cat amd_packages.txt) sudo apt-get autoremove清理内核模块黑名单有时为了强制使用某个驱动会在/etc/modprobe.d/下添加黑名单文件如blacklist-amdgpu.conf需要检查并删除或注释掉相关行。sudo nano /etc/modprobe.d/blacklist.conf查看是否有blacklist radeon或blacklist amdgpu的行。对于我们要安装ROCm的情况通常需要blacklist radeon来确保系统加载amdgpu内核模块而不是radeon。所以这一步不是删除而是确认配置正确。如果没有可以添加一行blacklist radeon。更新initramfs清理或更改内核模块后必须更新初始内存盘镜像。sudo update-initramfs -u -k all3.3 系统更新与依赖安装确保系统是最新状态并安装编译内核模块可能需要的工具sudo apt update sudo apt upgrade sudo apt install build-essential dkms linux-headers-$(uname -r)dkmsDynamic Kernel Module Support非常重要它能在系统内核升级后自动重新编译第三方内核模块比如我们即将安装的AMD驱动模块避免每次内核更新都要手动重装驱动。4. ROCm 3.5.1 安装实战在旧系统上寻找兼容版本经过搜索和社区验证ROCm 3.5.1 版本在 Ubuntu 16.04 上有相对较好的兼容记录。ROCm 4.0 之后对系统要求就更高了。4.1 添加旧版ROCm仓库并安装AMD官方仓库已经移除了对16.04的直接支持。我们需要手动修改仓库配置指向旧版本的存储位置。添加仓库和密钥wget -qO - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add - echo ‘deb [archamd64] http://repo.radeon.com/rocm/apt/3.5.1/ xenial main’ | sudo tee /etc/apt/sources.list.d/rocm.list这里的关键是URL中的3.5.1和xenialUbuntu 16.04的代号。这指定了我们要获取3.5.1版本针对Xenial的包。安装ROCm核心包sudo apt update sudo apt install rocm-dkms注意我们安装的是rocm-dkms。这个包包含了通过DKMS管理的内核驱动模块amdgpu以及ROCm的用户态组件。它会自动处理内核模块的编译和安装比单独安装驱动和运行时更省心。安装过程会花费一些时间因为它需要编译当前内核对应的amdgpu模块。如果遇到依赖错误可能是缺少某些库根据提示安装即可例如sudo apt install libnuma-dev。4.2 配置用户组与权限安装完成后需要将你的用户添加到video和render组以便有权限直接访问GPU设备。sudo usermod -a -G video,render $USER这一步需要重新登录或重启才能生效。很多朋友安装后测试失败就是因为忘了这一步或忘了重新登录。4.3 验证驱动安装重启后首先验证内核模块是否加载正确lsmod | grep amdgpu应该能看到amdgpu模块并且其依赖的drm等模块也一并列出。然后使用ROCm提供的工具检查GPU识别情况/opt/rocm/bin/rocm-smi如果安装成功这个命令会显示出你的AMD显卡型号、温度、功耗、GPU利用率等信息。如果提示命令未找到检查/opt/rocm/bin是否在系统的PATH环境变量中可以临时添加export PATH$PATH:/opt/rocm/bin或将其添加到~/.bashrc中。5. 安装后配置与深度学习环境搭建驱动装好只是第一步要让PyTorch等框架能用上GPU还需要配置运行时环境。5.1 设置ROCm环境变量将ROCm的库路径添加到系统环境变量中确保应用程序能找到ROCm的运行时库。echo ‘export PATH$PATH:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin’ ~/.bashrc echo ‘export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/opt/rocm/lib:/opt/rocm/lib64’ ~/.bashrc source ~/.bashrc5.2 安装PyTorch for ROCmPyTorch官方为ROCm提供了预编译的wheel包。我们需要找到与ROCm 3.5.1兼容的PyTorch版本。通过PyTorch官网的历史版本页面或直接使用pip的指定版本安装。经过测试torch1.7.1rocm3.10这个版本能与ROCm 3.5.1较好地配合。pip3 install torch1.7.1rocm3.10 torchvision0.8.2rocm3.10 -f https://download.pytorch.org/whl/rocm3.10/torch_stable.html请注意这里的rocm3.10指的是PyTorch编译时所针对的ROCm版本它需要与系统安装的ROCm版本大致兼容并非必须严格一致。有时高版本PyTorch兼容低版本ROCm但反之则不行。5.3 最终测试创建一个简单的Python脚本进行测试import torch print(f”PyTorch version: {torch.__version__}”) print(f”Is ROCm available? {torch.cuda.is_available()}”) # 注意在ROCm平台上torch.cuda.is_available() 返回的也是True if torch.cuda.is_available(): print(f”GPU Device: {torch.cuda.get_device_name(0)}”) x torch.rand(5, 3).to(‘cuda’) print(x)运行这个脚本如果一切顺利你将看到PyTorch成功识别出了AMD GPU并能在其上分配张量。至此最核心的驱动和计算环境就搭建完成了。6. 疑难杂症与进阶排查即便按照上述步骤你可能还是会遇到问题。这里分享几个我遇到的和常见的“坑”。6.1 “HIP Error: No device found” 或 “CUDA error: no kernel image is available”这类错误通常发生在PyTorch或TensorFlow运行时。根本原因有两个用户组权限问题再次确认你是否已将用户加入video和render组并且已经重新登录了会话。仅仅usermod命令执行后当前已打开的终端会话是没有新组权限的必须注销重登或重启。ROCm与PyTorch版本不匹配这是更常见的原因。你安装的PyTorch wheel包可能是为更高版本的ROCm如4.0编译的其依赖的HIP运行时库与ROCm 3.5.1不兼容。解决方案是寻找更旧的PyTorch版本。可以尝试torch1.6.0rocm3.3或torch1.5.1rocm2.4。安装命令类似只需修改版本号和对应的索引URL。6.2 DKMS编译失败在安装rocm-dkms时可能会因为内核头文件版本不匹配或编译器问题导致DKMS编译失败。错误信息通常出现在/var/lib/dkms/amdgpu/xxx/build/make.log中。检查内核头文件确保linux-headers-$(uname -r)已安装且版本与当前运行的内核uname -r完全一致。降低GCC版本Ubuntu 16.04后期仓库的GCC版本可能较高。ROCm 3.5.1的内核模块可能对GCC 7的某些特性支持不佳。可以尝试安装GCC 6sudo apt install gcc-6 g-6然后使用sudo update-alternatives --config gcc和sudo update-alternatives --config g将系统默认编译器切换到GCC 6再重新安装rocm-dkms。6.3 图形界面GUI问题如果你这台机器是桌面环境安装ROCm驱动后可能会遇到桌面环境闪烁、卡顿甚至无法启动。这是因为ROCm的amdgpu驱动与Xorg的集成可能不如开源驱动稳定。尝试使用Wayland如果桌面环境支持Wayland对现代GPU驱动的支持可能更好。调整Xorg配置在/etc/X11/xorg.conf.d/下创建一个配置文件如20-amdgpu.conf强制指定使用amdgpu驱动并尝试关闭一些特性例如Section “Device” Identifier “AMD” Driver “amdgpu” Option “TearFree” “true” # Option “DRI” “3” EndSection回退到开源驱动如果只是为了计算不需要图形界面的3D加速一个极端的做法是在计算时切换到文本模式。你可以安装lightdm或gdm3作为显示管理器并配置其允许文本登录。在需要跑深度学习任务时通过sudo systemctl stop lightdm关闭图形界面释放GPU所有资源给计算任务跑完后再启动。这对于服务器非常实用。6.4 监控与调试工具ROCm-SMI你的全能监控面板。除了看状态还能设置风扇速度-f、重置GPU-r等。RadeonTop类似于NVIDIA的nvtop一个在终端中运行的GPU状态监控工具可以实时查看各个GPU计算单元、显存控制器等的利用率。通过sudo apt install radeontop安装。检查日志系统日志/var/log/syslog和内核日志dmesg是排查驱动加载问题的金矿。搜索amdgpu、drm、HIP等关键词能找到错误的详细原因。7. 总结与最终建议老旧系统上的生存法则在Ubuntu 16.04上成功部署AMD GPU驱动和ROCm计算平台更像是一次考古与工程相结合的实践。整个过程的核心思想是放弃追求最新主动拥抱兼容。版本锁定是关键不要试图在旧系统上安装新驱动或新ROCm。ROCm 3.5.1是经过社区验证的、与Ubuntu 16.04兼容性较好的最后一个主要版本。与之配套的PyTorch也应选择1.7.x或更早的版本。DKMS是救星使用rocm-dkms而非直接安装内核驱动能确保系统内核升级后驱动模块能自动重新编译极大降低了维护成本。权限与环境变量是隐形门槛video和render用户组、LD_LIBRARY_PATH环境变量这些看似微小的配置往往是成功与失败的分界线。备好逃生通道在进行任何重大的驱动操作前确保你有办法回退。对于云服务器就是快照。对于物理机确保你有另一张集成显卡或者准备好一个Ubuntu Live USB以便在系统无法启动时进行修复。最后我必须说如果你有选择权强烈建议将操作系统升级到Ubuntu 20.04 LTS或22.04 LTS。新系统拥有更现代的内核、更好的硬件支持以及官方支持的ROCm 5.x甚至6.x版本。这将为你省去无数麻烦并能使用更新的PyTorch、TensorFlow和CUDA库。我之所以在16.04上折腾纯粹是因为那台老服务器的遗留软件生态暂时无法迁移。如果你的项目不是被这样的旧环境所束缚那么升级系统永远是解决驱动兼容性问题的最优解。这次踩坑经历与其说是一份教程不如说是一个案例展示了当技术栈被锁定在旧版本时我们如何通过理解底层原理和社区经验找到那条曲折但可行的路。