使用 nvidia 运行时构建 docker

use*_*302 15 docker nvidia-docker

我有一个 GPU 应用程序,可以在图像构建阶段进行单元测试。使用 Docker 19.03,可以指定 nvidia 运行时,docker run --gpus all但我还需要访问 GPU,docker build因为我进行单元测试。我怎样才能实现这个目标?

对于使用 nvidia-docker2 的旧版本 docker,无法在构建阶段指定运行时,但您可以将默认运行时设置为 nvidia,并且 docker 构建可以正常工作。我可以在不再需要 nvidia-docker 的 Docker 19.03 中执行此操作吗?如果是这样,怎么办?

Ant*_*hev 27

您需要按照文档中的说明使用nvidia-container-runtime:“这也是在 docker 构建期间访问 GPU 的唯一方法”。

Ubuntu 的步骤:

  1. 安装 nvidia-container-runtime:

    sudo apt-get install nvidia-container-runtime

  2. 使用内容编辑/创建 /etc/docker/daemon.json:

{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
         } 
    },
    "default-runtime": "nvidia" 
}
Run Code Online (Sandbox Code Playgroud)
  1. 重启 docker 守护进程:

    sudo systemctl restart docker

  2. 构建您的图像(现在 GPU 在构建过程中可用):

    docker build -t my_image_name:latest .

  • 那么,从字面上看,让“build”使用 nvidia 运行时(或者我猜,任何其他运行时)的*唯一*方法是将其设置为*默认*?天啊。这怎么不是一个选择呢? (9认同)
  • 仅供参考,如果您需要这个,因为您想使用 pytorch 编译自定义内核,您可以使用 nvidia 开发基础映像(例如 nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04)并设置 `ENV TORCH_CUDA_ARCH_LIST=Turing `,然后您也可以在构建过程中没有可用 GPU 的情况下构建它们 (2认同)

Sam*_*yer 12

重要通知
(除了现有答案之外)

目前(2023 年 3 月),如果您安装了 docker compose,仅配置默认运行时可能仍然不够。

除了配置默认运行时之外,您还必须禁用默认的 docker 构建工具包,方法是:

DOCKER_BUILDKIT=0 docker build <blah>
Run Code Online (Sandbox Code Playgroud)

即使您不使用 docker compose,这也适用,但它当然也适用于 docker compose。

也可以看看:

  • 这没有帮助...使用 DOCKER_BUILDKIT=0 或不使用它来构建它,在 docker 构建期间 GPU 仍然不可用。(Docker引擎版本23.0.5) (2认同)

use*_*302 5

我发现的一个“解决方案”是首先运行一个安装了主机 nvidia 驱动程序的基本映像

docker run -it --rm --gpus ubuntu
Run Code Online (Sandbox Code Playgroud)

然后在容器中手动构建我的应用程序并提交生成的图像。这并不理想,最好在构建阶段访问 nvidia-smi。