0 前言
nvidia-container-runtime
和 nvidia-docker
均已停止维护,相关功能完全由 libnvidia-container
替代。
Nvidia-docker 是 NVIDIA 推出的容器工具链(现为 NVIDIA Container Toolkit 的核心组件),其核心作用是为容器化应用提供无缝的 GPU 资源访问能力,解决传统 Docker 无法直接使用 GPU 的痛点,提供开箱即用的 GPU 加速能力。
Nvidia-Docker的作用
1. 实现 GPU 硬件直通与驱动兼容性管理
-
裸机级性能访问:通过 Linux 命名空间直接将物理 GPU 设备(如 Tesla、A100 等)挂载到容器的 /dev 目录,绕过虚拟化层(如 vGPU)的性能损耗,使容器内应用能以接近裸机的速度调用 GPU 计算核心和显存。
深度学习训练任务在容器内的性能损耗可控制在 1% 以内,而传统虚拟机方案可能损失 20% 以上性能。 -
驱动库自动注入:将宿主机的 NVIDIA 驱动库(如 libcuda.so、CUDA Runtime)以只读方式挂载到容器内,无需在镜像中预装驱动,避免因驱动版本不匹配导致的崩溃。
对比:传统方案需手动在容器内安装驱动,导致镜像臃肿且无法跨不同驱动版本的主机迁移。 -
多版本 CUDA 共存:支持容器内使用与宿主机驱动兼容的不同 CUDA 版本(如 CUDA 11.x 与 12.x),通过容器镜像隔离依赖,解决传统环境下的版本冲突问题。
2. 无缝集成云原生与分布式计算
-
Kubernetes GPU 资源调度:提供 Device Plugin 插件,支持在 Kubernetes 集群中声明式分配 GPU(如 nvidia.com/gpu: 2),实现跨节点的 GPU 资源池化管理和动态调度。
场景:在分布式训练中,可自动为 TensorFlow 任务分配多卡或多节点 GPU。 -
多容器并行 GPU 共享:通过环境变量(如 NVIDIA_VISIBLE_DEVICES)灵活指定容器可访问的 GPU 设备,允许不同容器独占或共享同一 GPU,支持微服务架构下的推理任务并行。
示例:同时运行 3 个容器,分别使用 GPU 0、GPU 1 和 GPU 2 执行图像识别、自然语言处理模型推理。
3. 简化开发与部署流程
-
开箱即用的 GPU 容器:仅需 docker run --gpus all 即可启动容器并调用 GPU,无需手动配置设备映射或驱动挂载。
对比:传统方案需执行复杂的 docker run 参数(如 --device=/dev/nvidia0)并手动挂载驱动库路径。 -
跨环境一致性保障:开发者可在本地构建包含 CUDA、cuDNN 等依赖的镜像,直接部署到云端或超算集群,消除环境差异导致的计算错误。
案例:PyTorch 官方镜像预装 NVIDIA Container Toolkit,用户无需修改代码即可在 AWS、本地服务器间迁移训练任务。
4. 突破传统虚拟化与容器限制
- 替代虚拟机 GPU 虚拟化方案:传统 vGPU 方案(如 NVIDIA GRID)需付费授权且存在性能损耗,而 NVIDIA-Docker 免费提供且性能无损,更适合 AI 训练等高吞吐场景。
- 支持异构计算架构:兼容 x86、ARM 架构的 GPU 服务器(如 NVIDIA Grace Hopper 超级芯片),并通过统一接口管理不同型号 GPU。
5. 生态整合与行业标准化
- 深度集成主流 AI 框架:TensorFlow、PyTorch 等框架的官方 Docker 镜像默认集成 NVIDIA Container Toolkit,用户可直接调用 torch.cuda.is_available() 验证 GPU 是否就绪。
- 云厂商底层支持:AWS EC2(如 P4d 实例)、Google Cloud AI Platform 等均基于此工具链提供 GPU 容器服务,成为行业事实标准。
1 Docker 安装配置
详细内容见博客Docker 安装
快速安装:
Ubuntu / Debian
# 1.卸载之前的依赖项已经相关数据(如果有的话) 非必须!!!
# 卸载并清除配置
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get purge -y $pkg;
done
# 删除 Docker 相关数据
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 2.添加apt库
# 添加 Docker官方 GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加 Apt repository sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 3.安装最新版Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 4.验证安装
sudo docker run hello-world
Centos
# 1. 卸载旧版本(如有)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2. 安装依赖工具
sudo yum install -y yum-utils
# 3. 添加 Docker 官方仓库
sudo yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 4. 安装 Docker 核心组件
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 5. 验证安装
sudo docker run hello-world
2 NVIDIA Container Toolkit 安装
运行nvidia-container-runtime --version
命令输出如下图所示,恭喜你已经大功告成了!如果是command not found
再执行以下安装步骤!
2.1 检查Nvidia驱动
使用nvidia-smi
检查是否正确安装驱动,安装成功如下图所示。如果没安装成功,参考官网安装Nvidia Cuda 下载
2.2 直接通过源安装(官网方式)
适用于有代理的主机,官网链接https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html,如果没有代理,先通过2.3 换源再安装
设置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
sudo apt-get update
通过apt直接安装
sudo apt-get install -y nvidia-container-toolkit
配置Docker
# 设置容器运行时
sudo nvidia-ctk runtime configure --runtime=docker
# 重启docker
sudo systemctl restart docker
测试
# 拉取带有Cuda的镜像
docker pull nvidia/cuda:12.6.3-cudnn-devel-ubuntu22.04
# 测试
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
# 运行容器
docker run -dit --runtime=nvidia --gpus all -P -v /dataset:/dataset --privileged=true --name=cudaTest nvidia/cuda:12.6.3-cudnn-devel-ubuntu22.04
# 进入容器
docker exec -it cudaTest bash
# 检查 Cuda 和 nvidia driver
nvcc -V
nvidia-smi
2.3 已经使用官方源的直接替换镜像源
APT 换源
sed -i 's#nvidia.github.io#mirrors.ustc.edu.cn#g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
Yum / DNF 换源
sed -i 's#nvidia.github.io/libnvidia-container/stable/#mirrors.ustc.edu.cn/libnvidia-container/stable/#g;s#nvidia.github.io/libnvidia-container/experimental/#mirrors.ustc.edu.cn/libnvidia-container/experimental/#g' | /etc/yum.repos.d/nvidia-container-toolkit.repo
2.4 通过镜像源安装
# 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://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://nvidia.github.io#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update && sudo apt install nvidia-container-toolkit
# Yum/DNF 安装
curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sed 's#nvidia.github.io/libnvidia-container/stable/#mirrors.ustc.edu.cn/libnvidia-container/stable/#g' |
sed 's#nvidia.github.io/libnvidia-container/experimental/#mirrors.ustc.edu.cn/libnvidia-container/experimental/#g' |
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo yum install nvidia-container-toolkit
2.5 检查Docker配置
path: /etc/docker/daemon.json (若文件不存在,请添加以下配置)
{ "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } }
更新docker配置
systemctl daemon-reload systemctl restart docker
2.6 检查Runtime配置
docker info | grep Runtimes
3 Nvidia Docker安装(已被舍弃)
3.1 下载 deb
文件
版本根据自己需求
通过镜像网站下载 http://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu16.04/amd64/
文件列表:
- libnvidia-container-tools_1.7.0-1_amd64.deb
- nvidia-container-toolkit_1.7.0-1_amd64.deb
- libnvidia-container1_1.7.0-1_amd64.deb
- nvidia-container-runtime_3.7.0-1_all.deb
- nvidia-docker2_2.8.0-1_all.deb
3.2 安装deb
文件
sudo dpkg -i ./lib* ./nvidia*
3.3 查看配置文件
查看/etc/docker/daemon.json
是否存在以下参数,如果没有手动添加。
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
3.4 重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
3.5测试
运行nvidia-docker
命令输出如下图所示,恭喜你已经大功告成了!