1. 为什么要在K8s里管理GPU?从单机到集群的跨越
如果你手头有几台带NVIDIA GPU的服务器,跑跑单机的深度学习训练或者模型推理,可能装个驱动、配个Docker环境就差不多了。但一旦你想把这些算力资源“池化”,让多个AI任务、多个团队甚至多个业务项目都能像用水用电一样按需、安全、高效地使用这些昂贵的GPU,事情就变得复杂起来了。这时候,Kubernetes(K8s)就成了那个不可或缺的“数据中心操作系统”。它能把分散的GPU服务器整合成一个统一的资源池,帮你搞定资源调度、应用部署、运维监控和弹性伸缩这一整套麻烦事。
我见过不少团队一开始图省事,直接物理机部署或者用简单的Docker Compose,结果很快就在资源争抢、环境隔离、任务排队和故障恢复上栽了跟头。一台八卡A100的服务器,可能一个任务只用了两张卡,剩下的六张就白白空着,其他任务却因为不知道有资源而等待。更头疼的是,不同任务需要的CUDA版本、深度学习框架版本还可能冲突。而K8s配合NVIDIA的生态工具,恰恰能解决这些痛点。它能精确地以“卡”为单位进行资源调度和隔离,确保每个容器任务互不干扰,还能让运维人员对整个集群的GPU健康状况和利用率一目了然。所以,把GPU交给K8s管理,不是赶时髦,而是从“手工作坊”迈向“自动化工厂”的必然一步。
2. 基础准备:搞定物理节点的NVIDIA驱动
要让K8s认识并使用GPU,第一步必须从物理机层面开始,确保每块GPU卡都能被操作系统正确识别和驱动。这一步是基石,没打好后面全白搭。
2.1 环境检查与冲突驱动清理
在上手安装驱动之前,我们得先摸清家底,并扫清障碍。很多Linux发行版,比如CentOS、Ubuntu,会默认安装一个叫做nouveau的开源显卡驱动。这个驱动和NVIDIA的官方私有驱动是水火不容的,必须提前禁用掉。
首先,用lspci命令看看机器里到底有没有NVIDIA的显卡。这个命令能列出所有的PCI设备,我们用grep过滤一下。
lspci | grep -i nvidia
如果输出类似0b:00.0 3D controller: NVIDIA Corporation Device 1eb8 (rev a1),恭喜你,硬件识别到了。记下这里的1eb8,这是设备的硬件ID,后面查具体型号有用。
接下来,检查是否已经安装了NVIDIA官方驱动。最直接的方法是运行nvidia-smi。如果这个命令能跑通,并显示出显卡的型号、温度、显存使用情况等详细信息,那说明驱动已经装好了,你可以跳过安装步骤。如果报错“command not found”,那就需要继续。
然后,检查那个恼人的nouveau驱动是否在运行:
lsmod | grep nouveau
如果有输出,说明它正在活跃。我们需要彻底禁用它。对于CentOS 7,编辑黑名单配置文件:
# 备份原始配置是个好习惯
sudo cp /usr/lib/modprobe.d/dist-blacklist.conf /usr/lib/modprobe.d/dist-blacklist.conf.bak
# 使用sed命令添加禁用配置
sudo sed -i '/blacklist viafb/a\blacklist nouveau\noptions nouveau modeset=0' /usr/lib/modprobe.d/dist-blacklist.conf
修改完成后,需要重建内核的初始内存盘(initramfs),并重启系统让禁用生效:
# 备份当前initramfs镜像
sudo mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# 重新生成
sudo dracut /boot/initramfs-$(uname -r).img $(uname -r)
# 重启
sudo reboot
重启后,再次执行lsmod | grep nouveau,应该没有任何输出,这就表示nouveau已经被成功禁用了。
2.2 驱动下载与安装实战
现在可以安装NVIDIA驱动了。首先,我们需要根据显卡型号和操作系统,去NVIDIA官网下载对应的驱动。上面我们通过lspci拿到了设备ID(比如1eb8),可以到pci-ids.ucw.cz


3799

被折叠的 条评论
为什么被折叠?



