2

是否可以运行两个 Nvidia Docker 容器,每个容器都有自己的 Nvidia 驱动程序版本?

在我的云实例上,我有一个较旧的应用程序正在运行,较新的 Nvidia 驱动程序正在导致问题。我希望能够继续使用较旧的驱动程序运行它,同时允许同一实例上的较新应用程序使用较新的驱动程序。我在想我可以用容器来完成这个,但我担心它们只允许你在用户空间中容器化东西。

4

3 回答 3

0

容器用于隔离进程。所有容器只有主机的内核相同,而虚拟机则不然。因此,您可以为具有旧驱动程序的旧应用程序创建一个容器,并为具有新 nvidia 驱动程序的新应用程序创建另一个容器。容器就是为此而生的。

但是对于 nvidia docker,每个 pod 可能需要 1 个 gpu,但这可以使用一些简单的方法绕过,这不是一个好的解决方案

于 2018-12-18T18:23:05.303 回答
0

答案是不。驱动程序安装在主机上。

这些文章: NVIDIA Docker:轻松部署 GPU 服务器应用程序 和更新 的在容器运行时生态系统中启用 GPU 讨论了堆栈的设置方式。

关键的一点是 Nvidia 带来了他们自己的 runc 版本(Docker 中实际运行容器进程的部分)。这个修改后的 runc 版本与主机操作系统通信,以使容器进程可以使用驱动程序级别的详细信息。

于 2020-03-05T18:14:24.437 回答
0

在此处输入图像描述

回答更新,实际上现在可以在不同的容器中使用不同的驱动程序版本。您所要做的就是更改 NVIDIA Container Toolkit 配置文件 (/etc/nvidia-container-runtime/config.toml),以便根指令指向驱动程序容器,如下所示:

disable-require = false
swarm-resource = "DOCKER_RESOURCE_GPU"

[nvidia-container-cli]
root = "/run/nvidia/driver"
path = "/usr/bin/nvidia-container-cli"
environment = []
debug = "/var/log/nvidia-container-toolkit.log"
ldcache = "/etc/ld.so.cache"
load-kmods = true
no-cgroups = false
user = "root:video"
ldconfig = "@/sbin/ldconfig.real"

[nvidia-container-runtime]
debug = "/var/log/nvidia-container-runtime.log"

此命令可直接用于进行此修改:

$sudo sed -i 's/^#root/root/' /etc/nvidia-container-runtime/config.toml

之后,您可以使用以下命令在后台运行具有所需驱动程序版本的容器:

$sudo docker run --name nvidia-driver -d --privileged --pid=host \
  -v /run/nvidia:/run/nvidia:shared \
  -v /var/log:/var/log \
  --restart=unless-stopped \
  nvidia/driver:450.80.02-ubuntu18.04

然后为您的工作运行所需版本的 CUDA 的 GPU 容器:

$sudo docker run --gpus all nvidia/cuda:11.0-base nvidia-smi
于 2021-08-05T11:03:03.790 回答