大家好,我是极创工作室韩翔宇。
本文是 “从 0 开始的 AI 服务器管理教程” 系列的首篇文章。本文将带你回顾那些年我们踩过的坑,并通过一个完整的实战教程,带你使用开源项目 nvidia-driver-installer 一键脚本 来实现对 NVIDIA 驱动的自动化安装。
梦魇的开始:那些年我们踩过的坑
对于每一位踏入深度学习的开发者来说,在 Linux 系统上配置 NVIDIA 环境,往往是遇到的第一个“拦路虎”。
你是否也经历过这样的场景?
- 系统默认存在 nouveau:首次安装驱动时会报错存在 nouveau,不得不手动创建 blacklist,并更新启动文件,重启之后再安装驱动
- 系统更新内核掉驱动:系统更新后后 NVIDIA 驱动不可用,报错 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
- 驱动卸载重装卸不干净, nvidia-uninstall 常常卸不干净,最终导致系统崩溃,不得不重装操作系统
这些问题,在我每次配置新机器、更新系统、或者仅仅是想升级一下驱动时,都会轮番上演。在第 N 次被 NVIDIA 驱动安装过程整破防之后,我决定自己动手,撸一个脚本。
痛定思痛:需要一个怎样的工具?
经历了无数次重装和深夜 Debug 后,我列出了我心中理想解决方案的几个核心要求:
于是,开源项目 nvidia-driver-installer 一键脚本 诞生了。经过不断地打磨和测试,这个最初为了解决我自己问题的脚本,逐渐变成了一套完整的工具集。
实战:现在的我如何部署环境
如今,我的新机器部署流程被极大地简化了。只需要运行这个项目的主脚本,2 分钟即可完成驱动安装。
NVIDIA-driver-installer 安装过程
一键脚本
# 下载脚本
curl -sSL HTTPS://raw.githubusercontent.com/EM-GeekLab/nvidia-driver-installer/main/nvidia-install.sh -o nvidia-install.sh
# 运行脚本
sudo bash nvidia-install.sh
该命令将通过一个可交互的安装向导,帮助您完成 NVIDIA 驱动的安装。同时,若您需要批量为多台服务器进行一键部署,您可以添加 -y 参数实现无人值守安装,-q 参数可以设置静默模式,避免产生输出:
sudo bash nvidia-install.sh -y -q
脚本支持更丰富的功能和配置,更多使用方式请看 GitHub 仓库的说明,或使用 bash nvidia-install.sh -h 进行查看
国内加速访问
同时我们考虑到了国内访问 GitHub 可能出现的问题,也提供了 Gitee 和 开放原子的代码仓:
Gitee
项目地址为:https://gitee.com/EM_GeekLab/nvidia-driver-installer,你可以使用下面的一键脚本进行安装:
# 下载脚本
curl -sSL https://gitee.com/EM_GeekLab/nvidia-driver-installer/raw/main/nvidia-install.sh -o nvidia-install.sh
# 运行脚本
sudo bash nvidia-install.sh
开放原子 AtomGit
项目地址为:https://atomgit.com/EM-GeekLab/nvidia-driver-installer
Q&A 常见问题:
在和社区的朋友交流时,我发现大家普遍关心以下几个问题,这里统一解答一下。
Q1:如果我想更换驱动版本,或者安装后遇到问题(比如黑屏),该怎么办?
这是这个项目最核心的优势之一。这个项目给我最大的安全感,来源于它的回滚机制。如果在安装后发现任何问题,或者仅仅是想换一个驱动版本,我不再需要重装系统。只需执行:
sudo bash nvidia-install.sh –rollback
脚本会像时光机一样,读取 rollback.list 文件,将系统状态恢复到运行安装程序之前的那一刻。这个命令会安全地卸载驱动、移除配置文件和软件源,远比手动 apt remove 或 dnf remove 彻底。
回滚完成后,你可以重新运行安装脚本。如果想指定一个特定的驱动版本(例如 550),可以使用 -v 或 –version 参数:
sudo bash nvidia-install.sh –version 550
如果不指定版本号,脚本默认会从官方源中选择最新的稳定版。这个“先回滚,再重装”的模式,是处理驱动问题最稳妥、最高效的方式。
Q2:我的服务器已经用其他方法(比如官方.run 文件)装好了驱动,可以直接换用这个脚本来管理吗?
完全可以,并且这也是推荐的做法。脚本在设计之初就考虑到了这种“迁移”场景。你可以使用项目下的 nvidia-uninstall.sh 文件清理现有的环境。
当然你也可以选择直接安装,当你直接运行 sudo bash nvidia-install.sh 时,脚本的第一步就是检查系统是否存在已安装的 NVIDIA 驱动。它能识别出是通过包管理器安装的,还是通过 .run 文件安装的。检测到现有驱动后,它会停下来,并给你几个选择,其中首选推荐的就是“卸载现有驱动后重新安装”。
你只需要选择这个选项,脚本就会自动调用相应的卸载逻辑(比如执行 nvidia-uninstall 或者 apt purge),清理掉旧驱动,然后再用标准的包管理器方式为你安装新驱动。整个过程无缝衔接,帮你平稳过渡到更可靠的管理方式上来。
Q3:安装时提示选择“开源(open)”和“专有(proprietary)”内核模块,我该怎么选?
NVIDIA 从 R515 驱动版本开始,逐步开源了其部分内核模块。
开源模块 是未来的趋势,由 NVIDIA 官方维护,社区可以审查代码,理论上与 Linux 内核的兼容性会更好。但它目前仅支持 Turing 架构(如 RTX 20 系)及更新的 GPU。如果检测到你的 GPU 支持的话,脚本默认会优先选择它。专有模块 是传统的闭源模块,对于 Maxwell 和 Pascal 架构(如 GTX 900/1000 系)等较旧的 GPU,这是唯一选择。
脚本会自动检测并推荐最合适的内核模块。如果你的 GPU 够新(RTX 20 系及以后),默认使用 open 即可。如果你的 GPU 在使用 open 模块时遇到奇怪的问题,也可以通过 -m proprietary 参数强制使用专有模块。
Q4:脚本执行到一半失败了怎么办?–rollback 会不会也不管用?
别担心,脚本的鲁棒性比你想象的要好。
如果脚本因为网络等原因意外中断,它会在 /var/lib/nvidia-installer/ 目录下留下状态文件。下次你重新运行同一个命令时,它会检测到中断状态,并询问你是否从上次失败的地方继续安装,而不需要从头再来。
万一发生了非常罕见的情况,导致状态文件损坏或回滚失败,你还可以使用 –cleanup 参数。这个参数会强制清理脚本生成的各种状态和锁文件,让你能从一个干净的状态重新开始。
当然万一出现了以上方案都不起作用的情况,欢迎提交一个 Issue 给我们,让我们一起把这个工具做的更好。
Q5:能不能把 CUDA 也一起安装了?那个安起来也好麻烦!
完全可以,仓库中有 CUDA 的一键安装脚本(cuda-install.sh)。在下一期文章中,我们也将详细讨论如何使用 CUDA 一键安装脚本来完成快速安装。此外还有对 NVIDIA-Driver-Toolkit 的一键安装支持哦~
写在最后
从最初为了解决个人工作中的痛点,到一个功能相对完善的自动化工具,nvidia-driver-installer 承载了我对“优雅的解决方案”的追求。我把它开源出来,希望能帮助更多像我一样,曾经或正在 NVIDIA 环境配置上挣扎的朋友。
如果你也厌倦了重复和琐碎,不妨试试这个方案。它或许不能称之为完美的“标准答案”,但它确实是我迄今为止发现的,最高效、最可靠的解决路径。
如果这个项目对您有所帮助,请帮我们点一个 GitHub ⭐ Star 并分享给更多的朋友吧!这将在我们提供更多一键安装脚本后提醒您~
评论前必须登录!
注册