NVIDIA Container Toolkit 介绍

发布时间: 更新时间: 总字数:1260 阅读时间:3m 作者:IP:上海 网址

NVIDIA/nvidia-container-toolkit 是 NVIDIA 官方开源的容器工具包(NVIDIA Container Toolkit)仓库。它的核心作用是让容器能够原生且高效地访问和使用宿主机的 NVIDIA GPU 资源,从而非常方便地在容器化环境中运行 GPU 加速的应用程序(如 AI 训练与推理、深度学习、数据科学和高性能计算等)。

核心解决的问题

如果在标准的 Docker 容器中直接运行需要 GPU 的程序,容器默认是无法感知并使用宿主机上的物理 GPU 设备的。早期的做法需要在容器内部安装与宿主机版本完全一致的 NVIDIA 显卡驱动,这不仅使得容器镜像极其臃肿,而且丧失了容器“一次构建,到处运行”的可移植性。

NVIDIA Container Toolkit 解决了这一痛点: 它允许你的容器镜像(如基于 PyTorch 或 TensorFlow 的镜像)中无需安装任何 NVIDIA 显卡驱动。当容器启动时,该工具包会自动将宿主机上的 GPU 设备节点(/dev/nvidia*)以及所需的驱动动态链接库(CUDA、cuDNN 等)实时挂载和注入到容器的文件系统中。

历史演进与定位

如果你以前使用过 GPU 容器,可能会对 nvidia-dockernvidia-docker2 感到熟悉。

  • 弃用旧项目nvidia-docker 这种独立的封装器项目目前已经完全被弃用归档
  • 现代标准nvidia-container-toolkit 是这些旧项目的现代替代品。自从 Docker 19.03 版本原生支持 --gpus 参数后,NVIDIA 重新设计了架构,推出了这个更加标准化、与运行时解耦的工具包。

核心特性

  1. 支持多种容器运行时:不再仅仅绑定于 Docker,它原生支持目前主流的所有容器引擎,包括 Docker、containerd、CRI-O 和 Podman
  2. Kubernetes 友好:它是 NVIDIA GPU Operator 的底层基石,使得在 Kubernetes (k8s) 集群中调度和分配 GPU 资源成为可能。
  3. CDI (Container Device Interface) 支持:支持最新的容器设备接口标准,能更通用、更标准地向容器暴露特定的设备。
  4. 跨平台支持:支持多种 Linux 发行版(Ubuntu, Debian, CentOS, RHEL 等),并且完美支持 Windows 的 WSL2 环境

包含的主要工具与组件

该仓库目前提供的主要 CLI 工具是 nvidia-ctk,它大大简化了配置过程。工具包在底层通常与 libnvidia-container 库配合工作。

nvidia-ctkNVIDIA Container Toolkit 的核心命令行工具。它的主要作用是配置和管理容器运行时(Container Runtimes,如 Docker、containerd、CRI-O、Podman 等),使得这些容器环境能够直接识别并调用宿主机上的 NVIDIA GPU 资源。

简单来说,如果想在 Docker 或 Kubernetes 中运行需要 GPU 加速的程序(如深度学习训练、推理、CUDA 计算),nvidia-ctk 就是让你能够实现 docker run --gpus all 的幕后功臣。

典型的工具链调用逻辑为: Docker/Containerd -> nvidia-container-runtime -> libnvidia-container -> GPU 硬件

典型使用流程

一旦在宿主机上安装了 NVIDIA 驱动和该 Toolkit,你只需要使用自带的工具配置一次容器引擎即可:

1. 配置 Docker 使用 NVIDIA 运行时:

bash
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

(这会自动修改 /etc/docker/daemon.json 以注册 nvidia 运行时)

1.1 配置 containerd (常用于 Kubernetes):

sudo nvidia-ctk runtime configure --runtime=containerd
sudo systemctl restart containerd

2. 运行带有 GPU 支持的容器:

bash
docker run --rm --gpus all ubuntu nvidia-smi

通过 --gpus all 参数,Docker 就会调用该 Toolkit 将所有 GPU 挂载到 Ubuntu 容器内并执行 nvidia-smi 以输出显卡状态

总结来说,nvidia-container-toolkit 仓库是当今任何云原生和 AI 基础设施中不可或缺的核心中间件,是将算力(NVIDIA GPUs)桥接到现代微服务与容器化生态系统(Docker/K8s)的必经之路。

参考

  1. https://github.com/NVIDIA/nvidia-container-toolkit/pkgs/container/container-toolkit
  2. https://github.com/nvidia/nvidia-docker
  3. https://github.com/NVIDIA/nvidia-container-toolkit