每个Docker容器的不同nvidia驱动程序版本

时间:2018-12-06 10:23:41

标签: gpu nvidia-docker

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

在我的云实例上,我有一个较旧的应用程序正在运行,而较新的Nvidia驱动程序正在引起该问题。我希望能够继续使用较旧的驱动程序运行,同时允许同一实例上的较新应用程序使用较新的驱动程序。我本以为我可以用容器来完成此任务,但我担心它们只允许您将用户空间中的内容容器化。

3 个答案:

答案 0 :(得分:0)

容器用于隔离过程。对于所有容器,只有主机的内核是相同的,对于虚拟机则不是这样。因此,您可以使用较旧的驱动程序为旧应用程序创建一个容器,并使用新的nvidia驱动程序为新应用程序创建另一个容器。容器就是为此目的而设计的。

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

答案 1 :(得分:0)

答案是否定的。驱动程序已安装在主机上。

这些文章: NVIDIA Docker: GPU Server Application Deployment Made Easy 和更新的 Enabling GPUs in the Container Runtime Ecosystem 讨论如何设置堆栈。

关键要点是Nvidia带来了自己的runc版本(Docker实际运行容器进程的部分)。修改后的runc版本与主机OS通信,以使驱动程序级详细信息可用于容器进程。

答案 2 :(得分:0)

enter image description here

回答更新,实际上现在可以在不同的容器中使用不同的驱动程序版本。您所要做的就是更改 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