K8S中使用英伟达GPU

写在前面

如果你也在用Ubuntu做开发,可能都经历过这种事:一次看似平平无奇的系统更新,直接让你的开发环境“翻车”了。

我的故事就是这样开始的。手一抖,把系统从 Ubuntu 22.04.4 升级到了 22.04.5,结果引来两大麻烦:

NVIDIA显卡驱动彻底挂了。 不管怎么卸载、重装,apt 总是报 unmet dependencies (未满足的依赖关系) 和 held broken packages (存在损坏的持有软件包),nvidia-smi 命令敲下去只有心碎的回响。
吃饭的家伙 PetaLinux 也开始闹脾气,启动环境时一直提示 [WARNING] This is not a supported OS

折腾了很久,总算把这两个问题都解决了。我把整个过程和思路整理下来,希望能帮到同样踩坑的朋友。


第一部分:搞定烦人的NVIDIA驱动依赖问题

出了什么问题?

每次我尝试安装 nvidia-driver-570 时,终端都会报类似的错误:

The following packages have unmet dependencies:
 nvidia-persistenced : Depends: libnvidia-cfg1 (= 575.57.08-0ubuntu1)
E: Unable to correct problems, you have held broken packages.

简单说就是,我想装 570 驱动,但系统非要去拉一个 575 版本的依赖包,版本对不上,apt 就直接罢工了。

问题根源在哪?

这其实是 apt 的软件源优先级问题。系统里有两个地方都能提供NVIDIA驱动:

Ubuntu 自己的源:版本比较稳,经过了测试,比如 570
NVIDIA 官方的源:通常是装CUDA时加上的,版本更新,比如 575

apt 在找依赖包 nvidia-persistenced 时,默认会选最新的,也就是NVIDIA源里的 575 版本。这就跟我要装的 570 主驱动包冲突了。

怎么解决?

思路很简单:先让 apt “眼瞎”,看不到捣乱的NVIDIA官方源,等装好了再让它“复明”。

第1步:把旧驱动彻底删干净

这一步很重要,一定要清彻底,免得有残留文件捣乱。

# 用通配符一次性删掉所有nvidia相关的包
sudo apt-get purge '*nvidia*' -y

# 清理一下不再需要的依赖
sudo apt autoremove -y

第2步:暂时禁用NVIDIA官方源

我们不删配置文件,只是把它移个地方,方便以后恢复。

# 找到NVIDIA的源配置文件,通常在 /etc/apt/sources.list.d/ 目录下
# 然后把它移动到你的主目录
sudo mv /etc/apt/sources.list.d/cuda-ubuntu2204-x86_64.list ~/

第3步:从Ubuntu官方源安装驱动

现在 apt 的世界里只有Ubuntu官方源了,安装过程会很顺利。

# 先刷新一下软件源列表
sudo apt update

# 用Ubuntu自带的命令自动安装最合适的驱动
sudo ubuntu-drivers autoinstall

第4步:重启电脑,检查结果

装完驱动后必须重启,让新的内核模块生效。

sudo reboot

重启后,打开终端,再次输入 nvidia-smi。如果能看到显卡信息,就说明成功了。你也可以去“软件和更新” -> “附加驱动”里看看,是不是已经选上了正确的驱动。

第5步:恢复NVIDIA源

为了以后还能方便地装CUDA,我们得把之前移走的源文件再请回来。

# 把源文件移回原位
sudo mv ~/cuda-ubuntu2204-x86_64.list /etc/apt/sources.list.d/

# 再刷新一次软件源列表
sudo apt update

好了,驱动问题到此解决。因为驱动已经是手动安装的状态,以后正常的系统更新不会再把它搞坏了。


第二部分:让PetaLinux不再抱怨操作系统版本

出了什么问题?

启动PetaLinux环境时,终端里总有这么一行警告:

[WARNING] This is not a supported OS
问题根源在哪?

PetaLinux这种专业的工具,为了保证稳定,脚本里写死了一个支持的操作系统版本“白名单”。我的系统升级到 22.04.5,这个新版本号不在它的名单里,它就不认了。

怎么解决?

既然是白名单的问题,那我们直接给它“走后门”,把我们的系统版本加进去就行了。

第1步:找到那个检查脚本

grep 命令在PetaLinux的安装目录里搜一下,看是哪个文件在报这个警告。

# 把后面的路径换成你自己的PetaLinux安装路径
grep -r "This is not a supported OS" /home/lz/Programs/Xilinx/Petalinux/2024.2/

这个命令会告诉你问题文件的准确路径,比如我这里是:
/home/lz/Programs/Xilinx/Petalinux/2024.2/scripts/bash/petalinux-env-check

第2步:编辑白名单

用文本编辑器打开这个文件。

nano /home/lz/Programs/Xilinx/Petalinux/2024.2/scripts/bash/petalinux-env-check

在文件开头,能找到一个叫 UBUNTUVERSIONS 的变量。

# 原来的白名单
UBUNTUVERSIONS="20.04.2 20.04.3 
		20.04.5 20.04.6 
		22.04.1 22.04.2 22.04.3 22.04.4 24.04"

第3步:把自己的系统版本加进去

很简单,在 22.04.4 后面加个空格,再写上 22.04.5

# 修改后的白名单
UBUNTUVERSIONS="20.04.2 20.04.3 
		20.04.5 20.04.6 
		22.04.1 22.04.2 22.04.3 22.04.4 22.04.5 24.04"

保存文件退出。

现在再重新启动PetaLinux环境,那个烦人的警告就再也不会出现了。

总结

这次折腾下来,总结出两条经验:

遇到 apt 依赖冲突,多半是软件源混用搞的鬼。暂时屏蔽掉其中一个源,通常能解决问题。
遇到专业工具报“系统不支持”,别急着重装系统。先去翻翻它的脚本,很可能只是一个写死的版本号白名单在作祟。

希望这篇文章能帮你少走些弯路。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容