如何从Docker容器连接到Nvidia MPS服务器?

时间:2017-08-16 23:38:56

标签: docker nvidia nvidia-docker

我想重复使用许多docker容器的GPU。 Nvidia提供了一个实用程序:多处理服务,记录在案here。具体来说它说:

  

首次在程序中初始化CUDA时,CUDA驱动程序会尝试   连接到MPS控制守护程序。如果连接尝试失败,   程序继续按照通常没有MPS的方式运行。如果   但是,连接尝试成功,MPS控制守护进程   继续确保以相同的用户ID启动的MPS服务器   连接客户端的那个在返回之前是活动的   客户。然后,MPS客户端继续连接到服务器。所有   MPS客户端,MPS控制守护进程和之间的通信   MPS服务器使用命名管道完成。

默认情况下,命名管道放在/tmp/nvidia-mps/中,因此我使用卷与容器共享该目录。

但这还不足以让容器上的cuda驱动程序“看到”MPS服务器。

我应该在主机和容器之间共享哪些资源,以便它可以连接到MPS服务器?

2 个答案:

答案 0 :(得分:0)

要启动具有mps访问权限的容器,它必须具有/tmp/nvidia-mps的绑定装载以及与主机相同的interprocess-communication group

例如:

docker run -v /tmp/nvidia-mps:/tmp/nvidia-mps --ipc=host nvidia/cuda

答案 1 :(得分:0)

我不认为需要将/ tmp / nvidia-mps映射到容器中。只要IPC名称空间相同,它就应该起作用。

如果您正在主机上运行MPS控制守护程序,则需要使用docker run标志--ipc = host,如前所述,因为MPS将使用/ dev / shm(这是IPC名称空间的位置)映射到主机上的)。使用--ipc = host标志将告诉docker将主机的/ dev / shm映射到容器中,而不是在容器内部创建私有的/ dev / shm。

例如

sam local start-api

请注意,也可以将MPS托管在容器内,并在容器之间共享该容器的IPC名称空间(/ dev / shm)。