NVIDIA Container Toolkit 介绍
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-docker 或 nvidia-docker2 感到熟悉。
- 弃用旧项目:
nvidia-docker这种独立的封装器项目目前已经完全被弃用归档。 - 现代标准:
nvidia-container-toolkit是这些旧项目的现代替代品。自从 Docker 19.03 版本原生支持--gpus参数后,NVIDIA 重新设计了架构,推出了这个更加标准化、与运行时解耦的工具包。
核心特性
- 支持多种容器运行时:不再仅仅绑定于 Docker,它原生支持目前主流的所有容器引擎,包括 Docker、containerd、CRI-O 和 Podman。
- Kubernetes 友好:它是 NVIDIA GPU Operator 的底层基石,使得在 Kubernetes (k8s) 集群中调度和分配 GPU 资源成为可能。
- CDI (Container Device Interface) 支持:支持最新的容器设备接口标准,能更通用、更标准地向容器暴露特定的设备。
- 跨平台支持:支持多种 Linux 发行版(Ubuntu, Debian, CentOS, RHEL 等),并且完美支持 Windows 的 WSL2 环境。
包含的主要工具与组件
该仓库目前提供的主要 CLI 工具是 nvidia-ctk,它大大简化了配置过程。工具包在底层通常与 libnvidia-container 库配合工作。
nvidia-ctk 是 NVIDIA 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 运行时:
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 containerd2. 运行带有 GPU 支持的容器:
docker run --rm --gpus all ubuntu nvidia-smi通过 --gpus all 参数,Docker 就会调用该 Toolkit 将所有 GPU 挂载到 Ubuntu 容器内并执行 nvidia-smi 以输出显卡状态
总结来说,nvidia-container-toolkit 仓库是当今任何云原生和 AI 基础设施中不可或缺的核心中间件,是将算力(NVIDIA GPUs)桥接到现代微服务与容器化生态系统(Docker/K8s)的必经之路。