使用 docker 容器中的 GPU?

Posted

技术标签:

【中文标题】使用 docker 容器中的 GPU?【英文标题】:Using GPU from a docker container? 【发布时间】:2014-09-30 20:46:13 【问题描述】:

我正在寻找一种在 docker 容器内使用 GPU 的方法。

容器会执行任意代码,所以我不想使用特权模式。

有什么建议吗?

根据之前的研究,我了解到 run -v 和/或 LXC cgroup 是可行的方法,但我不确定如何准确实现这一目标

【问题讨论】:

见***.com/questions/17792161/…,这与您的需要相似。 @NicolasGoy 该链接很好,但没有那么有用,因为出于安全原因我不能使用特权。 lxc-cgroups 是一个很好的指针,但还不够。我找到了一个方法,当一切都完善时我会自己回答。 【参考方案1】:

Regan 的回答很棒,但有点过时了,因为正确的方法是避免使用 lxc 执行上下文,因为 Docker 将 dropped LXC 作为 docker 0.9 的默认执行上下文。

相反,最好通过 --device 标志告诉 docker 有关 nvidia 设备的信息,并且只使用本机执行上下文而不是 lxc。

环境

这些说明在以下环境中进行了测试:

Ubuntu 14.04 CUDA 6.5 AWS GPU 实例。

在你的主机上安装 nvidia 驱动和 cuda

请参阅CUDA 6.5 on AWS GPU Instance Running Ubuntu 14.04 以获取您的主机设置。

安装 Docker

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update && sudo apt-get install lxc-docker

查找您的 nvidia 设备

ls -la /dev | grep nvidia

crw-rw-rw-  1 root root    195,   0 Oct 25 19:37 nvidia0 
crw-rw-rw-  1 root root    195, 255 Oct 25 19:37 nvidiactl
crw-rw-rw-  1 root root    251,   0 Oct 25 19:37 nvidia-uvm

运行预装了 nvidia 驱动的 Docker 容器

我创建了一个预装了 cuda 驱动程序的 docker image。如果你想知道这个镜像是如何构建的,dockerfile 可以在 dockerhub 上找到。

您需要自定义此命令以匹配您的 nvidia 设备。这对我有用:

 $ sudo docker run -ti --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm tleyden5iwx/ubuntu-cuda /bin/bash

验证 CUDA 是否正确安装

这应该从您刚刚启动的 docker 容器中运行。

安装 CUDA 示例:

$ cd /opt/nvidia_installers
$ ./cuda-samples-linux-6.5.14-18745345.run -noprompt -cudaprefix=/usr/local/cuda-6.5/

构建 deviceQuery 示例:

$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ make
$ ./deviceQuery   

如果一切正常,您应该会看到以下输出:

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs =    1, Device0 = GRID K520
Result = PASS

【讨论】:

既然不需要lxc,为什么还要安装lxc-docker呢? 我在主机上有 CUDA 5.5,在从您的图像创建的容器中安装了 CUDA 6.5。 CUDA 正在主机上工作,我将设备传递给容器。容器通过ls -la /dev | grep nvidia看到GPU但是CUDA找不到任何支持CUDA的设备:./deviceQuery ./deviceQuery Starting...CUDA Device Query (Runtime API) version (CUDART static linking)cudaGetDeviceCount returned 38-> no CUDA-capable device is detectedResult = FAIL是不是因为CUDA库不匹配主机和容器中? 我不知道,您可能想在 nvidia 论坛上提问。假设版本不匹配是一个问题,您可以使用此 Dockerfile 并对其进行编辑以拥有 CUDA 5.5 驱动程序,然后从中重建一个新的 docker 映像并使用它。 你能解释一下为什么image需要安装nvidia驱动吗?我认为只有主机安装 nvidia 驱动程序(并使用 --device ...)就足够了? 如果你有 Windows 作为主机,目前没有办法做到这一点。【参考方案2】:

写一个更新的答案,因为大多数已经存在的答案现在已经过时了。

早于Docker 19.03 的版本过去需要nvidia-docker2--runtime=nvidia 标志。

由于Docker 19.03,您需要安装nvidia-container-toolkit 包,然后使用--gpus all 标志。

所以,这里是基础,

包安装

按照official documentation at Github安装nvidia-container-toolkit包。

对于基于 Redhat 的操作系统,执行以下命令集:

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

$ sudo yum install -y nvidia-container-toolkit
$ sudo systemctl restart docker

对于基于 Debian 的操作系统,执行以下命令集:

# Add the package repositories
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker

在支持 GPU 的情况下运行 docker

docker run --name my_all_gpu_container --gpus all -t nvidia/cuda

请注意,--gpus all 标志用于将所有可用的 gpus 分配给 docker 容器。

将特定的 gpu 分配给 docker 容器(如果您的机器中有多个 GPU 可用)

docker run --name my_first_gpu_container --gpus device=0 nvidia/cuda

或者

docker run --name my_first_gpu_container --gpus '"device=0"' nvidia/cuda

【讨论】:

截至 2019 年,这是在 docker 容器中使用 GPU 的正确方式。 有没有人在 AWS 上的批处理作业中尝试过这个? 我相信这是最相关的。希望我能早点找到它,尽管我不得不调整来自 github.com/NVIDIA/nvidia-docker 的说明以使用 Ubuntu 20.04 @TimurBakeyev 但我们仍然无法在 Windows 主机上运行 ubuntu 容器? NVIDIA 官方说明docs.nvidia.com/datacenter/cloud-native/container-toolkit/… 说要安装nvidia-docker2。他们应该更新吗?【参考方案3】:

好吧,我终于设法在不使用 --privileged 模式的情况下做到了。

我在 ubuntu 服务器 14.04 上运行,我使用的是最新的 cuda(6.0.37 用于 linux 13.04 64 位)。


准备

在您的主机上安装 nvidia 驱动程序和 cuda。 (这可能有点棘手,所以我建议您遵循本指南https://askubuntu.com/questions/451672/installing-and-testing-cuda-in-ubuntu-14-04)

注意:保留用于主机 cuda 安装的文件非常重要


使用 lxc 让 Docker 守护进程运行

我们需要使用 lxc 驱动程序运行 docker daemon 才能修改配置并让容器访问设备。

一次性使用:

sudo service docker stop
sudo docker -d -e lxc

永久配置 修改位于 /etc/default/docker 中的 docker 配置文件 通过添加 '-e lxc' 更改 DOCKER_OPTS 行 这是我修改后的线路

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -e lxc"

然后使用重新启动守护进程

sudo service docker restart

如何检查守护进程是否有效使用lxc驱动?

docker info

执行驱动程序行应如下所示:

Execution Driver: lxc-1.0.5

使用 NVIDIA 和 CUDA 驱动程序构建您的映像。

这是一个基本的 Dockerfile 来构建一个 CUDA 兼容的镜像。

FROM ubuntu:14.04
MAINTAINER Regan <http://***.com/questions/25185405/using-gpu-from-a-docker-container>

RUN apt-get update && apt-get install -y build-essential
RUN apt-get --purge remove -y nvidia*

ADD ./Downloads/nvidia_installers /tmp/nvidia                             > Get the install files you used to install CUDA and the NVIDIA drivers on your host
RUN /tmp/nvidia/NVIDIA-Linux-x86_64-331.62.run -s -N --no-kernel-module   > Install the driver.
RUN rm -rf /tmp/selfgz7                                                   > For some reason the driver installer left temp files when used during a docker build (i don't have any explanation why) and the CUDA installer will fail if there still there so we delete them.
RUN /tmp/nvidia/cuda-linux64-rel-6.0.37-18176142.run -noprompt            > CUDA driver installer.
RUN /tmp/nvidia/cuda-samples-linux-6.0.37-18176142.run -noprompt -cudaprefix=/usr/local/cuda-6.0   > CUDA samples comment if you don't want them.
RUN export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64         > Add CUDA library into your PATH
RUN touch /etc/ld.so.conf.d/cuda.conf                                     > Update the ld.so.conf.d directory
RUN rm -rf /temp/*  > Delete installer files.

运行您的图像。

首先,您需要确定与您的设备关联的主要号码。 最简单的方法是执行以下命令:

ls -la /dev | grep nvidia

如果结果为空白,则使用在主机上启动其中一个示例应该可以解决问题。 结果应该是这样的 如您所见,组和日期之间有一组 2 个数字。 这两个数字被称为主要和次要数字(按此顺序编写)并设计一个设备。 为方便起见,我们将仅使用主要数字。

为什么要激活 lxc 驱动程序? 使用允许我们的容器访问这些设备的 lxc conf 选项。 选项是:(我建议使用 * 作为次要编号,因为它会减少运行命令的长度)

--lxc-conf='lxc.cgroup.devices.allow = c [major number]:[minor number or *] rwm'

所以如果我想启动一个容器(假设你的图像名称是 cuda)。

docker run -ti --lxc-conf='lxc.cgroup.devices.allow = c 195:* rwm' --lxc-conf='lxc.cgroup.devices.allow = c 243:* rwm' cuda

【讨论】:

可以分享容器吗? Docker 有一个--device 选项来允许容器访问主机的设备。但是我尝试使用--device=/dev/nvidia0 让docker容器运行cuda并失败了。 然后我成功地用--device 公开了所有/dev/nvidiao/dev/nvidia1/dev/nvidiactl/dev/nvidia-uvm。虽然不知道为什么。 感谢您对/dev/nvidia*@Regan 的提示。对于@ChillarAnand,我做了一个cuda-docker 可能是一个点更新这个答案的想法。不再建议这样做【参考方案4】:

我们刚刚发布了一个实验性的GitHub repository,它应该可以简化在 Docker 容器中使用 NVIDIA GPU 的过程。

【讨论】:

有windows支持吗?似乎不是,但也许我错过了一些东西。 不支持 Windows。运行 CUDA 容器需要适用于 Linux 的 Nvidia 驱动程序和访问代表 GPU 的 Linux 设备,例如/dev/nvidia0.当 Docker 安装在 Windows 上并在 VirtualBox 虚拟机中运行时,这些设备和驱动程序不可用。 在运行命令中还需要 --device 声明吗?我已经从 nvidia/cuda 构建了一个容器并且容器运行良好,但是应用程序(Wowza)无法识别 GPU,而直接在主机上运行时它运行良好(这个主机,所以我知道驱动程序很好) .我正在运行 361.28。主机是 EC2,在 g2.8xlarge 上使用 NVidia AMI。 nvidia-docker 不会处理所有事情,您应该能够在容器内运行 nvidia-smi 并查看您的设备【参考方案5】:

NVIDIA 最近的增强已经产生了一种更强大的方法来做到这一点。

基本上他们已经找到了一种方法来避免在容器内安装 CUDA/GPU 驱动程序并使其与主机内核模块匹配。

相反,驱动程序位于主机上,容器不需要它们。 它现在需要修改后的 docker-cli。

这很棒,因为现在容器更便携了。

在 Ubuntu 上的快速测试:

# Install nvidia-docker and nvidia-docker-plugin
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

# Test nvidia-smi
nvidia-docker run --rm nvidia/cuda nvidia-smi

更多详情见: GPU-Enabled Docker Container 和:https://github.com/NVIDIA/nvidia-docker

【讨论】:

一旦你完成了所有的步骤,这就会很好地工作。 Nvidia 并没有在一个地方提供所有功能,但this example 提供了使其适用于常见用例所需的一切。 @KobeJohn - 我只是按照安装说明、如何使用命令行并确保我的容器继承自 cuda 容器。它只适合我。 实际上,你能给出使用 nvidia-docker 有意义的真实场景吗? @Suncatcher - 我在需要访问 GPU 进行 3D 渲染的集群中使用它。将应用程序 Docker 化使部署和维护变得更简单。【参考方案6】:

为 ubuntu 16.04 上的 cuda-8.0 更新

安装dockerhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04

构建以下包含 nvidia 驱动程序和 cuda 工具包的映像

Dockerfile

FROM ubuntu:16.04
MAINTAINER Jonathan Kosgei <jonathan@saharacluster.com>

# A docker container with the Nvidia kernel module and CUDA drivers installed

ENV CUDA_RUN https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda_8.0.44_linux-run

RUN apt-get update && apt-get install -q -y \
  wget \
  module-init-tools \
  build-essential 

RUN cd /opt && \
  wget $CUDA_RUN && \
  chmod +x cuda_8.0.44_linux-run && \
  mkdir nvidia_installers && \
  ./cuda_8.0.44_linux-run -extract=`pwd`/nvidia_installers && \
  cd nvidia_installers && \
  ./NVIDIA-Linux-x86_64-367.48.run -s -N --no-kernel-module

RUN cd /opt/nvidia_installers && \
  ./cuda-linux64-rel-8.0.44-21122537.run -noprompt

# Ensure the CUDA libs and binaries are in the correct environment variables
ENV LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64
ENV PATH=$PATH:/usr/local/cuda-8.0/bin

RUN cd /opt/nvidia_installers &&\
    ./cuda-samples-linux-8.0.44-21122537.run -noprompt -cudaprefix=/usr/local/cuda-8.0 &&\
    cd /usr/local/cuda/samples/1_Utilities/deviceQuery &&\ 
    make

WORKDIR /usr/local/cuda/samples/1_Utilities/deviceQuery
    运行您的容器

sudo docker run -ti --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm <built-image> ./deviceQuery

您应该会看到类似于以下内容的输出:

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0, CUDA Runtime Version = 8.0, NumDevs = 1, Device0 = GRID K520 Result = PASS

【讨论】:

我得到以下输出。 cudaGetDeviceCount 返回 38 -> 未检测到支持 CUDA 的设备 结果 = FAIL 回复晚了,但这意味着你的机器上可能没有 GPU Cuda-9 版本会和这个差不多吗? @huseyintugrulbuyukisik 在 askubuntu askubuntu.com/questions/967332/… 上看到这个答案,我想说你可以使用这个答案作为指导,但我没有使用 cuda 9 来确认同样的步骤适用跨度> 不要这样做。这是老办法。使用新方法。请参阅我的答案的链接。这种方法充满了问题。【参考方案7】:

目标:

我的目标是在不使用 nvidia/cuda 作为基础镜像的情况下制作启用 CUDA 的 docker 镜像。因为我有一些自定义的 jupyter 图像,我想以此为基础。

先决条件:

主机已安装 nvidia 驱动程序CUDA 工具包nvidia-container-toolkit。请参考官方文档,以及Rohit's answer。

测试 nvidia 驱动程序和 CUDA 工具包是否已正确安装:主机上的 nvidia-smi,应显示正确的“驱动程序版本”和“CUDA 版本”并显示 GPU 信息。

测试 nvidia-container-toolkit 是否正确安装:docker run --rm --gpus all nvidia/cuda:latest nvidia-smi

Dockerfile

我发现我认为是 nvidia/cuda here 的官方 Dockerfile 我将其“扁平化”,将内容附加到我的 Dockerfile 并测试它是否正常工作:

FROM sidazhou/scipy-notebook:latest
# FROM ubuntu:18.04 

###########################################################################
# See https://gitlab.com/nvidia/container-images/cuda/-/blob/master/dist/10.1/ubuntu18.04-x86_64/base/Dockerfile
# See https://sarus.readthedocs.io/en/stable/user/custom-cuda-images.html
###########################################################################
USER root

###########################################################################
# base
RUN apt-get update && apt-get install -y --no-install-recommends \
    gnupg2 curl ca-certificates && \
    curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub | apt-key add - && \
    echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" > /etc/apt/sources.list.d/cuda.list && \
    echo "deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 /" > /etc/apt/sources.list.d/nvidia-ml.list && \
    apt-get purge --autoremove -y curl \
    && rm -rf /var/lib/apt/lists/*

ENV CUDA_VERSION 10.1.243
ENV CUDA_PKG_VERSION 10-1=$CUDA_VERSION-1

# For libraries in the cuda-compat-* package: https://docs.nvidia.com/cuda/eula/index.html#attachment-a
RUN apt-get update && apt-get install -y --no-install-recommends \
    cuda-cudart-$CUDA_PKG_VERSION \
    cuda-compat-10-1 \
    && ln -s cuda-10.1 /usr/local/cuda && \
    rm -rf /var/lib/apt/lists/*

# Required for nvidia-docker v1
RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && \
    echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf

ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64


###########################################################################
#runtime next
ENV NCCL_VERSION 2.7.8

RUN apt-get update && apt-get install -y --no-install-recommends \
    cuda-libraries-$CUDA_PKG_VERSION \
    cuda-npp-$CUDA_PKG_VERSION \
    cuda-nvtx-$CUDA_PKG_VERSION \
    libcublas10=10.2.1.243-1 \
    libnccl2=$NCCL_VERSION-1+cuda10.1 \
    && apt-mark hold libnccl2 \
    && rm -rf /var/lib/apt/lists/*

# apt from auto upgrading the cublas package. See https://gitlab.com/nvidia/container-images/cuda/-/issues/88
RUN apt-mark hold libcublas10


###########################################################################
#cudnn7 (not cudnn8) next

ENV CUDNN_VERSION 7.6.5.32

RUN apt-get update && apt-get install -y --no-install-recommends \
    libcudnn7=$CUDNN_VERSION-1+cuda10.1 \
    && apt-mark hold libcudnn7 && \
    rm -rf /var/lib/apt/lists/*


ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES all
ENV NVIDIA_REQUIRE_CUDA "cuda>=10.1"


###########################################################################
#docker build -t sidazhou/scipy-notebook-gpu:latest .

#docker run -itd -gpus all\
#  -p 8888:8888 \
#  -p 6006:6006 \
#  --user root \
#  -e NB_UID=$(id -u) \
#  -e NB_GID=$(id -g) \
#  -e GRANT_SUDO=yes \
#  -v ~/workspace:/home/jovyan/work \
#  --name sidazhou-jupyter-gpu \
#  sidazhou/scipy-notebook-gpu:latest

#docker exec sidazhou-jupyter-gpu python -c "import tensorflow as tf; print(tf.config.experimental.list_physical_devices('GPU'))"

【讨论】:

这个答案真的救了我!我必须使用 ubuntu 16.04 以及许多其他依赖项在现有 docker 映像上安装 tensorflow-gpu,而这个 Dockerfile 是干净安装它的唯一方法。注意:我必须在第一次运行后添加一个 RUN apt-get install apt-transport-https (以便以后的 RUN 可以从 https nvidia urls 下载)并且我还删除了 apt-getpurge 和 rm -rf /var/lib /apt/lists/ 声明显然造成了一些麻烦。 注意,安装 CUDA 后,您无法重置 USER。这可能会导致图像出现问题。做USER $NB_UID 应该重置它。此外,我认为这可以通过使用conda 来简化,无论如何它都可以在scipy-notebook 图像中找到。 哦,你能把sidazhou/scipy-notebook的Dockerfile源也发一下吗? @KonradRudolph 它基于jupyter/scipy-notebook 并安装了一些额外的软件包。我认为这与本次讨论无关。 @SidaZhou 啊,如果是jupyter/scipy-notebook,那很好,是的。我还没有为自己工作,但我已经有一个多月没有从事这个项目了,我不记得我是否尝试过基于scipy-notebook【参考方案8】:

要使用 docker 容器中的 GPU,而不是使用本机 Docker,请使用 Nvidia-docker。要安装 Nvidia docker,请使用以下命令

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey |  sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-
docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker
sudo pkill -SIGHUP dockerd # Restart Docker Engine
sudo nvidia-docker run --rm nvidia/cuda nvidia-smi # finally run nvidia-smi in the same container

【讨论】:

【参考方案9】:

使用 mviereck 的x11docker:

https://github.com/mviereck/x11docker#hardware-acceleration 说

硬件加速

通过选项 -g、--gpu 可以实现 OpenGL 的硬件加速。

在大多数情况下,这将在主机上使用开源驱动程序时开箱即用。否则,请查看 wiki:功能依赖项。 闭源 NVIDIA 驱动程序需要一些设置并支持较少的 x11docker X 服务器选项。

这个脚本非常方便,因为它可以处理所有的配置和设置。使用 gpu 在 X 上运行 docker 镜像非常简单

x11docker --gpu imagename

【讨论】:

根据需要,这似乎有点矫枉过正。 x11docker 的主要用途似乎是一个 GUI,可以选择启用 GPU 加速。【参考方案10】:

如果可以使用 docker,我不建议在主机上安装 CUDA/cuDNN。至少从 CUDA 8 开始,就有可能“站在巨人的肩膀上”并使用 NVIDIA 在其Docker Hub repo 中维护的nvidia/cuda 基础映像。如果不确定要选择哪个版本,请选择最新和最大的版本(如果进行深度学习,则使用 cuDNN)。

一个初始 CUDA 容器:

mkdir ~/cuda11
cd ~/cuda11

echo "FROM nvidia/cuda:11.0-cudnn8-devel-ubuntu18.04" > Dockerfile
echo "CMD [\"/bin/bash\"]" >> Dockerfile

docker build --tag mirekphd/cuda11 .

docker run --rm -it --gpus 1 mirekphd/cuda11 nvidia-smi

示例输出:

(如果在容器中找不到nvidia-smi,请不要尝试将其安装在那里 - 它已经使用 NVIDIA GPU 驱动程序安装在主机上,如果 docker 有访问 GPU)

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.57       Driver Version: 450.57       CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:01:00.0  On |                  N/A |
|  0%   50C    P8    17W / 280W |    409MiB / 11177MiB |      7%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

先决条件

    在主机上首先安装支持最新 CUDA 版本的适当 NVIDIA 驱动程序(从NVIDIA Driver Downloads 下载,然后从mv driver-file.run driver-file.sh &amp;&amp; chmod +x driver-file.sh &amp;&amp; ./driver-file.sh 下载)。自 CUDA 10.1 以来,这些都是向前兼容的。

    通过安装 sudo apt get update &amp;&amp; sudo apt get install nvidia-container-toolkit(然后使用 sudo systemctl restart docker 重新启动 docker 守护程序)在 docker 中启用 GPU 访问。

【讨论】:

以上是关于使用 docker 容器中的 GPU?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Docker中使用Nvidia GPU

使用 gpu 内存作为约束使用 docker swarm 调度容器

docker 使用

docker里找不到gpu

docker容器内运行pytorch多gpu报错 RuntimeError: NCCL Error 2: unhandled system error

在Docker中使用TensorFlow(GPU版+Ubuntu 20.04)