5分钟搞定GPU容器环境:NVIDIA Container Toolkit自动化安装脚本实战指南

5分钟搞定GPU容器环境:NVIDIA Container Toolkit自动化安装脚本实战指南

【免费下载链接】nvidia-docker Build and run Docker containers leveraging NVIDIA GPUs 【免费下载链接】nvidia-docker 项目地址: https://gitcode.com/gh_mirrors/nv/nvidia-docker

还在为手动配置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

脚本使用说明

  1. 保存脚本为install-nvidia-container-toolkit.sh
  2. 添加执行权限: chmod +x install-nvidia-container-toolkit.sh
  3. 运行脚本: 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训练、科学计算等工作负载的部署效率和资源利用率。

【免费下载链接】nvidia-docker Build and run Docker containers leveraging NVIDIA GPUs 【免费下载链接】nvidia-docker 项目地址: https://gitcode.com/gh_mirrors/nv/nvidia-docker

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值