添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

NVIDIA 使用容器来开发、测试、基准测试和部署深度学习( DL )框架和 HPC 应用程序。大约两年前,我们用 NVIDIA -Docker 大规模地写了 构建和部署 GPU 容器 。从那时起, NVIDIA -Docker 被下载了近 200 万次。许多客户使用 NVIDIA -Docker 将 NVIDIA 集装箱化并运行 GPU 加速的工作负载。

NVIDIA 通过 NVIDIA GPU 云( NGC )提供 GPU 加速容器,用于 DGX 系统、公共云基础设施,甚至是带有 GPUs 的本地工作站。 NVIDIA -Docker 是这些计划的关键基础技术。

除了 Docker 之外,容器技术被用于 DL 和 HPC 工作负载的不断发展的用例集,这使得我们从根本上重新思考我们现有的 NVIDIA -Docker 架构。我们的主要目标不仅追求不同容器运行时的可扩展性,而且还追求容器编排系统的可扩展性。

这里介绍的 NVIDIA 容器运行时是我们的下一代 GPU 感知容器运行时。它与 Docker 使用的 Open Containers Initiative ( OCI )规范和其他流行的容器技术兼容。

您将了解到 NVIDIA 容器运行时组件,以及如何扩展它以支持多个容器技术。让我们检查一下新运行时的体系结构和优点,展示一些新特性,并介绍一些使用 Docker 和 LXC 部署 GPU 加速应用程序的示例。

NVIDIA 集装箱运行时间

NVIDIA 在 2016 年设计了 NVIDIA -Docker ,以实现 Docker 映像中的可移植性,利用 NVIDIA GPUs 。它允许与驱动程序无关的 CUDA 映像,并提供一个 Docker 命令行包装器,在启动时将驱动程序的用户模式组件和 GPU 设备文件装入容器中。

在 NVIDIA -Docker 的生命周期中,我们意识到架构缺乏灵活性,原因如下:

  • 与 Docker 的紧密集成不允许将来支持其他容器技术,如 LXC 、 CRI-O 和其他运行时
  • 我们希望利用 Docker 生态系统中的其他工具–例如 撰写 (用于管理由多个容器组成的应用程序)
  • 在 Kubernetes 和 Swarm 等编排器中支持 GPUs 作为一级资源
  • 改进对 GPUs 的容器运行时支持,特别是自动检测用户级 NVIDIA 驱动程序库, NVIDIA 内核模块、设备排序、兼容性检查和 GPU 功能,如图形、视频加速
  • 因此,重新设计的 NVIDIA -Docker 将对 GPUs 的核心运行时支持转移到一个名为 libnvidia-container 的库中。该库依赖于 Linux 内核原语,并且相对于更高的容器运行时层是不可知的。这使得 GPU 支持很容易扩展到不同的容器运行时,如 Docker 、 LXC 和 CRI-O 。该库包括一个命令行实用程序,还提供了一个 API ,以便将来集成到其他运行时中。我们构建的用于集成到各种运行时的库、工具和层统称为 NVIDIA 容器运行时。

    在接下来的几节中,您将了解到 Docker 和 LXC 的集成。

    Docker 支持

    在深入研究 NVIDIA 容器运行时与 Docker 的集成之前,让我们简单看看 Docker 平台是如何演变的。

    自 2015 年以来, Docker 一直在捐赠其容器平台的关键组件,首先是开放容器倡议( OCI )规范和一个名为 runc 的轻量级容器运行时规范的实现。 2016 年末, Docker 还捐赠了一个管理容器生命周期和包装 OCI / runc 的守护程序 containerd containerd 守护进程处理图像的传输、容器的执行(使用 runc )、存储和网络管理。它被设计成嵌入到更大的系统中,比如 Docker 。关于这个项目的更多信息可以在官方网站 网站 上找到。

    图 1 显示了 libnvidia-container 如何集成到 Docker 中,特别是在 GPU 层。为了在 Docker 中启用 nvidia-container-runtime-hook 容器,我们使用了一个名为 nvidia-container-runtime-hook runc 的定制 OCI 预启动钩子(有关钩子的更多信息可以在 OCI 运行规范 中找到)。在 runc 中添加预启动钩子需要我们用 Docker 注册一个新的与 OCI 兼容的运行时(使用– runtime 选项 )。在创建容器时,预启动钩子检查容器是否启用了 GPU (使用环境变量),并使用容器运行库向容器公开 NVIDIA GPUs 。

    图 1 。 NVIDIA 容器运行时与 Docker 的集成

    runc 层的集成还允许灵活地支持其他 OCI 运行时,如 CRI-O 。 containerd 的 1 . 1 版增加了对 Kubernetes 中容器运行时接口( CRI )的支持;上周 Kubernetes 宣布 通过 CRI 插件实现了 containerd 集成的普遍可用性。 NVIDIA 运行时的新架构可以很容易地支持 Kubernetes 运行时的任何一种选择。这种灵活性非常重要,因为我们与社区密切合作,使 Kubernetes 的 GPU 支持 成为一流的。

    NVIDIA 容器运行时使用容器映像中的环境变量指定 GPU 加速容器。

  • NVIDIA _可视设备:可在容器内访问 GPUs 的控件。默认情况下,容器可以访问所有 GPUs 。
  • NVIDIA _驱动程序功能:控制哪些驱动程序特性(例如计算、图形)暴露到容器中。
  • NVIDIA U 需要 u *:逻辑表达式,用于定义容器支持的配置上的约束(例如最小 CUDA 、驱动程序或计算能力)。
  • 如果没有检测到环境变量(在 Docker 命令行或图像中),则使用默认的 runc 。您可以在 NVIDIA 容器运行时 文档 中找到有关这些环境变量的更多信息。这些环境变量已经在 NVIDIA 的 官方的 CUDA 容器中设置。

    您的系统必须满足以下先决条件,才能在 Docker 中开始使用 NVIDIA 容器运行时。

  • 支持 您的发行版的 Docker 版本。跟随 Docker 的官方 说明书
  • 最新的 NVIDIA 驱动程序。使用 程序包管理器 安装 cuda-drivers 包,或者使用驱动程序下载 网站 中的安装程序。请注意,使用 cuda-drivers 包可能无法在 Ubuntu 18 . 04 LTS 系统上运行。
  • 要开始使用带有 Docker 的 NVIDIA 容器运行时,可以使用 NVIDIA -docker2 安装程序包,也可以手动使用 设置 运行时和 Docker 引擎。 nvidia-docker2 软件包包括一个自定义的 daemon.json 文件,用于将 NVIDIA 运行时注册为 Docker 的默认运行时,以及一个向后兼容 NVIDIA -Docker 1 . 0 的脚本。

    如果安装了 NVIDIA -docker 1 . 0 ,则需要在安装 NVIDIA 运行时之前删除它和任何现有的 GPU 容器。请注意,以下安装步骤适用于 Debian 发行版及其衍生产品。

    $ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f $ sudo apt-get purge -y nvidia-docker

    现在,让我们添加包存储库并刷新包索引。

    $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
    sudo apt-key add - $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) $ 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

    然后使用 nvidia-docker2 包安装各个组件并重新加载 Docker 守护程序配置。

    $ sudo apt-get install -y nvidia-docker2 $ sudo pkill -SIGHUP dockerd

    运行以下命令行实用程序( CLI )以验证 NVIDIA 驱动程序和运行时是否已正确安装在您的系统上(作为安装程序包的一部分提供)。运行时 CLI 提供有关系统中检测到的驱动程序和设备的信息。在本例中,运行库已正确检测并枚举了系统中的 4 个 NVIDIA Tesla v100 。

    $ sudo nvidia-container-cli --load-kmods info
    NVRM version: 396.26
    CUDA version: 9.2 Device Index: 0
    Device Minor: 2
    Model: Tesla V100-SXM2-16GB
    GPU UUID: GPU-e354d47d-0b3e-4128-74bf-f1583d34af0e
    Bus Location: 00000000:00:1b.0
    Architecture: 7.0 Device Index: 1
    Device Minor: 0
    Model: Tesla V100-SXM2-16GB
    GPU UUID: GPU-716346f4-da29-392a-c4ee-b9840ec2f2e9
    Bus Location: 00000000:00:1c.0
    Architecture: 7.0 Device Index: 2
    Device Minor: 3
    Model: Tesla V100-SXM2-16GB
    GPU UUID: GPU-9676587f-b418-ee6b-15ac-38470e1278fb
    Bus Location: 00000000:00:1d.0
    Architecture: 7.0 Device Index: 3
    Device Minor: 2
    Model: Tesla V100-SXM2-16GB
    GPU UUID: GPU-2370332b-9181-d6f5-1f24-59d66fc7a87e
    Bus Location: 00000000:00:1e.0
    Architecture: 7.0

    nvidia-container-cli 检测到的 CUDA 版本验证主机上安装的 NVIDIA 驱动程序是否足以运行基于特定 CUDA 版本的容器。如果存在不兼容,运行时将不启动容器。有关 CUDA 兼容性和最低驱动程序要求的更多信息,请参见 在这里

    现在,让我们尝试用 Docker 运行一个 GPU 容器。这个例子提取 Docker Hub 存储库 上可用的 NVIDIA CUDA 容器,并在容器内运行 nvidia-smi 命令。

    $ sudo docker run --rm --runtime=nvidia -ti nvidia/cuda
    root@d6c41b66c3b4:/# nvidia-smi
    Sun May 20 22:06:13 2018
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 396.26 Driver Version: 396.26 |
    |-------------------------------+----------------------+----------------------+
    | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
    | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
    |===============================+======================+======================|
    | 0 Tesla V100-SXM2... On | 00000000:00:1B.0 Off | Off |
    | N/A 41C P0 34W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+
    | 1 Tesla V100-SXM2... On | 00000000:00:1C.0 Off | Off |
    | N/A 39C P0 35W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+
    | 2 Tesla V100-SXM2... On | 00000000:00:1D.0 Off | Off |
    | N/A 39C P0 38W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+
    | 3 Tesla V100-SXM2... On | 00000000:00:1E.0 Off | 0 |
    | N/A 42C P0 38W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+
    | Processes: GPU Memory |
    | GPU PID Type Process name Usage |
    |=============================================================================|
    | No running processes found |
    +-----------------------------------------------------------------------------+
    

    运行 GPU 集装箱

    现在让我们看一些运行更复杂的 GPU 应用程序的例子。 NVIDIA 为 深度学习 NGC 注册 上的 HPC 提供了多种预制容器。

    深度学习框架容器

    这个例子使用 NGC 提供的 PyTorch 深度学习框架容器来训练一个 deep 神经网络 。您需要打开一个免费的 NGC 帐户才能访问最新的深度学习框架和 HPC 容器。 NGC 文件 概述了开始所需的步骤。

    本例使用了 NVIDIA_VISIBLE_DEVICES 变量,仅向容器公开两个 GPUs 。

    NVIDIA modifications are covered by the license terms that apply to the underlying project or file.

    在容器中运行 nvidia-smi 命令,验证只有两个 GPUs 可见。

    root@45cebefa1480:/workspace# nvidia-smi
    Mon May 28 07:15:39 2018 +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 396.26 Driver Version: 396.26 |
    |-------------------------------+----------------------+----------------------+
    | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
    | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
    |===============================+======================+======================|
    | 0 Tesla V100-SXM2... On | 00000000:00:1B.0 Off | 0 |
    | N/A 39C P0 36W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+
    | 1 Tesla V100-SXM2... On | 00000000:00:1C.0 Off | 0 |
    | N/A 38C P0 35W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+
    | Processes: GPU Memory |
    | GPU PID Type Process name Usage |
    |=============================================================================|
    | No running processes found |
    +-----------------------------------------------------------------------------+ root@45cebefa1480:/workspace#

    尝试运行容器附带的 MNIST 培训示例:

    root@45cebefa1480:/workspace/examples/mnist# python main.py
    Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz
    Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz
    Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz
    Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz
    Processing...
    Done!
    main.py:68: UserWarning: Implicit dimension choice for log_softmax has been deprecated. Change the call to include dim=X as an argument.
    return F.log_softmax(x)
    main.py:90: UserWarning: invalid index of a 0-dim tensor. This will be an error in PyTorch 0.5. Use tensor.item() to convert a 0-dim tensor to a Python number
    100. * batch_idx / len(train_loader), loss.data[0]))
    Train Epoch: 1 [0/60000 (0%)] Loss: 2.373651
    Train Epoch: 1 [640/60000 (1%)] Loss: 2.310517
    Train Epoch: 1 [1280/60000 (2%)] Loss: 2.281828
    Train Epoch: 1 [1920/60000 (3%)] Loss: 2.315808
    Train Epoch: 1 [2560/60000 (4%)] Loss: 2.235439
    Train Epoch: 1 [3200/60000 (5%)] Loss: 2.234249
    Train Epoch: 1 [3840/60000 (6%)] Loss: 2.226109
    Train Epoch: 1 [4480/60000 (7%)] Loss: 2.228646
    Train Epoch: 1 [5120/60000 (9%)] Loss: 2.132811

    OpenGL 图形容器

    如前几节所述, NVIDIA 容器运行时现在为运行 OpenGL 和 EGL 应用程序提供了支持。下一个例子使用 OpenGL 构建并运行 多体问题 模拟。使用 NVIDIA 吉特实验室 上提供的示例 Dockerfile 来构建容器。

    复制 Dockerfile 并构建 多体问题 示例

    $ docker build -t nbody .

    允许 root 用户访问正在运行的 X 服务器

    $ xhost +si:localuser:root

    运行[VZX129 连续样本

    $ sudo docker run --runtime=nvidia -ti --rm -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix nbody
    图 2 。用 Docker 运行 N-bodyCUDA / OpenGL 示例

    编写 Docker

    最后一个例子使用 Docker Compose 展示了使用 NVIDIA 容器运行时启动多个 GPU 容器是多么容易。这个例子将启动 3 个容器—— OpenGL 的 多体问题 示例、一个 EGL 示例( 来自 Mesa )和一个运行 NVIDIA -smi 公司 命令的简单容器。

    安装 Docker Compose

    $ sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    $ sudo chmod +x /usr/local/bin/docker-compose

    从 NVIDIA Gitlab 克隆可用的样本

    $ git clone https://gitlab.com/nvidia/samples.git

    写一个 docker-compose.yml 来指定三个容器和环境。使用您选择的文本编辑器复制以下内容:

    version: '2.3' services: nbody: build: samples/cudagl/ubuntu16.04/nbody runtime: nvidia environment: - DISPLAY volumes: - /tmp/.X11-unix:/tmp/.X11-unix peglgears: build: samples/opengl/ubuntu16.04/peglgears runtime: nvidia nvsmi: image: ubuntu:18.04 runtime: nvidia environment: - NVIDIA_VISIBLE_DEVICES=all command: nvidia-smi

    允许 root 用户访问正在运行的 X 服务器(对于 多体问题 示例)

    $ xhost +si:localuser:root

    最后,启动容器

    $ sudo docker-compose up

    您的控制台输出可能如下所示

    Building nbody
    Step 1/6 : FROM nvidia/cudagl:9.0-base-ubuntu16.04
    ---> b6055709073e
    Step 2/6 : ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},display
    ---> Using cache
    ---> ebd1c003a592
    Step 3/6 : RUN apt-get update && apt-get install -y --no-install-recommends cuda-samples-$CUDA_PKG_VERSION && rm -rf /var/lib/apt/lists/*
    ---> Using cache
    ---> 1987dc2c1bbc
    Step 4/6 : WORKDIR /usr/local/cuda/samples/5_Simulations/nbody
    ---> Using cache
    ---> de7af4fbb03e
    Step 5/6 : RUN make
    ---> Using cache
    ---> a6bcfb9a4958
    Step 6/6 : CMD ./nbody
    ---> Using cache
    ---> 9c11a1e93ef2
    Successfully built 9c11a1e93ef2
    Successfully tagged ubuntu_nbody:latest
    WARNING: Image for service nbody was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
    Starting ubuntu_nbody_1 ... done
    Starting ubuntu_nvsmi_1 ... done
    Starting ubuntu_peglgears_1 ... done
    Attaching to ubuntu_nvsmi_1, ubuntu_peglgears_1, ubuntu_nbody_1
    ubuntu_nvsmi_1 exited with code 0
    peglgears_1 | peglgears: EGL version = 1.4
    peglgears_1 | peglgears: EGL_VENDOR = NVIDIA
    peglgears_1 | 246404 frames in 5.0 seconds = 49280.703 FPS
    ubuntu_peglgears_1 exited with code 0

    支持带 LXC 的 GPU 容器

    Linux 容器(或 LXC 公司 )是一个操作系统级的虚拟化工具,用于创建和管理系统或应用程序容器。 Docker 的早期版本使用 LXC 作为底层容器运行时技术。 LXC 提供了一套高级的工具来管理容器(例如模板、存储选项、直通设备、 autostart 等),并为用户提供了大量的控制。在参考文献中,我们在本文末尾的参考文献中提供了来自 Canonical 和 Cisco 的工程师关于 LXC 的 GTC 2018 演讲的链接。

    LXC 支持非特权容器(使用 Linux 内核中的用户名称空间特性)。在 HPC 环境中部署容器的上下文中,这是一个巨大的优势,在这种环境中,用户可能没有运行容器的管理权限。 LXC 还支持 Docker 图像的导入,下面我们将详细介绍一个示例。

    NVIDIA 继续与 LXC 社区密切合作,开发上游补丁,以添加 GPU 支持。 4 月初发布的 lxc3 . 0 . 0 包括使用 NVIDIA 运行时对 GPUs 的支持。有关更多信息和演示,请参阅 Canonical 的新闻 邮递

    如图所示, VX134 是如何将容器集成到 VX12 中的。

    图 3 。 NVIDIA 容器运行时与 LXC 的集成

    让我们看看用 LXC 运行一个简单的 CUDA 容器。这个例子展示了如何使用默认的 LXC OCI 模板 从 Docker Hub 上可用的 OCI 映像(使用诸如 Skopo 擦除 )创建应用程序容器。

    首先,让我们为工具设置存储库:

    $ sudo add-apt-repository ppa:ubuntu-lxc/lxc-stable
    $ sudo apt-add-repository ppa:projectatomic/ppa

    安装 LXC 和相关工具,如 skopeo :

    $ apt-get install libpam-cgfs lxc-utils lxcfs lxc-templates skopeo skopeo-containers jq libnvidia-container-tools

    肥皂套装:

    $ sudo curl -fsSL -o /usr/local/bin/umoci https://github.com/openSUSE/umoci/releases/download/v0.4.0/umoci.amd64
    $ sudo chmod ugo+rx /usr/local/bin/umoci

    为每个用户设置用户、组 ID 和虚拟以太网接口。请参阅 LXC 文档 中有关创建非特权容器的内容。为了方便起见,这里提供了示例脚本。

    $ sudo curl -fsSL -o /usr/local/bin/generate-lxc-perms https://gist.githubusercontent.com/3XX0/ef77403389ffa1ca85d4625878706c7d/raw/4f0d2c02d82236f74cf668c42ee72ab06158d1d2/generate-lxc-perms.sh
    $ sudo chmod ugo+rx /usr/local/bin/generate-lxc-perms $ sudo curl -fsSL -o /usr/local/bin/generate-lxc-config https://gist.githubusercontent.com/3XX0/b3e2bd829d43104cd120f4258c4eeca9/raw/890dc720e1c3ad418f96ba8529eae028f01cc994/generate-lxc-config.sh
    $ sudo chmod ugo+rx /usr/local/bin/generate-lxc-config

    现在,为每个容器设置 GPU 支持:

    $ sudo tee /usr/share/lxc/config/common.conf.d/nvidia.conf <<< 'lxc.hook.mount = /usr/share/lxc/hooks/nvidia'
    $ sudo chmod ugo+r /usr/share/lxc/config/common.conf.d/nvidia.conf

    作为一次性设置,请将权限和配置设置为常规用户:

    $ sudo generate-lxc-perms
    $ generate-lxc-config

    使用 lxc-create 从 NVIDIA 的 Docker Hub 存储库上的 CUDA 映像下载并创建一个 CUDA 应用程序容器。

    $ lxc-create -t oci cuda -- -u docker://nvidia/cuda
    Getting image source signatures
    Copying blob sha256:297061f60c367c17cfd016c97a8cb24f5308db2c913def0f85d7a6848c0a17fa
    41.03 MB / 41.03 MB [======================================================] 0s
    Copying blob sha256:e9ccef17b516e916aa8abe7817876211000c27150b908bdffcdeeba938cd004c
    850 B / 850 B [============================================================] 0s
    Copying blob sha256:dbc33716854d9e2ef2de9769422f498f5320ffa41cb79336e7a88fbb6c3ef844
    621 B / 621 B [============================================================] 0s
    Copying blob sha256:8fe36b178d25214195af42254bc7d5d64a269f654ef8801bbeb0b6a70a618353
    851 B / 851 B [============================================================] 0s
    Copying blob sha256:686596545a94a0f0bf822e442cfd28fbd8a769f28e5f4018d7c24576dc6c3aac
    169 B / 169 B [============================================================] 0s
    Copying blob sha256:aa76f513fc89f79bec0efef655267642eba8deac019f4f3b48d2cc34c917d853
    6.65 MB / 6.65 MB [========================================================] 0s
    Copying blob sha256:c92f47f1bcde5f85cde0d7e0d9e0caba6b1c9fcc4300ff3e5f151ff267865fb9
    397.29 KB / 397.29 KB [====================================================] 0s
    Copying blob sha256:172daef71cc32a96c15d978fb01c34e43f33f05d8015816817cc7d4466546935
    182 B / 182 B [============================================================] 0s
    Copying blob sha256:e282ce84267da687f11d354cdcc39e2caf014617e30f9fb13f7711c7a93fb414
    449.41 MB / 449.41 MB [====================================================] 8s
    Copying blob sha256:91cebab434dc455c4a9faad8894711a79329ed61cc3c08322285ef20599b4c5e
    379.37 MB / 552.87 MB [=====================================>-----------------]
    Writing manifest to image destination
    Storing signatures
    Unpacking the rootfs • rootless{dev/agpgart} creating empty file in place of device 10:175 • rootless{dev/audio} creating empty file in place of device 14:4 • rootless{dev/audio1} creating empty file in place of device 14:20

    作为普通用户,我们可以在容器内运行 nvidia-smi

    $ lxc-execute cuda root@cuda:/# nvidia-smi
    Mon May 28 21:48:57 2018
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 396.26 Driver Version: 396.26 |
    |-------------------------------+----------------------+----------------------+
    | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
    | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
    |===============================+======================+======================|
    | 0 Tesla V100-SXM2... On | 00000000:00:1B.0 Off | 0 |
    | N/A 40C P0 36W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+
    | 1 Tesla V100-SXM2... On | 00000000:00:1C.0 Off | 0 |
    | N/A 39C P0 35W / 300W | 0MiB / 16160MiB | 0% Default |
    +-------------------------------+----------------------+----------------------+
    | 2 Tesla V100-SXM2... On | 00000000:00:1D.0 Off | 0 |
    | N/A 39C P0 38W / 300W | 0MiB / 16160MiB | 1% Default |
    +-------------------------------+----------------------+----------------------+
    | 3 Tesla V100-SXM2... On | 00000000:00:1E.0 Off | 0 |
    | N/A 40C P0 38W / 300W | 0MiB / 16160MiB | 1% Default |
    +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+
    | Processes: GPU Memory |
    | GPU PID Type Process name Usage |
    |=============================================================================|
    | No running processes found |
    +-----------------------------------------------------------------------------+
    

    本文介绍了 NVIDIA 容器运行时,以及如何将其轻松集成到容器运行时和编排生态系统中,以启用 GPU 支持。现在就开始用它来构建和运行 GPU 容器吧!安装程序包可用于 品种 的 Linux 发行版。 NVIDIA -Docker 1 . 0 已被弃用,不再被积极支持。我们强烈建议用户在使用 Docker 时升级到新的 NVIDIA 运行时。未来的路线图包括许多令人兴奋的特性,包括对 Vulkan 、 CUDA MPS 、集装箱驱动程序等的支持。

    如果您正在公共云服务提供商(如 Amazon AWS 或 Google cloud )上运行容器, NVIDIA 提供的 虚拟机映像 包括您需要的所有组件,包括开始使用的 NVIDIA 容器运行时。

    如果您有任何问题或意见,请在下面的评论部分留下。对于有关安装和使用的技术问题,我们建议开始讨论 NVIDIA 加速计算论坛

    [1] 观看一个由 3 部分组成的系列文章,介绍如何安装 NVIDIA 容器运行时并将其与 NGC 容器一起使用( https://www.youtube.com/watch?v=r3LrCnou1K4

    [2] 为 GPU 工作负载使用容器( GTC 2018 年 LXC 演讲) http://on-demand-gtc.gputechconf.com/gtc-quicklink/a6WCcp

    [3] 文档中提供了常见问题解答 https://github.com/NVIDIA/nvidia-docker/wiki/Frequently-Asked-Questions