0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用NVIDIA Docker在容器运行时启用GPU

星星科技指导员 来源:NVIDIA 作者:NVIDIA 2022-04-27 14:53 次阅读

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 。

poYBAGJo6kKAK0L5AACC69sij18846.png

图 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 。

$ sudo docker run -it --runtime=nvidia --shm-size=1g -e NVIDIA_VISIBLE_DEVICES=0,1 --rm nvcr.io/nvidia/pytorch:18.05-py3 Copyright (c) 2006 Idiap Research Institute (Samy Bengio)
Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz) All rights reserved. Various files include modifications (c) NVIDIA CORPORATION. All rights reserved.
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 、集装箱驱动程序等的支持。

关于作者

Jonathan Calmels 是 NVIDIA 的系统软件工程师。他的工作主要集中在 GPU 数据中心软件和用于深度学习的超大规模解决方案。乔纳森拥有计算机科学与工程硕士学位。

Felix Abecassis 是 NVIDIA 的系统软件工程师,致力于使 GPU 应用程序更易于在数据中心部署和管理。 GPU 专注于机器学习支持框架。他拥有法国学校 EPITA 的计算机科学硕士学位。

Pramod Ramarao 是 NVIDIA 加速计算的产品经理。他领导 CUDA 平台和数据中心软件的产品管理,包括容器技术。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4989

    浏览量

    103071
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4740

    浏览量

    128951
收藏 人收藏

    评论

    相关推荐

    《CST Studio Suite 2024 GPU加速计算指南》

    的各个方面,包括硬件支持、操作系统支持、许可证、GPU计算的启用NVIDIA和AMD GPU的详细信息以及相关的使用指南和故障排除等内容。 1. 硬件支持 -
    发表于 12-16 14:25

    Docker运行环境安装

    、发布、测试和部署,可以帮助开发人员将最新版本代码应用到生产环境中。 Docker可以安装在多个平台中,包括Mac、Windows和Linux。不过,生产环境还是推荐Linux上运行,以下以主流的Linux操作系统(CentO
    的头像 发表于 10-29 11:28 218次阅读

    影响逆变器电池状态的原因,整体运行时

    逆变器的使用需要了解影响电池性能和整体运行时间的因素。让我们深入探讨最大化电源设置的关键考虑因素。逆变器效率:逆变器的效率至关重要。当逆变器将电池的DC电能转换为交流
    的头像 发表于 10-18 10:41 297次阅读
    影响逆变器电池状态的原因,整体<b class='flag-5'>运行时</b>间

    C2000™MCU的运行时堆栈大小监测

    电子发烧友网站提供《C2000™MCU的运行时堆栈大小监测.pdf》资料免费下载
    发表于 09-11 09:30 0次下载
    C2000™MCU的<b class='flag-5'>运行时</b>堆栈大小监测

    ARM平台实现Docker容器技术

    Docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码我机器上没问题”这类问题。 持续支付和部署:对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方
    发表于 07-25 14:36

    ARM平台实现Docker容器技术

    Docker的镜像提供了除内核外完整的运行时环境,确保环境一致性,从而不会在出现“这段代码我机器上没问题”这类问题。持续支付和部署:对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方
    发表于 07-17 11:05

    三菱plc累计运行时间怎么编程

    具有重要意义。本文将详细介绍如何使用三菱PLC编程实现累计运行时间的统计功能。 一、概述 累计运行时间是指设备或系统一定时间内的总运行时间。
    的头像 发表于 06-20 11:31 2312次阅读

    变频器带动电机运行时发抖的原因及处理方法

    变频器作为现代工业控制领域的重要设备,广泛应用于电机调速控制中。然而,实际应用中,有时会遇到变频器带动电机运行时产生抖动的问题。这种抖动不仅影响电机的正常运行,还可能对生产效率和设备寿命造成
    的头像 发表于 05-31 14:43 5707次阅读

    DMA运行时,其他的数据转移会不会因DMA占用导致这些东西延时处理?

    DMA运行时占用系统总线,所以不经过CPU,速度较快,但有一个问题我不清楚,DMA运行时,其他的数据转移例如引脚赋值、读引脚、数组内的数据处理等经过CPU的数据传输会不会因DMA占用导致这些东西延时处理?
    发表于 05-15 07:45

    STM8SIAR软件仿真Simulator怎么查看运行时间?

    STM8S IAR软件仿真Simulator怎么查看运行时间?某些芯片通信时,会要求延时5us,10us,150ms等,这些延时不需要太精确,只要大概就好,但怎么Simulato
    发表于 05-09 07:48

    Docker容器技术的安装和使用

    通过Docker,开发人员可以更容易地构建、交付和运行应用程序,同时确保应用程序的一致性和可移植性。它也使得应用程序的部署更加灵活和高效,因为它可以快速地启动、停止和扩展容器,而不会影响其他
    发表于 04-16 11:24 324次阅读
    <b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技术的安装和使用

    stm32cubeIDE代码运行时间如何查看?

    stm32cubeIDE 代码运行时间,如何查看?就如 keil 调试时候那样,可以测试代码的运行时间。但是stm32cubeIDE 中,一直没有找到这个功能,不知道哪位高人可以提示下在哪里查看的?
    发表于 04-16 08:10

    使用STM32CubeMX生成的keil文件,keil中运行时报错的原因?

    使用STM32CubeMX过程中,生成的keil文件。 file:///C:/Users/Zhanggp/AppData/Local/Temp/ksohtml11808/wps1.jpgkeil 中运行时出现了报错.
    发表于 03-26 07:10

    如何在运行时擦除/编程UCB?

    试着相关的 UCB 上使用 DFLASH 算法,然后我用砖砌了我的单位。 是否有专门针对如何在运行时擦除/编程 UCB?
    发表于 01-22 07:18

    变压器空载运行时功率因数很低是什么原因?

    变压器空载运行时功率因数很低是什么原因? 变压器空载运行时功率因数很低的原因有多种可能,以下将逐一介绍这些可能性。 1. 磁化电流造成的功率因数低:当变压器空载运行时,变压器的铁芯需要维持磁通的运动
    的头像 发表于 01-19 13:58 4432次阅读