
随着大语言模型(LLM)与深度学习(Deep Learning)的爆发式发展,GPU已成为不可或缺的算力核心。然而对开发者和运维人员而言,如何高效、灵活地管理和隔离这些昂贵的GPU资源,已成为一项必备的技能。
NVIDIA Container Toolkit是NVIDIA提供的一个为NVIDIA GPU提供容器化支持的工具包,实现Docker容器直接访问GPU资源,而无需繁琐的配置。
1、什么是NVIDIA Container Toolkit?
在深入介绍NVIDIA Container Toolkit之前,先聊聊它的前身——nvidia-docker。这个名字对于资深的AI工程师来说一定不陌生,它曾是GPU容器化时代的标志性工具。
Nvidia-docker是NVIDIA提供的最初的容器访问主机GPU的解决方案,且配置非常繁琐:需要在容器内手动安装CUDA工具包,还要把主机的GPU设备文件和驱动库挂载进容器。
这不仅配置复杂,还容易因版本冲突导致各种问题,背离了容器化部署的初衷,所以NVIDIA Container Toolkit应运而生。
nvidia-docker run命令 | ||
统一整合,与Docker 19.03+原生集成,支持--gpus参数 |
NVIDIA官方文档明确指出:nvidia-docker2和nvidia-container-runtime软件包应被视为已弃用,它们的功能已与nvidia-container-toolkit软件包合并。如今的NVIDIA Container Toolkit是一个功能更完善的集合,不仅支持Docker,还能与其他容器运行时(如containerd、CRI-O、Podman)集成。
NVIDIA Container Toolkit是NVIDIA提供的用于在容器化环境中运行GPU应用的工具集,包括一个容器运行时库(nvidia-container-runtime)和实用程序(nvidia-ctk、nvidia-cdi-hook等)用于自动配置容器以使用NVIDIA GPU。通常与docker配合使用,开发者可以将基于NVIDIA GPU的应用build一个镜像并在容器中运行。

图片来源:github.com
2、如何安装NVIDIA Container Toolkit
2.1 安装前准备
(1)检查NVIDIA驱动安装
安装NVIDIA Container Toolkit之前需要先安装NVIDIA GPU驱动,参见:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/
(2)系统支持情况
NVIDIA Container Toolkit支持的操作系统版本如下:

本文以Ubuntu 22.04为例进行安装演示。
(3)安装docker
1、添加docker的官方GPG keysudo apt-getupdatesudo apt-get install ca-certificates curlsudo install -m0755 -d /etc/apt/keyringssudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc2、添加apt源echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo"${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null3、安装dockersudo apt-getupdatesudo apt-getinstall docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin4、启动dockersystemctl start docker注意:这里有一个已知问题,当使用systemd cgroup driver时,执行systemctl daemon-reload会导致容器失去GPU的访问,官方给了解决办法:
vim /etc/docker/daemon.json{"exec-opts": ["native.cgroupdriver=cgroupfs"]}systemctl restart docker2.2安装NVIDIA Container Toolkit
(1)安装依赖包
apt-getupdate && sudo apt-get install -y --no-install-recommends \ca-certificates \ curl \ gnupg2(2)配置apt源
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list(3)安装NVIDIA Container Toolkit
apt updateapt install nvidia-container-toolkit #这条命令会安装四个包:nvidia-container-toolkit nvidia-container-toolkit-base libnvidia-container-tools libnvidia-container1(4)配置docker运行时环境
安装完NVIDIA Container Toolkit之后,需要对docker进行配置,主要是修改docker的运行时环境:
sudo nvidia-ctk runtime configure --runtime=dockersystemctl daemon-reloadsystemctl restart docker确认运行时:

3、运行实例负载
在正确安装和配置NVIDIA GPU驱动以及NVIDIA Container Toolkit之后,可以通过运行示例工作负载来验证安装情况。
(1)拉取CUDA镜像
docker pull nvcr.io/nvidia/cuda:latest(2)运行CUDA容器
这里启动CUDA容器,并简单运行nvidia-smi命令查询GPU运行状态:
#查看所有GPU列表docker run --rm --gpus all nvcr.io/nvidia/cuda:latest nvidia-smi -L#查询所有GPU状态docker run --rm --gpus all nvcr.io/nvidia/cuda:latest nvidia-smi#仅将GPU1/GPU2分配给容器docker run --rm --gpus '"device=1,2"' nvcr.io/nvidia/cuda:latest nvidia-smi -L
(3)部署AI应用
这里简单使用pytorch镜像,在容器内使用python打印cuda是否可用:
# 拉取PyTorch镜像docker pull pytorch/pytorch:latest# 运行PyTorch容器docker run --gpus all -it --rm pytorch/pytorch:latest python -c "import torch; print(torch.cuda.is_available())"运行结果正常返回True:

总结:
NVIDIA Container Toolkit是容器化GPU应用的基础工具。通过本文的指导,你应该能够在Linux GPU服务器上成功安装和配置该工具包,让Docker容器充分利用GPU加速能力。无论是在深度学习开发、模型训练还是推理部署中,掌握这一工具都将极大提升你的工作效率。