CentOS 7.9 离线安装 NVIDIA Container Toolkit:1.14.0 与 1.20.1 两种版本方案

一、背景

在 CentOS 7.9 服务器上使用 Docker 运行 NVIDIA GPU 容器时,除了安装 NVIDIA 显卡驱动,还需要安装 NVIDIA Container Toolkit。

在实际生产环境中,服务器经常无法直接访问互联网,因此比较常见的部署方式是:

text 复制代码
联网 CentOS 7.9
      │
      ├── 配置 CentOS Yum 源
      ├── 配置 NVIDIA Container Toolkit 源
      ├── 下载 RPM 及依赖
      │
      ▼
打包 RPM 离线安装包
      │
      ▼
离线 CentOS 7.9
      │
      ├── 安装 RPM
      ├── 配置 Docker NVIDIA Runtime
      └── 验证 GPU 容器

本文整理两套方案:

text 复制代码
方案一:NVIDIA Container Toolkit 1.14.0
方案二:NVIDIA Container Toolkit 1.20.1

如果需要兼容已有老环境,可以选择 1.14.0。

如果是新部署环境,可以优先测试 1.20.1。

注意:CentOS 7 已经停止维护,新版本 NVIDIA Container Toolkit 也不再将 CentOS 7 作为当前官方重点测试平台。因此生产部署前建议先使用同版本 CentOS 7.9 测试机验证。


二、环境说明

本文测试环境:

text 复制代码
操作系统:CentOS Linux 7.9.2009
架构:x86_64
容器运行时:Docker
安装方式:RPM 离线安装

查看系统:

bash 复制代码
cat /etc/centos-release
uname -m

预期:

text 复制代码
CentOS Linux release 7.9.2009 (Core)
x86_64

三、解决 CentOS 7 Yum 源失效

CentOS 7 已经 EOL,继续使用旧的:

text 复制代码
mirrorlist.centos.org

可能出现:

text 复制代码
Could not retrieve mirrorlist
Cannot find a valid baseurl for repo: base/7/x86_64

因此先切换到 CentOS 7.9.2009 Vault 镜像源。

3.1 备份原 Yum 配置

bash 复制代码
mkdir -p /etc/yum.repos.d/backup

mv /etc/yum.repos.d/CentOS-*.repo \
   /etc/yum.repos.d/backup/ 2>/dev/null

3.2 配置阿里云 CentOS Vault

bash 复制代码
cat > /etc/yum.repos.d/CentOS-Base.repo <<'EOF'
[base]
name=CentOS-7.9.2009 - Base - Aliyun
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/
gpgcheck=0
enabled=1

[updates]
name=CentOS-7.9.2009 - Updates - Aliyun
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/
gpgcheck=0
enabled=1

[extras]
name=CentOS-7.9.2009 - Extras - Aliyun
baseurl=https://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/
gpgcheck=0
enabled=1
EOF

清理缓存:

bash 复制代码
yum clean all
rm -rf /var/cache/yum
yum makecache

检查:

bash 复制代码
yum repolist

四、安装 RPM 下载工具

安装:

bash 复制代码
yum install -y curl wget yum-utils

检查:

bash 复制代码
which curl
which yumdownloader

正常应该能够看到:

text 复制代码
/usr/bin/curl
/usr/bin/yumdownloader

五、配置 NVIDIA Container Toolkit 仓库

下载 NVIDIA 官方 Repository:

bash 复制代码
curl -s -L \
https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo \
-o /etc/yum.repos.d/nvidia-container-toolkit.repo

检查:

bash 复制代码
cat /etc/yum.repos.d/nvidia-container-toolkit.repo

六、CentOS 7 GPG Repository Metadata 问题

CentOS 7 使用较老的 Yum/GPG 组件,实际配置 NVIDIA 仓库时可能遇到:

text 复制代码
Gpg Keys not imported, cannot verify repomd.xml for repo libnvidia-container

如果出现该问题,可以关闭 Repository Metadata 的 GPG 检查:

bash 复制代码
sed -i 's/^repo_gpgcheck=1/repo_gpgcheck=0/g' \
/etc/yum.repos.d/nvidia-container-toolkit.repo

注意:

text 复制代码
repo_gpgcheck=0

表示关闭仓库元数据签名检查。

如果配置中:

text 复制代码
gpgcheck=1

仍然保留,则 RPM 软件包自身的 GPG 校验仍可以继续启用。

重新建立缓存:

bash 复制代码
yum clean all
rm -rf /var/cache/yum
yum makecache

七、查看 NVIDIA Container Toolkit 可用版本

执行:

bash 复制代码
yum --showduplicates list \
    libnvidia-container1 \
    libnvidia-container-tools \
    nvidia-container-toolkit \
    nvidia-container-runtime

在本文环境中,可以看到多个版本,例如:

text 复制代码
1.14.0
1.14.1
...
1.17.x
1.18.x
1.19.x
1.20.0
1.20.1

因此可以根据生产环境兼容性选择版本。


八、方案一:下载 NVIDIA Container Toolkit 1.14.0

对于需要兼容较老环境的 CentOS 7.9,可以选择:

text 复制代码
libnvidia-container1          1.14.0-1
libnvidia-container-tools     1.14.0-1
nvidia-container-toolkit      1.14.0-1
nvidia-container-runtime      3.14.0-1

8.1 创建下载目录

bash 复制代码
mkdir -p /root/nvidia-container-1.14.0
cd /root/nvidia-container-1.14.0

8.2 下载 RPM 及依赖

bash 复制代码
yumdownloader --resolve \
  libnvidia-container1-1.14.0-1 \
  libnvidia-container-tools-1.14.0-1 \
  nvidia-container-toolkit-1.14.0-1 \
  nvidia-container-runtime-3.14.0-1

检查:

bash 复制代码
ls -lh

查看 RPM 信息:

bash 复制代码
rpm -qp --queryformat \
'%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\n' *.rpm

九、方案二:下载 NVIDIA Container Toolkit 1.20.1

对于新部署环境,可以测试较新的:

text 复制代码
NVIDIA Container Toolkit 1.20.1

主要软件包:

text 复制代码
libnvidia-container1
libnvidia-container-tools
nvidia-container-toolkit-base
nvidia-container-toolkit

9.1 创建目录

bash 复制代码
mkdir -p /root/nvidia-container-1.20.1
cd /root/nvidia-container-1.20.1

9.2 下载 RPM

执行:

bash 复制代码
yumdownloader --resolve \
  libnvidia-container1-1.20.1-1 \
  libnvidia-container-tools-1.20.1-1 \
  nvidia-container-toolkit-base-1.20.1-1 \
  nvidia-container-toolkit-1.20.1-1

检查:

bash 复制代码
ls -lh

查看具体版本:

bash 复制代码
rpm -qp --queryformat \
'%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\n' *.rpm

正常核心软件包应该类似:

text 复制代码
libnvidia-container1 1.20.1-1 x86_64
libnvidia-container-tools 1.20.1-1 x86_64
nvidia-container-toolkit-base 1.20.1-1 x86_64
nvidia-container-toolkit 1.20.1-1 x86_64

新版 Toolkit 不建议再按照旧教程额外混装老版本:

text 复制代码
nvidia-container-runtime-3.14.0

应尽量保证整套 NVIDIA Container Toolkit 软件包来自同一版本系列。


十、两个版本怎么选择

简单来说:

场景 建议
已有 CentOS 7 老环境 1.14.0
需要复刻已有生产环境 使用与原环境一致的版本
新部署 CentOS 7.9 优先测试 1.20.1
对稳定性要求高 先在测试机验证后再部署
新操作系统 优先使用较新的 Toolkit

对于 CentOS 7.9,我个人更建议:

text 复制代码
老生产环境
    ↓
保持原版本,不为了"最新"强行升级

新部署环境
    ↓
先测试 1.20.1
    ↓
Docker GPU 测试全部正常
    ↓
再制作离线包投入生产

十一、制作离线安装包

11.1 1.14.0

bash 复制代码
cd /root

tar -czvf nvidia-container-1.14.0-centos7.tar.gz \
    nvidia-container-1.14.0/

11.2 1.20.1

bash 复制代码
cd /root

tar -czvf nvidia-container-1.20.1-centos7.tar.gz \
    nvidia-container-1.20.1/

最后得到:

text 复制代码
nvidia-container-1.14.0-centos7.tar.gz
nvidia-container-1.20.1-centos7.tar.gz

把对应文件复制到离线 CentOS 7.9 服务器即可。


十二、离线安装 1.14.0

解压:

bash 复制代码
tar -xzvf nvidia-container-1.14.0-centos7.tar.gz

cd nvidia-container-1.14.0

安装:

bash 复制代码
yum localinstall -y ./*.rpm

检查:

bash 复制代码
rpm -qa | grep -E \
'nvidia-container|libnvidia-container'

十三、离线安装 1.20.1

解压:

bash 复制代码
tar -xzvf nvidia-container-1.20.1-centos7.tar.gz

cd nvidia-container-1.20.1

安装:

bash 复制代码
yum localinstall -y ./*.rpm

检查:

bash 复制代码
rpm -qa | grep -E \
'nvidia-container|libnvidia-container'

十四、检查 NVIDIA 驱动

Container Toolkit 并不能代替 NVIDIA GPU 驱动。

首先执行:

bash 复制代码
nvidia-smi

必须保证宿主机 NVIDIA 驱动本身工作正常。

如果:

bash 复制代码
nvidia-smi

都不能正常识别 GPU,那么应该先解决宿主机 NVIDIA Driver 问题,而不是继续排查 Docker。


十五、验证 NVIDIA Container Toolkit

检查:

bash 复制代码
nvidia-container-cli --version

新版还可以:

bash 复制代码
nvidia-ctk --version

检查 runtime:

bash 复制代码
which nvidia-container-runtime

以及:

bash 复制代码
nvidia-container-runtime --version

十六、配置 Docker 使用 NVIDIA Runtime

如果安装的是支持 nvidia-ctk 的版本,可以执行:

bash 复制代码
nvidia-ctk runtime configure --runtime=docker

然后:

bash 复制代码
systemctl restart docker

检查:

bash 复制代码
docker info | grep -i runtime

正常情况下应该能够看到:

text 复制代码
nvidia

十七、手工配置 Docker Runtime

如果老版本环境无法使用 nvidia-ctk runtime configure,也可以手工配置。

创建:

bash 复制代码
mkdir -p /etc/docker

编辑:

bash 复制代码
vi /etc/docker/daemon.json

例如:

json 复制代码
{
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  }
}

重启:

bash 复制代码
systemctl daemon-reload
systemctl restart docker

检查:

bash 复制代码
docker info | grep -i runtime

十八、测试 Docker GPU

宿主机首先确认:

bash 复制代码
nvidia-smi

然后使用已有的 CUDA 镜像进行测试:

bash 复制代码
docker run --rm \
  --runtime=nvidia \
  --gpus all \
  <CUDA镜像> \
  nvidia-smi

如果服务器已经有业务 CUDA 镜像,也可以直接使用已有镜像测试,避免离线环境重新拉取镜像。

正常情况下,容器中的:

bash 复制代码
nvidia-smi

应该能够识别宿主机 GPU。


十九、常用排查命令

查看安装的软件包:

bash 复制代码
rpm -qa | grep -E \
'nvidia|libnvidia'

查看 NVIDIA Runtime:

bash 复制代码
which nvidia-container-runtime

查看 Toolkit:

bash 复制代码
nvidia-ctk --version

查看 Container CLI:

bash 复制代码
nvidia-container-cli --version

查看 Docker Runtime:

bash 复制代码
docker info | grep -i runtime

查看 Docker:

bash 复制代码
systemctl status docker

查看日志:

bash 复制代码
journalctl -u docker -n 100 --no-pager

检查 GPU:

bash 复制代码
nvidia-smi

二十、常见问题

1. Cannot find a valid baseurl

错误:

text 复制代码
Cannot find a valid baseurl for repo: base/7/x86_64

原因通常是 CentOS 7 已 EOL,旧 mirrorlist 不再正常工作。

解决方法:

text 复制代码
切换到 CentOS 7.9.2009 Vault 源

2. NVIDIA 仓库 GPG 校验失败

例如:

text 复制代码
Gpg Keys not imported, cannot verify repomd.xml

可以检查:

bash 复制代码
grep -E \
'gpgcheck|repo_gpgcheck|gpgkey' \
/etc/yum.repos.d/nvidia-container-toolkit.repo

CentOS 7 老环境如果 repository metadata 校验存在兼容问题,可以关闭:

text 复制代码
repo_gpgcheck=0

然后:

bash 复制代码
yum clean all
rm -rf /var/cache/yum
yum makecache

3. nvidia-container-runtime 找不到

检查:

bash 复制代码
which nvidia-container-runtime

rpm -qa | grep nvidia-container

再检查软件包提供了哪些文件:

bash 复制代码
rpm -ql nvidia-container-toolkit | \
grep runtime

4. Docker 看不到 GPU

按照以下顺序排查:

text 复制代码
宿主机 nvidia-smi
        ↓
NVIDIA Driver
        ↓
libnvidia-container
        ↓
NVIDIA Container Toolkit
        ↓
nvidia-container-runtime
        ↓
Docker Runtime
        ↓
GPU Container

不要一开始就排查 Docker。

如果宿主机:

bash 复制代码
nvidia-smi

失败,那么 Docker GPU 基本也无法正常工作。


二十一、总结

CentOS 7.9 已经属于生命周期结束的操作系统,因此搭建 NVIDIA GPU 容器环境时,需要特别注意 Yum 源和新版软件包兼容性。

本文整理了两种离线安装方案:

text 复制代码
方案一
NVIDIA Container Toolkit 1.14.0
+
nvidia-container-runtime 3.14.0

适合:
已有老环境、兼容性优先、需要保持版本一致

以及:

text 复制代码
方案二
NVIDIA Container Toolkit 1.20.1

适合:
新部署环境,希望使用较新的 NVIDIA Container Toolkit

实际生产环境建议遵循:

text 复制代码
先在联网 CentOS 7.9 测试机下载
          ↓
完成实际安装
          ↓
验证 nvidia-smi
          ↓
验证 nvidia-container-cli
          ↓
验证 Docker Runtime
          ↓
验证 Docker GPU
          ↓
打包 RPM
          ↓
部署到离线生产服务器

对于已经稳定运行的老生产环境,没有必要单纯为了追求最新版本而升级 NVIDIA Container Toolkit。

对于新部署的 CentOS 7.9 环境,可以优先测试 1.20.1;如果出现 CentOS 7 兼容性问题,再考虑使用经过验证的较老版本。

相关推荐
哭哭啼1 小时前
Linux 资源紧缺模拟:CPU、内存、磁盘与文件描述符压力测试
linux·运维·压力测试
酒神dnspup1 小时前
多地区网站可用性监控怎么做?DNSPup 从基线到告警的完整实战
运维·ios·云计算·iphone·dns·网络监控
等我调个Bug2 小时前
Linux基本指令
linux·服务器
在角落发呆10 小时前
工具配置备份步骤:从手动备份到自动化方案
运维·windows·自动化
_upupup10 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
百度一下吧11 小时前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
JeJe同学11 小时前
Docker镜像导入、容器启动
linux·运维·docker
Jason_zhao_MR11 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
回眸&啤酒鸭11 小时前
【回眸】自动化白盒测试落地实战指南
运维·自动化·log4j