PyTorch 和 TensorFlow 中的 GPU ID 命名法

问题描述 投票:0回答:1

docker如何为容器分配GPU?

当我在具有 3 个 GPU 的计算机上运行 3 个 docker 容器时,GPU ID 会发生变化吗?

docker cuda
1个回答
2
投票

Docker 本身并不原生管理 GPU 到容器的分配。然而,NVIDIA 的 Docker 运行时(称为 NVIDIA Container Toolkit(以前称为 NVIDIA Docker))提供了一种以受控方式将 GPU 传递到容器的机制。

当您使用 NVIDIA Container Toolkit 启动 Docker 容器时,您可以使用

--gpus
标志指定容器可以使用哪些 GPU。您可以为每个容器分配特定的 GPU,容器内 GPU 的 ID 将对应于您分配的 GPU 子集。

例如,如果主机上有 3 个 GPU,并且想要运行 3 个不同的容器,每个容器使用不同的 GPU,则可以像这样启动每个容器:

# Assign GPU 0 to container1
docker run --gpus '"device=0"' -d container1

# Assign GPU 1 to container2
docker run --gpus '"device=1"' -d container2

# Assign GPU 2 to container3
docker run --gpus '"device=2"' -d container3

在每个容器内,分配的 GPU 将显示为 GPU 0,因为它是该容器唯一可见的 GPU。这意味着从容器内运行的任何框架(无论是 TensorFlow、PyTorch 等)的角度来看,它们只会看到一个 GPU,并且索引为 0。

这种抽象允许每个容器使用 GPU,就好像它们是该 GPU 的唯一用户一样,而无需担心主机系统上的实际 GPU ID。这使得开发和部署应用程序变得更加简单,因为您的代码不需要了解主机的 GPU 配置。

如果您想让所有 GPU 可用于容器,但仍限制每个应用程序使用特定的 GPU,您仍然需要使用

--gpus
标志,并且在容器内部,您可以使用特定框架的控制使用哪个 GPU GPU选择方法(如设置
CUDA_VISIBLE_DEVICES
环境变量)。

请注意,要使用

--gpus
标志,您需要在主机系统上安装 NVIDIA Container Toolkit,并且需要将 Docker 守护进程配置为使用 nvidia-container-runtime 作为其默认运行时或在运行时指定它容器。

© www.soinside.com 2019 - 2024. All rights reserved.