使用 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 detected
Result = 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 && chmod +x driver-file.sh && ./driver-file.sh
下载)。自 CUDA 10.1 以来,这些都是向前兼容的。
通过安装 sudo apt get update && sudo apt get install nvidia-container-toolkit
(然后使用 sudo systemctl restart docker
重新启动 docker 守护程序)在 docker
中启用 GPU 访问。
【讨论】:
以上是关于使用 docker 容器中的 GPU?的主要内容,如果未能解决你的问题,请参考以下文章
使用 gpu 内存作为约束使用 docker swarm 调度容器
docker容器内运行pytorch多gpu报错 RuntimeError: NCCL Error 2: unhandled system error