docker-compose:为每个缩放的容器保留不同的 GPU

mxb*_*xbi 5 docker docker-compose nvidia-docker

我有一个 docker-compose 文件,如下所示:

version: "3.9"
services:
  api:
    build: .
    ports:
      - "5000"
    deploy:
      resources:
        reservations:
          devices:
          - capabilities: [gpu]
            count: 1
Run Code Online (Sandbox Code Playgroud)

当我运行时docker-compose up,它会按预期运行,使用计算机上的第一个 GPU。

但是,如果我运行docker-compose up --scale api=2,我希望每个 docker 容器在主机上保留一个 GPU。

实际行为是两个容器接收相同的 GPU ,意味着它们会竞争资源。此外,如果我在 中指定了两个容器,并且都带有. 如果我为每个容器手动指定 device_ids ,它就可以工作。docker-compose.ymlcount: 1

如何才能让每个 docker 容器保留对 1 个 GPU 的独占访问权?这是一个错误还是有意的行为?

jor*_*ski 0

docker-compose请求扩展时的行为是根据服务提供的确切规范创建其他容器。

在创建附加容器的过程中,很少有规格参数会发生变化,并且这些参数devices是参数集的一部分host_config,无需修改即可复制。

docker-compose是Python项目,所以如果这对你来说很重要,你可以尝试实现它。驱动服务生命周期(创建、扩展等)的逻辑驻留在compose/services.py.