是否可以运行两个Nvidia Docker容器,每个容器都有自己的Nvidia驱动程序版本?
在我的云实例上,我有一个较旧的应用程序正在运行,而较新的Nvidia驱动程序正在引起该问题。我希望能够继续使用较旧的驱动程序运行,同时允许同一实例上的较新应用程序使用较新的驱动程序。我本以为我可以用容器来完成此任务,但我担心它们只允许您将用户空间中的内容容器化。
答案 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)
回答更新,实际上现在可以在不同的容器中使用不同的驱动程序版本。您所要做的就是更改 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