我想重复使用许多docker容器的GPU。 Nvidia提供了一个实用程序:多处理服务,记录在案here。具体来说它说:
首次在程序中初始化CUDA时,CUDA驱动程序会尝试 连接到MPS控制守护程序。如果连接尝试失败, 程序继续按照通常没有MPS的方式运行。如果 但是,连接尝试成功,MPS控制守护进程 继续确保以相同的用户ID启动的MPS服务器 连接客户端的那个在返回之前是活动的 客户。然后,MPS客户端继续连接到服务器。所有 MPS客户端,MPS控制守护进程和之间的通信 MPS服务器使用命名管道完成。
默认情况下,命名管道放在/tmp/nvidia-mps/
中,因此我使用卷与容器共享该目录。
但这还不足以让容器上的cuda驱动程序“看到”MPS服务器。
我应该在主机和容器之间共享哪些资源,以便它可以连接到MPS服务器?
答案 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)。