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 运行时搭配使用。

典型工作流程

  1. 准备节点 – 安装 NVIDIA 驱动程序(≈ 384.81+)、nvidia‑container‑toolkit(或 nvidia‑docker ≥ 2.0),并将 nvidia‑container‑runtime 设置为默认的 OCI 运行时。
  2. 部署插件 – 应用静态 DaemonSet 清单或通过提供的 Helm chart 进行安装。
  3. 运行 GPU pod – 在 pod 规格中请求 nvidia.com/gpu: 1(或 MIG 切片)。调度器会将 pod 放置在具有可用 GPU 的节点上,运行时将注入设备文件。
  4. (可选) 在 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 – 启用与 Kubernetes CPUManager 的交互(需要特权 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;未添加任何外部假设。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目