使用来自 docker-compose 的 nvidia-docker

use nvidia-docker from docker-compose

我想 运行 2 docker 张图像 docker-compose。

一个图像应该 运行 与 nvidia-docker 而另一个与 docker.

我看过这个postuse nvidia-docker-compose launch a container, but exited soon 但这对我不起作用(甚至 运行 只有一张图片)...

任何想法都会很棒。

更新:请先检查 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 代码 here,它只会在查询localhost:3476.

上的 nvidia 配置

你也可以手工制作这个 docker-compose 文件,因为它们非常简单,按照这个例子,用你的 nvidia 驱动程序版本替换 375.66 并放入尽可能多的 /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

我的例子可用here

在 NVIDIA Docker 2.5.0、Docker CE 19.03.13 和 NVIDIA-SMI 418.152.00 以及 Debian 10 上的 CUDA 10.1 上测试。