小能豆

docker正确使用GPU参数的问题

javascript

在x86服务器上,使用ubuntu:20.04的镜像启动容器,设置–runtime=nvidia和–gpus参数,有什么具体区别? 我测试了下,发现–runtime=nvidia参数后,容器内并没有发现任何和CUDA相关的文件,无法使用nvidia-smi命令。而使用–gpus参数后,容器内则会出现一些cuda相关的文件,也可以正常使用nvidia-smi命令;


阅读 68

收藏
2024-06-13

共1个答案

小能豆

在使用 Docker 容器时,针对 NVIDIA GPU 的支持可以通过不同的参数来进行配置,主要有 --runtime=nvidia--gpus 参数。这两者的具体区别如下:

1. --runtime=nvidia 参数

当你使用 --runtime=nvidia 参数启动容器时,Docker 会使用 NVIDIA Container Runtime,这是 NVIDIA 提供的一个专门用于支持 GPU 的容器运行时。使用该参数,Docker Daemon 会调用 NVIDIA Container Runtime 来管理容器中的 GPU 资源。

使用 --runtime=nvidia 参数时,需要确保以下几点:

  • NVIDIA Container Toolkit 安装: 宿主机需要安装 NVIDIA Container Toolkit,这通常包括 NVIDIA Driver 和 NVIDIA Container Runtime。
  • 适配驱动和运行时版本: NVIDIA Driver 和 NVIDIA Container Runtime 的版本需要适配,否则可能会导致不兼容或无法识别 GPU。
  • 容器内部 CUDA 支持: 虽然 --runtime=nvidia 可以使容器访问宿主机的 GPU 资源,但容器内部仍需安装 CUDA 库和相关的 NVIDIA 工具,如 nvidia-smi 等。这些通常需要在 Dockerfile 中安装,或者在容器启动后手动安装。

2. --gpus 参数

--gpus 参数是 Docker 19.03 版本引入的,它提供了一种更加简化的方法来配置和使用 GPU。

使用 --gpus 参数时,可以指定要在容器内可见的 GPU 数量,例如 --gpus all 表示所有可用的 GPU,或者 --gpus device=0,1 表示使用 GPU 0 和 GPU 1。Docker Daemon 会自动管理 GPU 资源,并确保容器可以访问和使用这些 GPU。

使用 --gpus 参数时的特点:

  • 自动管理 GPU 资源: Docker Daemon 会自动管理 GPU 资源分配和使用,无需手动配置特定的运行时。
  • 简化配置: 不需要单独安装 NVIDIA Container Toolkit 或 NVIDIA Container Runtime。
  • 容器内 CUDA 支持: 使用 --gpus 参数启动的容器通常会自动包含 CUDA 库和 NVIDIA 工具,如 nvidia-smi,因为 Docker Daemon 会自动安装这些必要的组件。

区别总结

  • --runtime=nvidia 需要确保宿主机安装了 NVIDIA Container Toolkit,容器内需要手动安装 CUDA 库和 NVIDIA 工具。
  • --gpus Docker 19.03 版本引入的新参数,自动管理 GPU 资源,容器内会自动包含 CUDA 库和 NVIDIA 工具。

解决方案

如果你使用 --runtime=nvidia 后发现容器内无法使用 CUDA 相关工具,可以尝试在 Dockerfile 中或者容器启动后手动安装 CUDA 库和 NVIDIA 工具。或者考虑使用 --gpus 参数,以简化配置和确保容器内 CUDA 的正常使用。

2024-06-13