🚀 本文先拆解官方方法安装NVIDIA Container Toolkit的原理
以及可能遇到的问题,接着依据此,提出可行的
替代方案。注意本文的前提是docker本身可正常运行。
NVIDIA将nvidia docker的项目迁移到了nvidia container toolkit, 目前安装nvidia container toolkit即可。
🌔01
官方方法原理
⭐️ 本章节只是讲解nvidia官方的安装教程,不涉及本文实际的安装。(如果按照官方方法可以成功安装,想必你也不必查看我这篇博客了😂)
NVIDIA Container Toolkit的官方安装教程见链接: NVIDIA Container Toolkit
整理下来主要有以下三个部分:
# 第一部分,导入公钥并导入第三方源
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
# 第二部分,更新apt源(依赖于第一部分的源是否添加正确)
sudo apt-get update
# 第三部分,安装
sudo apt-get install -y nvidia-container-toolkit
这里涉及的关键原理主要是第一部分,将之拆解如下:
①
{\color{#E16B8C}{①}}
① 从https://nvidia.github.io/libnvidia-container/gpgkey下载公钥,并以二进制形式写入/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg。
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
在具体安装时可以查看这个文件内部是否为空,如果不为空,则公钥保存成功:
② {\color{#E16B8C}{②}} ② 从https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list下载软件源,并结合上一步的公钥信息nvidia-container-toolkit-keyring.gpg加以修改,然后写入/etc/apt/sources.list.d/nvidia-container-toolkit.list。
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
在具体安装时可以查看这个文件内部是否为空,如果不为空,则源保存成功:
如果你有代理工具,能够科学上网,那么第一部分的 ①② {\color{#E16B8C}{①②}} ①②依据官方教程就可以正常运行;如果你没有条件,直接运行命令会报错,不用想就是因为你没法科学上网,这时可以手动访问上述提及的网址(不用代理也行),手动将公钥和源写入上述提及的文件。
😰但是我遇到的问题是,就算第一部分的
①②
{\color{#E16B8C}{①②}}
①②都运行正常,第二部分也会报错,类似这样,说源位置不存在Release file。
那这一步骤如何解决呢?见第二章节。
🌔02
可行替代方案
🤔从本质上来说,官方教程只是通过apt源的方式转接到nvidia的官方仓库去下载符合你操作系统的deb软件包,那么我们何不直接到nvidia的github官方仓库下载呢?
参考官方教程中的源的表述($(ARCH)表示操作系统架构, e.g. amd64):
https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
我们直接访问:https://github.com/NVIDIA/libnvidia-container/tree/gh-pages/stable/deb
如果操作系统是ubuntu,则可以选择amd64文件夹,我们可以看到这里有许多的软件包,我们只需要下载并安装与你的环境相适配的版本的软件包即可(版本选择很重要,版本不对可能进不去docker容器,也可能docker容器内部跑深度学习会报错,主要参考你的nvidia驱动版本和docker版本是否支持)。
可以尝试用命令行下载安装(如果不行就手动装,装哪些参考下面的命令行),以nvidia-container-toolkit 1.17.0为例:
# 创建下载目录
mkdir ~/nvidia-container-toolkit-debs
cd ~/nvidia-container-toolkit-debs
# 下载相关包(按依赖顺序)
wget https://github.com/NVIDIA/libnvidia-container/raw/gh-pages/stable/deb/amd64/libnvidia-container1_1.17.0-1_amd64.deb
wget https://github.com/NVIDIA/libnvidia-container/raw/gh-pages/stable/deb/amd64/libnvidia-container-tools_1.17.0-1_amd64.deb
wget https://github.com/NVIDIA/libnvidia-container/raw/gh-pages/stable/deb/amd64/nvidia-container-toolkit-base_1.17.0-1_amd64.deb
wget https://github.com/NVIDIA/libnvidia-container/raw/gh-pages/stable/deb/amd64/nvidia-container-toolkit_1.17.0-1_amd64.deb
# 按顺序安装
sudo dpkg -i libnvidia-container1_1.17.0-1_amd64.deb
sudo dpkg -i libnvidia-container-tools_1.17.0-1_amd64.deb
sudo dpkg -i nvidia-container-toolkit-base_1.17.0-1_amd64.deb
sudo dpkg -i nvidia-container-toolkit_1.17.0-1_amd64.deb
# (可选)如果有依赖问题,运行
sudo apt-get install -f
安装完毕后,接下来,配置Docker:
# 配置 Docker 使用 NVIDIA 运行时
sudo nvidia-ctk runtime configure --runtime=docker
# 重启 Docker 守护进程
sudo systemctl restart docker
验证安装(要使用–gpus参数,使用–rm是指在创建的容器内运行命令后就删除容器):
sudo docker run --rm --gpus all [your_image:tag] nvidia-smi
如果出现了以下界面就说明安装成功了。