使用docker-compose来使用nvidia-docker

7
我想使用docker-compose运行两个docker镜像。
其中一个镜像应该使用nvidia-docker,另一个镜像应该使用普通docker。
我看过这篇文章使用nvidia-docker-compose启动容器,但很快就退出了,但对我不起作用(甚至只运行一个镜像也不行)...
有任何想法都可以。
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 代码 here,它只在查询本地主机上的 nvidia 配置后为 docker-compose 生成特定的 docker 文件。

您也可以手动制作此 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 dockers进行组合。


这对我很有帮助,而且绝对是正确的答案。你知道这在哪里有记录吗? - lollercoaster
嗨!如果您的使用方式兼容,那么版本2应该会变得更简单。我从代码中解决了这个问题,但我想对于版本1.0来说,最好的方法是参考NVIDIA docker文档:https://github.com/NVIDIA/nvidia-docker/wiki/GPU-isolation-%28version-1.0%29 - florentbuisson

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。


根据链接“将docker-compose升级到1.27.0+”解决了问题“>3”。 - FreeSoftwareServers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接