5分钟搞定GPU容器环境:NVIDIA Container Toolkit自动化安装脚本实战指南
还在为手动配置GPU容器环境而头疼?面对冗长的安装文档和复杂的命令序列感到无从下手?本文将通过一个实用的Bash脚本实例,带你快速实现NVIDIA Container Toolkit的自动化部署,让GPU容器化变得像复制粘贴一样简单。读完本文,你将获得:
- 一套完整的NVIDIA Container Toolkit自动化安装脚本
- 针对不同Linux发行版的适配方案
- 常见错误处理与验证技巧
- 从0到1部署GPU容器环境的全流程指南
项目背景与迁移说明
当前项目gh_mirrors/nv/nvidia-docker已被NVIDIA Container Toolkit取代并归档。原nvidia-docker wrapper工具已停止支持,所有功能已整合到新的NVIDIA Container Toolkit中,支持直接配置Docker使用NVIDIA容器运行时。详细信息可参考项目许可说明和贡献指南。
自动化安装脚本实现
脚本功能概览
以下Bash脚本实现了NVIDIA Container Toolkit的全自动安装,支持Ubuntu/Debian、RHEL/CentOS/Fedora、OpenSUSE/SLE等主流Linux发行版,包含仓库配置、依赖安装、运行时配置和服务重启等完整流程。
完整脚本代码
#!/bin/bash
set -euo pipefail
# 支持的发行版: ubuntu, debian, centos, rhel, fedora, amazonlinux, opensuse, sles
# 版本要求: 各发行版最新LTS版本
# 检查root权限
if [ "$(id -u)" -ne 0 ]; then
echo "错误: 请使用root权限运行此脚本 (sudo $0)" >&2
exit 1
fi
# 检查GPU驱动
if ! command -v nvidia-smi &> /dev/null; then
echo "错误: 未检测到NVIDIA GPU驱动,请先安装驱动" >&2
echo "参考: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#prerequisites" >&2
exit 1
fi
# 检测包管理器
detect_package_manager() {
if command -v apt &> /dev/null; then
echo "apt"
elif command -v dnf &> /dev/null; then
echo "dnf"
elif command -v yum &> /dev/null; then
echo "yum"
elif command -v zypper &> /dev/null; then
echo "zypper"
else
echo "错误: 不支持的包管理器" >&2
exit 1
fi
}
PM=$(detect_package_manager)
TOOLKIT_VERSION="1.17.8-1"
# 配置仓库函数
configure_repo() {
case "$PM" in
apt)
# Ubuntu/Debian配置
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | 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' | \
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-get update
;;
dnf|yum)
# RHEL/CentOS/Fedora/Amazon Linux配置
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
tee /etc/yum.repos.d/nvidia-container-toolkit.repo
if [ "$PM" = "dnf" ]; then
dnf-config-manager --enable nvidia-container-toolkit-experimental || true
fi
;;
zypper)
# OpenSUSE/SLE配置
zypper ar https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo
zypper modifyrepo --enable nvidia-container-toolkit-experimental || true
;;
esac
}
# 安装工具包函数
install_packages() {
case "$PM" in
apt)
apt-get install -y \
nvidia-container-toolkit=${TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${TOOLKIT_VERSION} \
libnvidia-container-tools=${TOOLKIT_VERSION} \
libnvidia-container1=${TOOLKIT_VERSION}
;;
dnf)
dnf install -y \
nvidia-container-toolkit-${TOOLKIT_VERSION} \
nvidia-container-toolkit-base-${TOOLKIT_VERSION} \
libnvidia-container-tools-${TOOLKIT_VERSION} \
libnvidia-container1-${TOOLKIT_VERSION}
;;
yum)
yum install -y \
nvidia-container-toolkit-${TOOLKIT_VERSION} \
nvidia-container-toolkit-base-${TOOLKIT_VERSION} \
libnvidia-container-tools-${TOOLKIT_VERSION} \
libnvidia-container1-${TOOLKIT_VERSION}
;;
zypper)
zypper --gpg-auto-import-keys install -y \
nvidia-container-toolkit=${TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${TOOLKIT_VERSION} \
libnvidia-container-tools=${TOOLKIT_VERSION} \
libnvidia-container1=${TOOLKIT_VERSION}
;;
esac
}
# 配置Docker运行时
configure_runtime() {
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
echo "Docker NVIDIA运行时配置完成"
# 验证配置
if ! docker info | grep -q "nvidia"; then
echo "警告: Docker运行时配置验证失败,请检查/var/log/docker.log" >&2
fi
}
# 主执行流程
main() {
echo "=== 开始NVIDIA Container Toolkit自动化安装 ==="
echo "发行版包管理器: $PM"
echo "工具包版本: $TOOLKIT_VERSION"
echo "1/3: 配置软件仓库..."
configure_repo
echo "2/3: 安装工具包..."
install_packages
echo "3/3: 配置容器运行时..."
configure_runtime
echo "=== 安装完成 ==="
echo "验证命令: docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi"
}
main
脚本使用说明
- 保存脚本为
install-nvidia-container-toolkit.sh - 添加执行权限:
chmod +x install-nvidia-container-toolkit.sh - 运行脚本:
sudo ./install-nvidia-container-toolkit.sh
安装流程解析
1. 环境检查阶段
脚本首先验证root权限和NVIDIA GPU驱动是否已安装。GPU驱动是使用NVIDIA容器工具包的必要前提,可通过官方文档获取安装指南。
2. 包管理器检测
通过检测系统中的包管理器类型(apt/dnf/yum/zypper),自动适配不同Linux发行版的软件管理命令。
3. 仓库配置
根据不同包管理器配置NVIDIA官方仓库:
- Debian/Ubuntu: 添加GPG密钥和仓库列表文件
- RHEL/CentOS: 添加repo文件并启用实验性仓库(可选)
- OpenSUSE: 添加仓库并启用实验性组件
4. 工具包安装
指定安装特定版本的NVIDIA Container Toolkit组件,包括:
- nvidia-container-toolkit: 核心工具包
- nvidia-container-toolkit-base: 基础运行时组件
- libnvidia-container-tools: 容器工具库
- libnvidia-container1: 容器运行时库
5. 运行时配置
使用nvidia-ctk命令配置Docker运行时,修改/etc/docker/daemon.json文件,并重启Docker服务使配置生效。
验证与测试
安装完成后,可通过以下命令验证GPU容器功能:
docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi
成功运行将显示类似以下的GPU信息输出:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 9W / 70W | 0MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
常见问题处理
权限问题
确保脚本以root权限运行,普通用户需使用sudo命令。
驱动兼容性
需安装与CUDA版本兼容的GPU驱动,建议使用各发行版官方包管理器安装驱动。
系统d cgroup驱动问题
已知在使用systemd cgroup驱动的系统上,执行systemctl daemon reload可能导致容器失去GPU访问权限,需参考官方故障排除文档解决。
总结与后续步骤
本文提供的自动化脚本大幅简化了NVIDIA Container Toolkit的安装流程,实现了一键部署GPU容器环境。后续可参考官方文档探索更多高级配置选项,如Rootless模式、Containerd/CRI-O/Podman配置等。
通过容器化技术充分利用GPU计算能力,可显著提升AI训练、科学计算等工作负载的部署效率和资源利用率。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



