NVIDIA Container Toolkit 、Nvidia-Docker 部署

0 前言

nvidia-container-runtimenvidia-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命令输出如下图所示,恭喜你已经大功告成了!

参考

  1. NVIDIA Container 运行时库
  2. 如何查看NVIDIA Container Toolkit是否配置成功
  3. Ubuntu离线安装nvidia-docker完整过程
  4. 在服务器部署Nvidia-Docker全流程
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇