7

我想用 docker-compose 运行 2 个 docker 镜像。

一个图像应该使用 nvidia-docker 运行,另一个使用 docker 运行。

我已经看到这篇文章使用 nvidia-docker-compose 启动了一个容器,但很快就退出了,但这 对我不起作用(甚至只运行一个图像)......

任何想法都会很棒。

4

2 回答 2

11

更新:请先检查 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 组合。

于 2017-07-21T15:08:11.723 回答
3

除了接受的答案之外,这是我的方法,有点短。我需要使用旧版本的 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 上进行了测试。

于 2020-10-21T12:08:51.177 回答