从Docker容器中使用GPU?

238
我正在寻找一种在Docker容器内部使用GPU的方法。 由于容器将执行任意代码,因此我不想使用特权模式。 有什么建议吗? 从以前的研究中,我了解到run -v和/或LXC cgroup是可行的方法,但我不确定如何确切地实现这一点。

请参考 https://dev59.com/aWMm5IYBdhLWcg3wMs3R,该链接与您的需求类似。 - Nicolas Goy
1
@NicolasGoy 这个链接不错,但出于安全原因我不能使用特权。lxc-cgroups是一个好的指针,但不足够。我已经找到了一种方法,一切完成后我会自己回答。 - Regan
10个回答

163

由于大部分已有的答案已经过时,因此我将提供最新的答案。

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

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

以下是基础知识:

包安装

根据 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用于将所有可用的GPU分配给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

20
截至2019年,这是在Docker容器内使用GPU的正确方法。 - Timur Bakeyev
4
有人曾经在 AWS 的批处理作业中尝试过这个吗? - medley56
1
我认为这是最相关的。但愿我早点找到它,尽管我不得不根据https://github.com/NVIDIA/nvidia-docker的说明进行调整以适用于Ubuntu 20.04。 - VictorLegros
2
NVIDIA的官方指南 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker 建议安装nvidia-docker2。他们是否需要更新? - WurmD
是的,@WurmD是正确的。非常感谢你的指导Rohit,但请解释一下你的答案(nvidia-container-toolkit)和官方文档nvidia-docker2)之间的软件包安装差异。 - Atralb
显示剩余7条评论

139
Regan的回答很好,但是有点过时了,因为正确的方法是避免使用lxc执行上下文,因为自docker 0.9起,Docker已将其作为默认执行上下文dropped LXC
相反,更好的做法是通过--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容器

我创建了一个docker镜像,其中预先安装了cuda驱动程序。 如果您想知道如何构建此镜像,则可以在dockerhub上找到dockerfile

您需要根据自己的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

6
如果您不需要lxc,为什么要安装lxc-docker呢? - MP0
7
我在主机上安装了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库不匹配导致的吗? - brunetto
1
我不知道,你可能想在Nvidia论坛上问问。假设版本不匹配是个问题,你可以使用这个Dockerfile并将其编辑为CUDA 5.5驱动程序,然后从中重新构建一个新的Docker镜像并使用它。 - tleyden
4
为什么镜像需要安装Nvidia驱动程序?我认为只有主机安装了Nvidia驱动程序(并使用--device…)就足够了,能否解释一下原因? - Helin Wang
3
如果您的主机是Windows操作系统,目前没有办法做到这一点。 - Souradeep Nanda
显示剩余6条评论

44

好的,我终于成功地做到了,而且没有使用--privileged模式。

我正在运行Ubuntu服务器14.04,使用最新的CUDA(适用于Linux 13.04 64位的6.0.37版本)。


准备工作

在主机上安装NVIDIA驱动程序和CUDA。(这可能有点棘手,因此我建议您按照此指南进行操作:https://askubuntu.com/questions/451672/installing-and-testing-cuda-in-ubuntu-14-04

注意:非常重要的是,您要保留用于主机CUDA安装的文件。


使用lxc运行Docker守护程序

我们需要使用lxc驱动程序运行Docker守护程序,以便能够修改配置并使容器可以访问设备。

一次性使用:

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 <https://dev59.com/Pl8e5IYBdhLWcg3w9-Rs

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

如果结果为空,使用在主机上启动其中一个示例即可。 结果应该如下所示: enter image description here 正如您所看到的,在组和日期之间有一组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

1
Docker有一个--device选项,允许容器访问主机的设备。然而,我尝试使用--device=/dev/nvidia0来允许Docker容器运行CUDA,但失败了。 - shiquanwang
4
我成功地使用 --device 暴露了所有的 /dev/nvidia0/dev/nvidia1/dev/nvidiactl/dev/nvidia-uvm。但我不知道原因。 - shiquanwang
当我需要找到这个解决方案时,--device选项尚未实现。您需要至少nvidia0或nvidia1(显卡)以及nvidiactl(通用nvidia设备)和nvidia-uvm(联合内存设备)。 - Regan
2
感谢Regan提供有关/dev/nvidia*的提示。针对@ChillarAnand,我制作了一个cuda-docker - shiquanwang
1
可能有必要指出更新此答案。不再建议以这种方式进行操作。 - hookenz
显示剩余3条评论

34

我们刚刚发布了一个实验性的GitHub代码库,这将简化在Docker容器中使用NVIDIA GPU的过程。


4
有Windows支持吗?似乎没有,但也许我漏看了什么。 - Blaze
7
不支持Windows系统。运行CUDA容器需要Linux的Nvidia驱动程序,以及访问代表GPU的Linux设备,例如/dev/nvidia0。当Docker安装在Windows上并在VirtualBox虚拟机中运行时,这些设备和驱动程序是不可用的。 - Paweł Bylica
需要在运行命令中添加--device声明吗?我已经构建了一个基于nvidia/cuda的容器,并且容器可以正常运行,但是应用程序(Wowza)无法识别GPU,而直接在主机上运行时却可以(这个主机,所以我知道驱动程序没问题)。我正在运行361.28。主机是在g2.8xlarge上使用NVidia AMI的EC2。 - rainabba
不用担心,nvidia-docker 已经处理好了一切,你应该能够在容器内运行 nvidia-smi 并查看你的设备。 - 3XX0

28

最近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


1
一旦你掌握了所有步骤,这个方法就很有效。Nvidia没有提供一个集成的解决方案,但是这个例子提供了你需要的一切,可以让它与常见的用例一起工作。 - KobeJohn
@KobeJohn - 我刚刚按照安装说明进行了操作,使用命令行并确保我的容器继承自cuda容器。对我来说,它很好用。 - hookenz
2
实际上,您能否提供一些现实场景,说明在何时使用nvidia-docker是有意义的? - Suncatcher
@Suncatcher - 我正在使用它在需要访问GPU进行3D渲染的集群中。将应用程序Docker化使得部署和维护变得更加简单。 - hookenz

17

为Ubuntu 16.04上的cuda-8.0更新

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
  1. 运行您的容器

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驱动程序=CUDART,CUDA驱动程序版本=8.0,CUDA运行时版本=8.0,NumDevs = 1,Device0 = GRID K520 Result = PASS


3
我得到了以下输出。cudaGetDeviceCount返回了38 -> 没有检测到支持CUDA的设备。结果=失败。 - Soichi Hayashi
回复晚了,但这意味着您的机器可能没有GPU。 - Jonathan
CUDA-9版本会和这个版本几乎一样吗? - huseyin tugrul buyukisik
@huseyintugrulbuyukisik,请查看askubuntu上的这个答案https://askubuntu.com/questions/967332/how-can-i-install-cuda-9-on-ubuntu-17-10,我认为你可以将此答案用作指南,但我没有使用cuda 9来确认是否适用相同的步骤。 - Jonathan
不要这样做。这是旧的方法。使用新的方法。请查看我的答案链接。这种方法存在很多问题。 - hookenz

14

目标:

我的目标是制作一个支持CUDA的Docker镜像,而不使用nvidia/cuda作为基础镜像。因为我有一些自定义的jupyter镜像,并且我希望以此为基础。

先决条件:

主机已经安装了nvidia驱动程序CUDA工具包nvidia-container-toolkit。请参考官方文档和Rohit的答案

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

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

Dockerfile

我找到了我认为是nvidia/cuda的官方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/语句,这显然会引起一些麻烦。 - BlueCoder
注意,在安装CUDA后,您未能重置USER。这可能会导致图像出现问题。执行USER $NB_UID应该可以重置它。此外,我认为可以通过使用conda来简化此过程,因为它已经在scipy-notebook镜像中可用。 - Konrad Rudolph
哦,你能否发布 sidazhou/scipy-notebook 的 Dockerfile 源代码呢? - Konrad Rudolph
1
@KonradRudolph 这是基于 jupyter/scipy-notebook 的,安装了一些额外的包。虽然我认为这与本次讨论无关。 - Sida Zhou
@SidaZhou 啊,如果就像 jupyter/scipy-notebook 一样那就好办了,是的。我自己还没有让它工作起来,但我已经一个多月没有接触这个项目了,也不记得是否尝试过以 scipy-notebook 为基础构建了。 - Konrad Rudolph

3

要在docker容器中使用GPU,可以使用Nvidia-docker而不是原生的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

2
使用 mviereck 的 x11dockerhttps://github.com/mviereck/x11docker#hardware-acceleration 中说:

硬件加速

使用 -g, --gpu 选项可以实现 OpenGL 的硬件加速。

在大多数情况下,这将与主机上的开源驱动程序自动配合使用。否则,请查看维基百科:特性依赖关系。 闭源 NVIDIA 驱动程序需要一些设置,并支持较少的 x11docker X 服务器选项。

这个脚本非常方便,因为它处理了所有配置和设置。在带有 GPU 的 X 上运行 docker 镜像就像这样简单:
x11docker --gpu imagename

根据需求来看,这似乎有些过度。x11docker 的主要用途似乎是图形界面,并提供启用 GPU 加速的选项。 - Babyburger

2
如果可以使用Docker,我不建议在主机上安装CUDA/cuDNN。自CUDA 8以来,已经可以“站在巨人的肩膀上”并使用由NVIDIA在其Docker Hub仓库中维护的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 |
+-------------------------------+----------------------+----------------------+

前提条件

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接