NVIDIA/k8s-device-plugin
NVIDIA device plugin for Kubernetes
NVIDIA k8s‑device‑plugin – Kubernetes 的 GPU 支持
这是什么
- 一个官方的 NVIDIA DaemonSet,为 NVIDIA GPU 实现了 Kubernetes device plugin API。
- 部署后,它会自动发现每个节点上的 GPU、报告其健康状况,并通过资源类型
nvidia.com/gpu(以及可选的 MIG 或共享 GPU 资源)将它们提供给容器使用。
为何对 AI/ML 至关重要
- 大多数深度学习训练和推理工作负载都在 NVIDIA GPU 上运行。Kubernetes 集群需要一种方法将这些 GPU 暴露给 pod,以便 TensorFlow、PyTorch 或 RAPIDS 等框架能在容器内运行。
- 此插件是集群调度程序与 NVIDIA 驱动程序/运行时堆栈之间的桥梁,让您能像调度任何其他资源一样调度 GPU 加速的作业。
主要功能(如 README 中所述)
| 功能 | 作用 |
|---|---|
| GPU 发现与健康 | 检测每个节点上的 GPU 数量,并向 kube‑let 报告健康状态。 |
| MIG 支持 | 可选的策略(none、single、mixed),将 Multi‑Instance GPU 切片作为独立资源(nvidia.com/mig‑…)暴露。 |
| 共享 GPU 访问 | 可通过配置文件启用时间切片或 NVIDIA MPS,允许超量订阅(例如,每个物理 GPU 10 个逻辑 nvidia.com/gpu)。 |
| 可配置的设备列表传递 | 选择如何将分配的 GPU 传递给容器运行时:环境变量、卷挂载、CDI 注解或 CDI‑CRI 字段。 |
| Helm chart 与 ConfigMap 支持 | 使用 Helm 部署插件,通过 ConfigMap 传递标志、环境变量或 YAML 配置文件。 |
| 与 GPU Feature Discovery 集成 | 发出描述 GPU 功能(内存、计算能力等)的节点标签,以实现更丰富的调度。 |
| 支持多种运行时 | 与 Docker(已弃用)、containerd、CRI‑O 以及任何可使用 NVIDIA Container Toolkit 的 OCI 运行时搭配使用。 |
典型工作流程
- 准备节点 – 安装 NVIDIA 驱动程序(≈ 384.81+)、
nvidia‑container‑toolkit(或nvidia‑docker≥ 2.0),并将nvidia‑container‑runtime设置为默认的 OCI 运行时。 - 部署插件 – 应用静态 DaemonSet 清单或通过提供的 Helm chart 进行安装。
- 运行 GPU pod – 在 pod 规格中请求
nvidia.com/gpu: 1(或 MIG 切片)。调度器会将 pod 放置在具有可用 GPU 的节点上,运行时将注入设备文件。 - (可选) 在 YAML 配置文件中启用时间切片或 MPS,并通过 ConfigMap 挂载它,以允许多个 pod 共享单个 GPU。
入门(快速入门节选)
# 1. Install NVIDIA Container Toolkit (see NVIDIA docs)
# 2. Deploy the plugin (static DaemonSet example)
kubectl create -f \
https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.17.1/deployments/static/nvidia-device-plugin.yml
# 3. Launch a test pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
restartPolicy: Never
containers:
- name: cuda-container
image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0
resources:
limits:
nvidia.com/gpu: 1
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
EOF
该 pod 将运行一个简单的 CUDA 向量加法示例,并打印 Test PASSED。
配置选项(高级)
--mig-strategy– 控制 MIG 切片的暴露(none、single、mixed)。--device-list-strategy– GPU 如何传递给运行时(envvar(默认)、volume-mounts、cdi-annotations、cdi-cri)。--device-id-strategy– 使用 GPU UUID 或索引编号。--fail-on-init-error– 在初始化错误时使插件失败(默认为true)。--pass-device-specs– 启用与 KubernetesCPUManager的交互(需要特权 DaemonSet)。--config-file– YAML 配置文件的路径,该文件也可包含时间切片或 MPS 的共享设置。
README 中注明的限制/注意事项
- 插件 API 仍为 beta(自 Kubernetes v1.10 起)。
- 健康检查和 GPU 清理尚不全面。
- 共享 GPU 模式(时间切片、MPS)是互斥的,并适用于节点上的所有 GPU。
- 如果您忘记请求 GPU,插件将在容器内暴露所有 GPU – 您必须始终指定限制。
- 该插件仅获得官方支持;不涵盖分支版本。
哪里可以找到更多信息
- 完整文档位于
docs/下(例如,GPU Feature Discovery、CDI 用法)。 - 发行说明和更新日志链接在存储库中。
- 问题和贡献指南提供于 Issues and Contributing 章节中。
以上所有信息均直接取自存储库的 README;未添加任何外部假设。
相关
- 项目
- 项目
- 项目
- 项目
- 项目