【问题标题】:docker-compose: Reserve a different GPU for each scaled containerdocker-compose:为每个缩放的容器保留不同的 GPU
【发布时间】:2021-03-11 21:13:25
【问题描述】:

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

version: "3.9"
services:
  api:
    build: .
    ports:
      - "5000"
    deploy:
      resources:
        reservations:
          devices:
          - capabilities: [gpu]
            count: 1

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

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

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

如何让每个 docker 容器保留对 1 个 GPU 的独占访问权限?这是错误还是预期行为?

【问题讨论】:

    标签: docker docker-compose nvidia-docker


    【解决方案1】:

    docker-compose 在请求缩放时的行为是根据服务提供的确切规范创建额外的容器。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 2020-04-22
      相关资源
      最近更新 更多