如何从 Docker 容器连接到 Nvidia MPS 服务器?
Posted
技术标签:
【中文标题】如何从 Docker 容器连接到 Nvidia MPS 服务器?【英文标题】:How to connect to Nvidia MPS server from a Docker container? 【发布时间】:2018-01-25 05:51:15 【问题描述】:我想重叠许多 docker 容器对 GPU 的使用。 Nvidia 提供了一个实用程序来执行此操作:多进程服务,记录在 here。具体来说:
当 CUDA 首次在程序中初始化时,CUDA 驱动程序会尝试 连接到 MPS 控制守护程序。如果连接尝试失败, 程序继续像没有 MPS 的情况下正常运行。如果 但是,连接尝试成功,MPS 控制守护进程 继续确保 MPS 服务器以相同的用户 ID 启动 连接的客户端,在返回之前处于活动状态 客户。然后 MPS 客户端继续连接到服务器。全部 MPS 客户端、MPS 控制守护进程和 MPS 服务器是使用命名管道完成的。
默认情况下,命名管道位于/tmp/nvidia-mps/
,因此我使用卷与容器共享该目录。
但这还不足以让容器上的 cuda 驱动程序“看到”MPS 服务器。
我应该在主机和容器之间共享哪些资源,以便它可以连接到 MPS 服务器?
【问题讨论】:
this 可能感兴趣 【参考方案1】:要启动一个可以访问 mps 的容器,它必须绑定挂载到 /tmp/nvidia-mps
和与主机相同的 interprocess-communication group。
例如:
docker run -v /tmp/nvidia-mps:/tmp/nvidia-mps --ipc=host nvidia/cuda
【讨论】:
【参考方案2】:我认为不需要将 /tmp/nvidia-mps 映射到容器中。只要 IPC 命名空间相同,它应该可以工作。
如果您在主机上运行 MPS 控制守护程序,那么您需要使用 docker run 标志 --ipc=host,如前所述,因为 MPS 将使用 /dev/shm(这是 IPC 命名空间的位置映射到) 在主机上。使用 --ipc=host 标志将告诉 docker 将主机的 /dev/shm 映射到容器中,而不是在容器内创建私有 /dev/shm。
例如
docker run --ipc=host nvidia/cuda
请注意,也可以在容器内托管 MPS,并在容器之间共享该容器的 IPC 命名空间 (/dev/shm)。
【讨论】:
以上是关于如何从 Docker 容器连接到 Nvidia MPS 服务器?的主要内容,如果未能解决你的问题,请参考以下文章
在 Docker 容器中将 Spyder 连接到远程 Jupyter Notebook
如何从 Windows 10 上的容器连接到 docker 主机(Docker for Windows)
如何从 Angular Nginx 容器连接到 Node API docker 容器