在 Ansible 中使用 nvidia-docker 而不是 docker

Posted

技术标签:

【中文标题】在 Ansible 中使用 nvidia-docker 而不是 docker【英文标题】:Use nvidia-docker instead of docker with Ansible 【发布时间】:2018-06-18 00:47:21 【问题描述】:

我正在尝试通过https://docs.ansible.com/ansible/latest/docker_container_module.html#docker-container 弄清楚如何使用 nvidia-docker (https://github.com/NVIDIA/nvidia-docker)。

问题

我当前的 Ansible 剧本使用“docker”命令而不是“nvidia-docker”来执行我的容器。

我做了什么

根据一些读数,我尝试添加我的设备,但没有成功

docker_container: name: testgpu image: " image " devices: ['/dev/nvidiactl', '/dev/nvidia-uvm', '/dev/nvidia0', '/dev/nvidia-uvm-tools] state: started

注意我尝试了不同的设备语法(内联..),但仍然遇到同样的问题

此命令不会引发任何错误。正如预期的那样,它使用我的图像创建了一个 Docker 容器并尝试启动它。

查看我的容器日志: terminate called after throwing an instance of 'std::runtime_error' what(): No CUDA driver found

这与我在运行时遇到的错误完全相同 docker run -it <image> 代替 nvidia-docker run -it <image>

在将 docker_container 与 Ansible 一起使用时如何覆盖 docker 命令的任何想法?

我可以确认我的 CUDA 驱动程序已安装,并且所有路径 /dev/nvidia* 都是有效的。

谢谢

【问题讨论】:

如果你仔细看,我已经链接了你在我之前的消息中所说的任何内容。您的所有信息都在关于 docker_container 的 ansible 文档的第一段中。 【参考方案1】:

docker_container 模块不使用 docker 可执行文件,它通过 docker-py Python 库使用 Docker 守护程序 API。

查看nvidia-docker 包装脚本,它设置了--runtime=nvidia-e NVIDIA_VISIBLE_DEVICES

要设置NVIDIA_VISIBLE_DEVICES,您可以使用docker_containerenv 参数。

但从当前的 Ansible 2.4 开始,我看不到通过 docker_container 模块设置 runtime 的方法。 您可以尝试通过在 daemon.json 配置文件中设置 "default-runtime": "nvidia" 来克服这个问题,因此 Docker 守护程序将默认使用 nvidia 运行时。

【讨论】:

感谢您的建议。我尝试基于 docker_container 制作自己的模块,但最终失败了,因为 runtime 是 api/container.py 的意外参数。我还尝试覆盖默认运行时但没有成功。现在我将只使用 Ansible 的 command,希望他们能够在新版本中自定义“运行时”

以上是关于在 Ansible 中使用 nvidia-docker 而不是 docker的主要内容,如果未能解决你的问题,请参考以下文章

安装使用NVIDIA-Docker-- 可使用GPU的Docker容器

在 Windows 10 + WSL2 上运行 nvidia-docker

Ubuntu 18.04安装Docker CE + NVIDIA-Docker

可以在没有 GPU 的情况下运行 nvidia-docker 吗?

如何确保容器运行时是 kubernetes 节点的 nvidia-docker?

nvidia-docker:获得许可被拒绝