CentOS 7.9 离线安装 NVIDIA Container Toolkit:1.14.0 与 1.20.1 两种版本方案
一、背景在 CentOS 7.9 服务器上使用 Docker 运行 NVIDIA GPU 容器时除了安装 NVIDIA 显卡驱动还需要安装 NVIDIA Container Toolkit。在实际生产环境中服务器经常无法直接访问互联网因此比较常见的部署方式是联网 CentOS 7.9 │ ├── 配置 CentOS Yum 源 ├── 配置 NVIDIA Container Toolkit 源 ├── 下载 RPM 及依赖 │ ▼ 打包 RPM 离线安装包 │ ▼ 离线 CentOS 7.9 │ ├── 安装 RPM ├── 配置 Docker NVIDIA Runtime └── 验证 GPU 容器本文整理两套方案方案一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 测试机验证。二、环境说明本文测试环境操作系统CentOS Linux 7.9.2009 架构x86_64 容器运行时Docker 安装方式RPM 离线安装查看系统cat/etc/centos-releaseuname-m预期CentOS Linux release 7.9.2009 (Core) x86_64三、解决 CentOS 7 Yum 源失效CentOS 7 已经 EOL继续使用旧的mirrorlist.centos.org可能出现Could not retrieve mirrorlist Cannot find a valid baseurl for repo: base/7/x86_64因此先切换到 CentOS 7.9.2009 Vault 镜像源。3.1 备份原 Yum 配置mkdir-p/etc/yum.repos.d/backupmv/etc/yum.repos.d/CentOS-*.repo\/etc/yum.repos.d/backup/2/dev/null3.2 配置阿里云 CentOS Vaultcat/etc/yum.repos.d/CentOS-Base.repoEOF [base] nameCentOS-7.9.2009 - Base - Aliyun baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/os/$basearch/ gpgcheck0 enabled1 [updates] nameCentOS-7.9.2009 - Updates - Aliyun baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/updates/$basearch/ gpgcheck0 enabled1 [extras] nameCentOS-7.9.2009 - Extras - Aliyun baseurlhttps://mirrors.aliyun.com/centos-vault/7.9.2009/extras/$basearch/ gpgcheck0 enabled1 EOF清理缓存yum clean allrm-rf/var/cache/yum yum makecache检查yum repolist四、安装 RPM 下载工具安装yuminstall-ycurlwgetyum-utils检查whichcurlwhichyumdownloader正常应该能够看到/usr/bin/curl /usr/bin/yumdownloader五、配置 NVIDIA Container Toolkit 仓库下载 NVIDIA 官方 Repositorycurl-s-L\https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo\-o/etc/yum.repos.d/nvidia-container-toolkit.repo检查cat/etc/yum.repos.d/nvidia-container-toolkit.repo六、CentOS 7 GPG Repository Metadata 问题CentOS 7 使用较老的 Yum/GPG 组件实际配置 NVIDIA 仓库时可能遇到Gpg Keys not imported, cannot verify repomd.xml for repo libnvidia-container如果出现该问题可以关闭 Repository Metadata 的 GPG 检查sed-is/^repo_gpgcheck1/repo_gpgcheck0/g\/etc/yum.repos.d/nvidia-container-toolkit.repo注意repo_gpgcheck0表示关闭仓库元数据签名检查。如果配置中gpgcheck1仍然保留则 RPM 软件包自身的 GPG 校验仍可以继续启用。重新建立缓存yum clean allrm-rf/var/cache/yum yum makecache七、查看 NVIDIA Container Toolkit 可用版本执行yum--showduplicateslist\libnvidia-container1\libnvidia-container-tools\nvidia-container-toolkit\nvidia-container-runtime在本文环境中可以看到多个版本例如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可以选择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-18.1 创建下载目录mkdir-p/root/nvidia-container-1.14.0cd/root/nvidia-container-1.14.08.2 下载 RPM 及依赖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检查ls-lh查看 RPM 信息rpm-qp--queryformat\%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\n*.rpm九、方案二下载 NVIDIA Container Toolkit 1.20.1对于新部署环境可以测试较新的NVIDIA Container Toolkit 1.20.1主要软件包libnvidia-container1 libnvidia-container-tools nvidia-container-toolkit-base nvidia-container-toolkit9.1 创建目录mkdir-p/root/nvidia-container-1.20.1cd/root/nvidia-container-1.20.19.2 下载 RPM执行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检查ls-lh查看具体版本rpm-qp--queryformat\%{NAME} %{VERSION}-%{RELEASE} %{ARCH}\n*.rpm正常核心软件包应该类似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 不建议再按照旧教程额外混装老版本nvidia-container-runtime-3.14.0应尽量保证整套 NVIDIA Container Toolkit 软件包来自同一版本系列。十、两个版本怎么选择简单来说场景建议已有 CentOS 7 老环境1.14.0需要复刻已有生产环境使用与原环境一致的版本新部署 CentOS 7.9优先测试 1.20.1对稳定性要求高先在测试机验证后再部署新操作系统优先使用较新的 Toolkit对于 CentOS 7.9我个人更建议老生产环境 ↓ 保持原版本不为了“最新”强行升级 新部署环境 ↓ 先测试 1.20.1 ↓ Docker GPU 测试全部正常 ↓ 再制作离线包投入生产十一、制作离线安装包11.1 1.14.0cd/roottar-czvfnvidia-container-1.14.0-centos7.tar.gz\nvidia-container-1.14.0/11.2 1.20.1cd/roottar-czvfnvidia-container-1.20.1-centos7.tar.gz\nvidia-container-1.20.1/最后得到nvidia-container-1.14.0-centos7.tar.gz nvidia-container-1.20.1-centos7.tar.gz把对应文件复制到离线 CentOS 7.9 服务器即可。十二、离线安装 1.14.0解压tar-xzvfnvidia-container-1.14.0-centos7.tar.gzcdnvidia-container-1.14.0安装yum localinstall-y./*.rpm检查rpm-qa|grep-E\nvidia-container|libnvidia-container十三、离线安装 1.20.1解压tar-xzvfnvidia-container-1.20.1-centos7.tar.gzcdnvidia-container-1.20.1安装yum localinstall-y./*.rpm检查rpm-qa|grep-E\nvidia-container|libnvidia-container十四、检查 NVIDIA 驱动Container Toolkit 并不能代替 NVIDIA GPU 驱动。首先执行nvidia-smi必须保证宿主机 NVIDIA 驱动本身工作正常。如果nvidia-smi都不能正常识别 GPU那么应该先解决宿主机 NVIDIA Driver 问题而不是继续排查 Docker。十五、验证 NVIDIA Container Toolkit检查nvidia-container-cli--version新版还可以nvidia-ctk--version检查 runtimewhichnvidia-container-runtime以及nvidia-container-runtime--version十六、配置 Docker 使用 NVIDIA Runtime如果安装的是支持nvidia-ctk的版本可以执行nvidia-ctk runtime configure--runtimedocker然后systemctl restartdocker检查dockerinfo|grep-iruntime正常情况下应该能够看到nvidia十七、手工配置 Docker Runtime如果老版本环境无法使用nvidia-ctk runtime configure也可以手工配置。创建mkdir-p/etc/docker编辑vi/etc/docker/daemon.json例如{runtimes:{nvidia:{path:nvidia-container-runtime,runtimeArgs:[]}}}重启systemctl daemon-reload systemctl restartdocker检查dockerinfo|grep-iruntime十八、测试 Docker GPU宿主机首先确认nvidia-smi然后使用已有的 CUDA 镜像进行测试dockerrun--rm\--runtimenvidia\--gpusall\CUDA镜像\nvidia-smi如果服务器已经有业务 CUDA 镜像也可以直接使用已有镜像测试避免离线环境重新拉取镜像。正常情况下容器中的nvidia-smi应该能够识别宿主机 GPU。十九、常用排查命令查看安装的软件包rpm-qa|grep-E\nvidia|libnvidia查看 NVIDIA Runtimewhichnvidia-container-runtime查看 Toolkitnvidia-ctk--version查看 Container CLInvidia-container-cli--version查看 Docker Runtimedockerinfo|grep-iruntime查看 Dockersystemctl statusdocker查看日志journalctl-udocker-n100--no-pager检查 GPUnvidia-smi二十、常见问题1. Cannot find a valid baseurl错误Cannot find a valid baseurl for repo: base/7/x86_64原因通常是 CentOS 7 已 EOL旧 mirrorlist 不再正常工作。解决方法切换到 CentOS 7.9.2009 Vault 源2. NVIDIA 仓库 GPG 校验失败例如Gpg Keys not imported, cannot verify repomd.xml可以检查grep-E\gpgcheck|repo_gpgcheck|gpgkey\/etc/yum.repos.d/nvidia-container-toolkit.repoCentOS 7 老环境如果 repository metadata 校验存在兼容问题可以关闭repo_gpgcheck0然后yum clean allrm-rf/var/cache/yum yum makecache3. nvidia-container-runtime 找不到检查whichnvidia-container-runtimerpm-qa|grepnvidia-container再检查软件包提供了哪些文件rpm-qlnvidia-container-toolkit|\grepruntime4. Docker 看不到 GPU按照以下顺序排查宿主机 nvidia-smi ↓ NVIDIA Driver ↓ libnvidia-container ↓ NVIDIA Container Toolkit ↓ nvidia-container-runtime ↓ Docker Runtime ↓ GPU Container不要一开始就排查 Docker。如果宿主机nvidia-smi失败那么 Docker GPU 基本也无法正常工作。二十一、总结CentOS 7.9 已经属于生命周期结束的操作系统因此搭建 NVIDIA GPU 容器环境时需要特别注意 Yum 源和新版软件包兼容性。本文整理了两种离线安装方案方案一 NVIDIA Container Toolkit 1.14.0 nvidia-container-runtime 3.14.0 适合 已有老环境、兼容性优先、需要保持版本一致以及方案二 NVIDIA Container Toolkit 1.20.1 适合 新部署环境希望使用较新的 NVIDIA Container Toolkit实际生产环境建议遵循先在联网 CentOS 7.9 测试机下载 ↓ 完成实际安装 ↓ 验证 nvidia-smi ↓ 验证 nvidia-container-cli ↓ 验证 Docker Runtime ↓ 验证 Docker GPU ↓ 打包 RPM ↓ 部署到离线生产服务器对于已经稳定运行的老生产环境没有必要单纯为了追求最新版本而升级 NVIDIA Container Toolkit。对于新部署的 CentOS 7.9 环境可以优先测试 1.20.1如果出现 CentOS 7 兼容性问题再考虑使用经过验证的较老版本。