我想用 docker-compose 运行 2 个 docker 镜像。
一个图像应该使用 nvidia-docker 运行,另一个使用 docker 运行。
我已经看到这篇文章使用 nvidia-docker-compose 启动了一个容器,但很快就退出了,但这 对我不起作用(甚至只运行一个图像)......
任何想法都会很棒。
我想用 docker-compose 运行 2 个 docker 镜像。
一个图像应该使用 nvidia-docker 运行,另一个使用 docker 运行。
我已经看到这篇文章使用 nvidia-docker-compose 启动了一个容器,但很快就退出了,但这 对我不起作用(甚至只运行一个图像)......
任何想法都会很棒。
更新:请先检查 nvidia-docker 2 及其对 docker-compose 的支持 https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions#do-you-support-docker-compose
(我首先建议添加 nvidia-docker 标签)。
如果您在此处查看 nvidia-docker-compose 代码,它只会在 localhost:3476 上查询 nvidia 配置后为 docker-compose 生成特定的 docker-file。
您也可以手动制作这个 docker-compose 文件,因为它们非常简单,按照这个示例,将 375.66 替换为您的 nvidia 驱动程序版本,并添加与显卡一样多的 /dev/nvidia[n] 行(确实不要试图将服务放在单独的 GPU 上,而是去做!):
services:
exampleservice0:
devices:
- /dev/nvidia0
- /dev/nvidia1
- /dev/nvidiactl
- /dev/nvidia-uvm
- /dev/nvidia-uvm-tools
environment:
- EXAMPLE_ENV_VARIABLE=example
image: company/image
volumes:
- ./disk:/disk
- nvidia_driver_375.66:/usr/local/nvidia:ro
version: '2'
volumes:
media: null
nvidia_driver_375.66:
external: true
然后只需使用经典的 docker-compose 命令运行这个手工制作的 docker-compose 文件。
也许您可以通过跳过其他服务中特定于 nvidia 的内容来与非 nvidia docker 组合。
除了接受的答案之外,这是我的方法,有点短。我需要使用旧版本的 docker-compose ( 2.3
) 因为需要runtime: nvidia
(不一定可以使用version: 3
- 请参阅此)。设置NVIDIA_VISIBLE_DEVICES=all
将使所有 GPU 可见。
version: '2.3'
services:
your-service-name:
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
# ...your stuff
我的例子可以在这里找到。
在 Debian 10 上的 NVIDIA Docker 2.5.0、Docker CE 19.03.13 和 NVIDIA-SMI 418.152.00 和 CUDA 10.1 上进行了测试。