NVIDIA Container Toolkit 是 NVIDIA 官方提供的开源工具集,专门用于在容器环境中管理和使用 GPU 资源。作为容器化 GPU 应用的标准解决方案,它允许开发者和运维人员在 Docker、Kubernetes 等容器平台上无缝使用 NVIDIA GPU 进行加速计算。
这个工具集的核心功能是桥接容器运行时和 NVIDIA GPU 驱动,使得容器内的应用能够直接访问宿主机的 GPU 硬件资源。相比传统的 GPU 虚拟化方案,NVIDIA Container Toolkit 提供了更轻量级、更高效的 GPU 资源共享方式。
在实际应用中,NVIDIA Container Toolkit 主要解决以下几个关键问题:
在安装 NVIDIA Container Toolkit 之前,需要确保系统满足以下硬件要求:
不同 Linux 发行版的软件依赖略有差异,但都需要以下基础组件:
重要提示:建议先安装 NVIDIA 官方驱动后再安装 Container Toolkit,否则可能会遇到兼容性问题。
对于基于 Debian 的系统,安装过程分为以下几个步骤:
bash复制sudo apt-get update
sudo apt-get install -y --no-install-recommends curl gnupg2
bash复制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
bash复制sudo apt-get update
bash复制export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.1-1
sudo apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
对于基于 Red Hat 的系统,安装流程如下:
bash复制sudo dnf install -y curl
bash复制curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
bash复制export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.1-1
sudo dnf install -y \
nvidia-container-toolkit-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1-${NVIDIA_CONTAINER_TOOLKIT_VERSION}
对于 SUSE 系系统,安装步骤如下:
bash复制sudo zypper ar https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo
bash复制export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.1-1
sudo zypper --gpg-auto-import-keys install -y \
nvidia-container-toolkit-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1-${NVIDIA_CONTAINER_TOOLKIT_VERSION}
bash复制sudo nvidia-ctk runtime configure --runtime=docker
bash复制sudo systemctl restart docker
bash复制docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
bash复制sudo nvidia-ctk runtime configure --runtime=containerd
bash复制sudo systemctl restart containerd
yaml复制apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: cuda-container
image: nvidia/cuda:11.0-base
resources:
limits:
nvidia.com/gpu: 1
对于 Podman,推荐使用 CDI(Container Device Interface)方式:
bash复制sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
bash复制podman run --device nvidia.com/gpu=all nvidia/cuda:11.0-base nvidia-smi
依赖冲突:
--skip-broken 选项GPG 密钥错误:
bash复制sudo rm /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
GPU 设备未找到:
nvidia-smi 是否正常工作/dev/nvidia* 设备的权限CUDA 版本不匹配:
nvidia/cuda 官方镜像时指定正确的标签多容器共享 GPU:
NVIDIA_VISIBLE_DEVICES 控制容器可见的 GPU内存管理:
NVIDIA_GPU_MEMORY 环境变量限制容器 GPU 内存使用持久化模式:
bash复制sudo nvidia-smi -pm 1
通过修改 /etc/nvidia-container-runtime/config.toml 可以调整各种运行时参数:
toml复制[nvidia-container-cli]
root = "/run/nvidia/driver"
path = "/usr/bin/nvidia-container-cli"
[driver]
capabilities = ["compute","utility","video"]
通过配置容器环境变量可以支持不同版本的 CUDA:
bash复制docker run --gpus all -e NVIDIA_DISABLE_REQUIRE=1 -e NVIDIA_DRIVER_CAPABILITIES=compute,utility nvidia/cuda:10.0-base
bash复制sudo nvidia-ctk config --set debug=/var/log/nvidia-container-toolkit.log --in-place
bash复制docker run --gpus all nvidia/cuda:11.0-base nvidia-smi -l 1
最小权限原则:
镜像安全:
网络隔离:
资源限制:
在实际生产环境中,我通常会先在小规模测试集群上验证配置,确认稳定后再推广到全部节点。对于关键业务系统,建议配置监控告警,及时发现并处理 GPU 相关的问题。