一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用NVIDIA Docker在容器運(yùn)行時(shí)啟用GPU

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-27 14:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

NVIDIA 使用容器來開發(fā)、測試、基準(zhǔn)測試和部署深度學(xué)習(xí)( DL )框架和 HPC 應(yīng)用程序。大約兩年前,我們用 NVIDIA -Docker 大規(guī)模地寫了 構(gòu)建和部署 GPU 容器 。從那時(shí)起, NVIDIA -Docker 被下載了近 200 萬次。許多客戶使用 NVIDIA -Docker 將 NVIDIA 集裝箱化并運(yùn)行 GPU 加速的工作負(fù)載。

NVIDIA 通過 NVIDIA GPU 云( NGC )提供 GPU 加速容器,用于 DGX 系統(tǒng)、公共云基礎(chǔ)設(shè)施,甚至是帶有 GPUs 的本地工作站。 NVIDIA -Docker 是這些計(jì)劃的關(guān)鍵基礎(chǔ)技術(shù)。

除了 Docker 之外,容器技術(shù)被用于 DL 和 HPC 工作負(fù)載的不斷發(fā)展的用例集,這使得我們從根本上重新思考我們現(xiàn)有的 NVIDIA -Docker 架構(gòu)。我們的主要目標(biāo)不僅追求不同容器運(yùn)行時(shí)的可擴(kuò)展性,而且還追求容器編排系統(tǒng)的可擴(kuò)展性。

這里介紹的 NVIDIA 容器運(yùn)行時(shí)是我們的下一代 GPU 感知容器運(yùn)行時(shí)。它與 Docker 使用的 Open Containers Initiative ( OCI )規(guī)范和其他流行的容器技術(shù)兼容。

您將了解到 NVIDIA 容器運(yùn)行時(shí)組件,以及如何擴(kuò)展它以支持多個(gè)容器技術(shù)。讓我們檢查一下新運(yùn)行時(shí)的體系結(jié)構(gòu)和優(yōu)點(diǎn),展示一些新特性,并介紹一些使用 Docker 和 LXC 部署 GPU 加速應(yīng)用程序的示例。

NVIDIA 集裝箱運(yùn)行時(shí)間

NVIDIA 在 2016 年設(shè)計(jì)了 NVIDIA -Docker ,以實(shí)現(xiàn) Docker 映像中的可移植性,利用 NVIDIA GPUs 。它允許與驅(qū)動(dòng)程序無關(guān)的 CUDA 映像,并提供一個(gè) Docker 命令行包裝器,在啟動(dòng)時(shí)將驅(qū)動(dòng)程序的用戶模式組件和 GPU 設(shè)備文件裝入容器中。

在 NVIDIA -Docker 的生命周期中,我們意識到架構(gòu)缺乏靈活性,原因如下:

與 Docker 的緊密集成不允許將來支持其他容器技術(shù),如 LXC 、 CRI-O 和其他運(yùn)行時(shí)

我們希望利用 Docker 生態(tài)系統(tǒng)中的其他工具–例如 撰寫 (用于管理由多個(gè)容器組成的應(yīng)用程序)

在 Kubernetes 和 Swarm 等編排器中支持 GPUs 作為一級資源

改進(jìn)對 GPUs 的容器運(yùn)行時(shí)支持,特別是自動(dòng)檢測用戶級 NVIDIA 驅(qū)動(dòng)程序庫, NVIDIA 內(nèi)核模塊、設(shè)備排序、兼容性檢查和 GPU 功能,如圖形、視頻加速

因此,重新設(shè)計(jì)的 NVIDIA -Docker 將對 GPUs 的核心運(yùn)行時(shí)支持轉(zhuǎn)移到一個(gè)名為 libnvidia-container 的庫中。該庫依賴于 Linux 內(nèi)核原語,并且相對于更高的容器運(yùn)行時(shí)層是不可知的。這使得 GPU 支持很容易擴(kuò)展到不同的容器運(yùn)行時(shí),如 Docker 、 LXC 和 CRI-O 。該庫包括一個(gè)命令行實(shí)用程序,還提供了一個(gè) API ,以便將來集成到其他運(yùn)行時(shí)中。我們構(gòu)建的用于集成到各種運(yùn)行時(shí)的庫、工具和層統(tǒng)稱為 NVIDIA 容器運(yùn)行時(shí)。

在接下來的幾節(jié)中,您將了解到 Docker 和 LXC 的集成。

Docker 支持

在深入研究 NVIDIA 容器運(yùn)行時(shí)與 Docker 的集成之前,讓我們簡單看看 Docker 平臺是如何演變的。

自 2015 年以來, Docker 一直在捐贈(zèng)其容器平臺的關(guān)鍵組件,首先是開放容器倡議( OCI )規(guī)范和一個(gè)名為 runc 的輕量級容器運(yùn)行時(shí)規(guī)范的實(shí)現(xiàn)。 2016 年末, Docker 還捐贈(zèng)了一個(gè)管理容器生命周期和包裝 OCI / runc 的守護(hù)程序 containerd 。 containerd 守護(hù)進(jìn)程處理圖像的傳輸、容器的執(zhí)行(使用 runc )、存儲和網(wǎng)絡(luò)管理。它被設(shè)計(jì)成嵌入到更大的系統(tǒng)中,比如 Docker 。關(guān)于這個(gè)項(xiàng)目的更多信息可以在官方網(wǎng)站 網(wǎng)站 上找到。

圖 1 顯示了 libnvidia-container 如何集成到 Docker 中,特別是在 GPU 層。為了在 Docker 中啟用 nvidia-container-runtime-hook 容器,我們使用了一個(gè)名為 nvidia-container-runtime-hook 到 runc 的定制 OCI 預(yù)啟動(dòng)鉤子(有關(guān)鉤子的更多信息可以在 OCI 運(yùn)行規(guī)范 中找到)。在 runc 中添加預(yù)啟動(dòng)鉤子需要我們用 Docker 注冊一個(gè)新的與 OCI 兼容的運(yùn)行時(shí)(使用– runtime 選項(xiàng) )。在創(chuàng)建容器時(shí),預(yù)啟動(dòng)鉤子檢查容器是否啟用了 GPU (使用環(huán)境變量),并使用容器運(yùn)行庫向容器公開 NVIDIA GPUs 。

poYBAGJo6kKAK0L5AACC69sij18846.png

圖 1 NVIDIA 容器運(yùn)行時(shí)與 Docker 的集成

runc 層的集成還允許靈活地支持其他 OCI 運(yùn)行時(shí),如 CRI-O 。 containerd 的 1 。 1 版增加了對 Kubernetes 中容器運(yùn)行時(shí)接口( CRI )的支持;上周 Kubernetes 宣布 通過 CRI 插件實(shí)現(xiàn)了 containerd 集成的普遍可用性。 NVIDIA 運(yùn)行時(shí)的新架構(gòu)可以很容易地支持 Kubernetes 運(yùn)行時(shí)的任何一種選擇。這種靈活性非常重要,因?yàn)槲覀兣c社區(qū)密切合作,使 Kubernetes 的 GPU 支持 成為一流的。

環(huán)境變量

NVIDIA 容器運(yùn)行時(shí)使用容器映像中的環(huán)境變量指定 GPU 加速容器。

NVIDIA _可視設(shè)備:可在容器內(nèi)訪問 GPUs 的控件。默認(rèn)情況下,容器可以訪問所有 GPUs 。

NVIDIA _驅(qū)動(dòng)程序功能:控制哪些驅(qū)動(dòng)程序特性(例如計(jì)算、圖形)暴露到容器中。

NVIDIA U 需要 u *:邏輯表達(dá)式,用于定義容器支持的配置上的約束(例如最小 CUDA 、驅(qū)動(dòng)程序或計(jì)算能力)。

如果沒有檢測到環(huán)境變量(在 Docker 命令行或圖像中),則使用默認(rèn)的 runc 。您可以在 NVIDIA 容器運(yùn)行時(shí) 文檔 中找到有關(guān)這些環(huán)境變量的更多信息。這些環(huán)境變量已經(jīng)在 NVIDIA 的 官方的 CUDA 容器中設(shè)置。

安裝

您的系統(tǒng)必須滿足以下先決條件,才能在 Docker 中開始使用 NVIDIA 容器運(yùn)行時(shí)。

支持 您的發(fā)行版的 Docker 版本。跟隨 Docker 的官方 說明書 。

最新的 NVIDIA 驅(qū)動(dòng)程序。使用 程序包管理器 安裝 cuda-drivers 包,或者使用驅(qū)動(dòng)程序下載 網(wǎng)站 中的安裝程序。請注意,使用 cuda-drivers 包可能無法在 Ubuntu 18.04 LTS 系統(tǒng)上運(yùn)行。

要開始使用帶有 Docker 的 NVIDIA 容器運(yùn)行時(shí),可以使用 NVIDIA -docker2 安裝程序包,也可以手動(dòng)使用 設(shè)置 運(yùn)行時(shí)和 Docker 引擎。 nvidia-docker2 軟件包包括一個(gè)自定義的 daemon.json 文件,用于將 NVIDIA 運(yùn)行時(shí)注冊為 Docker 的默認(rèn)運(yùn)行時(shí),以及一個(gè)向后兼容 NVIDIA -Docker 1. 0 的腳本。

如果安裝了 NVIDIA -docker 1.0 ,則需要在安裝 NVIDIA 運(yùn)行時(shí)之前刪除它和任何現(xiàn)有的 GPU 容器。請注意,以下安裝步驟適用于 Debian 發(fā)行版及其衍生產(chǎn)品。

$ 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

現(xiàn)在,讓我們添加包存儲庫并刷新包索引。

$ 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包安裝各個(gè)組件并重新加載 Docker 守護(hù)程序配置。

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

運(yùn)行以下命令行實(shí)用程序( CLI )以驗(yàn)證 NVIDIA 驅(qū)動(dòng)程序和運(yùn)行時(shí)是否已正確安裝在您的系統(tǒng)上(作為安裝程序包的一部分提供)。運(yùn)行時(shí) CLI 提供有關(guān)系統(tǒng)中檢測到的驅(qū)動(dòng)程序和設(shè)備的信息。在本例中,運(yùn)行庫已正確檢測并枚舉了系統(tǒng)中的 4 個(gè) 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 版本驗(yàn)證主機(jī)上安裝的 NVIDIA 驅(qū)動(dòng)程序是否足以運(yùn)行基于特定 CUDA 版本的容器。如果存在不兼容,運(yùn)行時(shí)將不啟動(dòng)容器。有關(guān) CUDA 兼容性和最低驅(qū)動(dòng)程序要求的更多信息,請參見 在這里 。

現(xiàn)在,讓我們嘗試用 Docker 運(yùn)行一個(gè) GPU 容器。這個(gè)例子提取 Docker Hub 存儲庫 上可用的 NVIDIA CUDA 容器,并在容器內(nèi)運(yùn)行 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 |
+-----------------------------------------------------------------------------+

運(yùn)行 GPU 集裝箱

現(xiàn)在讓我們看一些運(yùn)行更復(fù)雜的 GPU 應(yīng)用程序的例子。 NVIDIA 為 深度學(xué)習(xí) 和 NGC 注冊 上的 HPC 提供了多種預(yù)制容器。

深度學(xué)習(xí)框架容器

這個(gè)例子使用 NGC 提供的 PyTorch 深度學(xué)習(xí)框架容器來訓(xùn)練一個(gè) deep 神經(jīng)網(wǎng)絡(luò) 。您需要打開一個(gè)免費(fèi)的 NGC 帳戶才能訪問最新的深度學(xué)習(xí)框架和 HPC 容器。 NGC 文件 概述了開始所需的步驟。

本例使用了 NVIDIA_VISIBLE_DEVICES 變量,僅向容器公開兩個(gè) 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.

在容器中運(yùn)行nvidia-smi命令,驗(yàn)證只有兩個(gè) 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#

嘗試運(yùn)行容器附帶的 MNIST 培訓(xùn)示例:

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 圖形容器

如前幾節(jié)所述, NVIDIA 容器運(yùn)行時(shí)現(xiàn)在為運(yùn)行 OpenGL 和 EGL 應(yīng)用程序提供了支持。下一個(gè)例子使用 OpenGL 構(gòu)建并運(yùn)行 多體問題 模擬。使用 NVIDIA 吉特實(shí)驗(yàn)室 上提供的示例 Dockerfile 來構(gòu)建容器。

復(fù)制 Dockerfile 并構(gòu)建 多體問題 示例

$ docker build -t nbody .

允許 root 用戶訪問正在運(yùn)行的 X 服務(wù)器

$ xhost +si:localuser:root

運(yùn)行[VZX129 連續(xù)樣本

$ sudo docker run --runtime=nvidia -ti --rm -e DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix nbody

圖 2 用 Docker 運(yùn)行 N-bodyCUDA / OpenGL 示例

編寫 Docker

最后一個(gè)例子使用 Docker Compose 展示了使用 NVIDIA 容器運(yùn)行時(shí)啟動(dòng)多個(gè) GPU 容器是多么容易。這個(gè)例子將啟動(dòng) 3 個(gè)容器—— OpenGL 的 多體問題 示例、一個(gè) EGL 示例( 釘 來自 Mesa )和一個(gè)運(yùn)行 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

寫一個(gè)docker-compose.yml來指定三個(gè)容器和環(huán)境。使用您選擇的文本編輯器復(fù)制以下內(nèi)容:

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 用戶訪問正在運(yùn)行的 X 服務(wù)器(對于多體問題示例)

$ xhost +si:localuser:root

最后,啟動(dòng)容器

$ 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 公司 )是一個(gè)操作系統(tǒng)級的虛擬化工具,用于創(chuàng)建和管理系統(tǒng)或應(yīng)用程序容器。 Docker 的早期版本使用 LXC 作為底層容器運(yùn)行時(shí)技術(shù)。 LXC 提供了一套高級的工具來管理容器(例如模板、存儲選項(xiàng)、直通設(shè)備、 autostart 等),并為用戶提供了大量的控制。在參考文獻(xiàn)中,我們在本文末尾的參考文獻(xiàn)中提供了來自 Canonical 和 Cisco 的工程師關(guān)于 LXC 的 GTC 2018 演講的鏈接。

LXC 支持非特權(quán)容器(使用 Linux 內(nèi)核中的用戶名稱空間特性)。在 HPC 環(huán)境中部署容器的上下文中,這是一個(gè)巨大的優(yōu)勢,在這種環(huán)境中,用戶可能沒有運(yùn)行容器的管理權(quán)限。 LXC 還支持 Docker 圖像的導(dǎo)入,下面我們將詳細(xì)介紹一個(gè)示例。

NVIDIA 繼續(xù)與 LXC 社區(qū)密切合作,開發(fā)上游補(bǔ)丁,以添加 GPU 支持。 4 月初發(fā)布的 lxc3 。 0 。 0 包括使用 NVIDIA 運(yùn)行時(shí)對 GPUs 的支持。有關(guān)更多信息和演示,請參閱 Canonical 的新聞 郵遞 。

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

圖 3 NVIDIA 容器運(yùn)行時(shí)與 LXC 的集成

讓我們看看用 LXC 運(yùn)行一個(gè)簡單的 CUDA 容器。這個(gè)例子展示了如何使用默認(rèn)的 LXC OCI 模板 從 Docker Hub 上可用的 OCI 映像(使用諸如 Skopo 和 擦除 )創(chuàng)建應(yīng)用程序容器。

首先,讓我們?yōu)楣ぞ咴O(shè)置存儲庫:

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

安裝 LXC 和相關(guān)工具,如 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

為每個(gè)用戶設(shè)置用戶、組 ID 和虛擬以太網(wǎng)接口。請參閱 LXC文檔中有關(guān)創(chuàng)建非特權(quán)容器的內(nèi)容。為了方便起見,這里提供了示例腳本。

$ 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

現(xiàn)在,為每個(gè)容器設(shè)置 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

作為一次性設(shè)置,請將權(quán)限和配置設(shè)置為常規(guī)用戶:

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

使用lxc-create從 NVIDIA 的 Docker Hub 存儲庫上的 CUDA 映像下載并創(chuàng)建一個(gè) CUDA 應(yīng)用程序容器。

$ 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

作為普通用戶,我們可以在容器內(nèi)運(yùn)行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 |
+-----------------------------------------------------------------------------+

結(jié)論

本文介紹了 NVIDIA 容器運(yùn)行時(shí),以及如何將其輕松集成到容器運(yùn)行時(shí)和編排生態(tài)系統(tǒng)中,以啟用 GPU 支持。現(xiàn)在就開始用它來構(gòu)建和運(yùn)行 GPU 容器吧!安裝程序包可用于 品種 的 Linux 發(fā)行版。 NVIDIA -Docker 1 。 0 已被棄用,不再被積極支持。我們強(qiáng)烈建議用戶在使用 Docker 時(shí)升級到新的 NVIDIA 運(yùn)行時(shí)。未來的路線圖包括許多令人興奮的特性,包括對 Vulkan 、 CUDA MPS 、集裝箱驅(qū)動(dòng)程序等的支持。

關(guān)于作者

Jonathan Calmels 是 NVIDIA 的系統(tǒng)軟件工程師。他的工作主要集中在 GPU 數(shù)據(jù)中心軟件和用于深度學(xué)習(xí)的超大規(guī)模解決方案。喬納森擁有計(jì)算機(jī)科學(xué)與工程碩士學(xué)位。

Felix Abecassis 是 NVIDIA 的系統(tǒng)軟件工程師,致力于使 GPU 應(yīng)用程序更易于在數(shù)據(jù)中心部署和管理。 GPU 專注于機(jī)器學(xué)習(xí)支持框架。他擁有法國學(xué)校 EPITA 的計(jì)算機(jī)科學(xué)碩士學(xué)位。

Pramod Ramarao 是 NVIDIA 加速計(jì)算的產(chǎn)品經(jīng)理。他領(lǐng)導(dǎo) CUDA 平臺和數(shù)據(jù)中心軟件的產(chǎn)品管理,包括容器技術(shù)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5299

    瀏覽量

    106260
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4937

    瀏覽量

    131136
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    干貨分享 | RK3588 Ubuntu系統(tǒng)Docker容器使用指南

    前言:瑞芯微RK3588高性能AIoT平臺上運(yùn)行Ubuntu系統(tǒng)時(shí),Docker容器技術(shù)能極大提升開發(fā)部署效率。通過輕量級虛擬化實(shí)現(xiàn)環(huán)境隔離與快速遷移,本文將從零開始詳解RK3588
    的頭像 發(fā)表于 06-27 12:01 ?809次閱讀
    干貨分享 | RK3588 Ubuntu系統(tǒng)<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>使用指南

    PLC設(shè)備運(yùn)行時(shí)間數(shù)據(jù)采集到運(yùn)維管理平臺如何實(shí)現(xiàn)

    工廠設(shè)備管理工作中,往往需要統(tǒng)計(jì)各個(gè)設(shè)備的運(yùn)行時(shí)間,能夠衡量其運(yùn)行性能,主要為了方便管理人員對設(shè)備進(jìn)行定期維護(hù),以保障設(shè)備處于穩(wěn)定高效的運(yùn)行狀態(tài),減少故障停機(jī)導(dǎo)致生產(chǎn)停工的問題。 對
    的頭像 發(fā)表于 06-20 16:02 ?203次閱讀
    PLC設(shè)備<b class='flag-5'>運(yùn)行時(shí)</b>間數(shù)據(jù)采集到運(yùn)維管理平臺如何實(shí)現(xiàn)

    步進(jìn)電機(jī)高速運(yùn)行時(shí)反電動(dòng)勢波形與其動(dòng)態(tài)響應(yīng)變化

    步進(jìn)電機(jī)高速運(yùn)行時(shí),反電動(dòng)勢幅值增大、頻率升高,導(dǎo)致電流建立延遲、扭矩下降及動(dòng)態(tài)響應(yīng)滯后。所以步進(jìn)電機(jī)高速運(yùn)行的方案中,我們需要通過優(yōu)化電機(jī)選型(如低電感、適中極數(shù))、升壓驅(qū)動(dòng)及BEMF反饋控制,可緩解高速性能衰減,避免PWM
    的頭像 發(fā)表于 06-10 16:06 ?313次閱讀
    步進(jìn)電機(jī)<b class='flag-5'>在</b>高速<b class='flag-5'>運(yùn)行時(shí)</b>反電動(dòng)勢波形與其動(dòng)態(tài)響應(yīng)變化

    【技術(shù)案例】Android in Docker

    Docker介紹Docker是一個(gè)開源的容器化平臺,用于打包、分發(fā)和運(yùn)行應(yīng)用程序。它通過將應(yīng)用及其所有依賴打包到獨(dú)立的容器中,確保應(yīng)用在不同
    的頭像 發(fā)表于 04-02 16:33 ?633次閱讀
    【技術(shù)案例】Android in <b class='flag-5'>Docker</b>

    Windows上安裝OpenVINO?運(yùn)行時(shí)遇到錯(cuò)誤怎么解決?

    已在 Windows* 上安裝OpenVINO?運(yùn)行時(shí)。 配置環(huán)境變量。 遇到錯(cuò)誤: Location is not available.
    發(fā)表于 03-05 09:13

    無法ONNX運(yùn)行時(shí)加載OpenVINO?中間表示 (IR),為什么?

    無法 ONNX運(yùn)行時(shí)加載OpenVINO?中間表示 (IR)
    發(fā)表于 03-05 09:07

    運(yùn)行時(shí)OpenVINO?找不到模型優(yōu)化器,為什么?

    運(yùn)行時(shí)OpenVINO?找不到模型優(yōu)化器,運(yùn)行模型下載程序命令并收到錯(cuò)誤消息: omz_downloader:找不到命令
    發(fā)表于 03-05 08:16

    使用Windows中的Docker容器運(yùn)行DL Streamer出現(xiàn)報(bào)錯(cuò)怎么解決?

    使用 Windows* 中的 Docker 容器運(yùn)行 DL Streamer。 遇到錯(cuò)誤: gi.repository.GLib.GError: gst_parse_error: 無元素 “vaapih264enc” (1)
    發(fā)表于 03-05 07:04

    《CST Studio Suite 2024 GPU加速計(jì)算指南》

    的各個(gè)方面,包括硬件支持、操作系統(tǒng)支持、許可證、GPU計(jì)算的啟用、NVIDIA和AMD GPU的詳細(xì)信息以及相關(guān)的使用指南和故障排除等內(nèi)容。 1. 硬件支持 -
    發(fā)表于 12-16 14:25

    Docker運(yùn)行環(huán)境安裝

    、發(fā)布、測試和部署,可以幫助開發(fā)人員將最新版本代碼應(yīng)用到生產(chǎn)環(huán)境中。 Docker可以安裝在多個(gè)平臺中,包括Mac、Windows和Linux。不過,生產(chǎn)環(huán)境還是推薦Linux上運(yùn)行,以下以主流的Linux操作系統(tǒng)(CentO
    的頭像 發(fā)表于 10-29 11:28 ?649次閱讀

    影響逆變器電池狀態(tài)的原因,整體運(yùn)行時(shí)

    逆變器的使用需要了解影響電池性能和整體運(yùn)行時(shí)間的因素。讓我們深入探討最大化電源設(shè)置的關(guān)鍵考慮因素。逆變器效率:逆變器的效率至關(guān)重要。當(dāng)逆變器將電池的DC電能轉(zhuǎn)換為交流
    的頭像 發(fā)表于 10-18 10:41 ?870次閱讀
    影響逆變器電池狀態(tài)的原因,整體<b class='flag-5'>運(yùn)行時(shí)</b>間

    C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測

    電子發(fā)燒友網(wǎng)站提供《C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測.pdf》資料免費(fèi)下載
    發(fā)表于 09-11 09:30 ?0次下載
    C2000?MCU的<b class='flag-5'>運(yùn)行時(shí)</b>堆棧大小監(jiān)測

    直線電機(jī)在運(yùn)行時(shí)噪音大不大

    眾所周知,直線電機(jī)采用了簡化的結(jié)構(gòu)設(shè)計(jì),沒用中間的傳動(dòng)機(jī)構(gòu),能夠減少振動(dòng)和共振,使得運(yùn)行時(shí)的噪音得到了較好地控制。 直線電機(jī)的主要原材料是磁鐵和銅線,由此也能看出,它的工作原理是基于磁懸浮技術(shù),而磁懸浮技術(shù)
    的頭像 發(fā)表于 08-12 11:37 ?776次閱讀
    直線電機(jī)在<b class='flag-5'>運(yùn)行時(shí)</b>噪音大不大

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    Docker的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保環(huán)境一致性,從而不會在出現(xiàn)“這段代碼我機(jī)器上沒問題”這類問題。 持續(xù)支付和部署:對開發(fā)和運(yùn)維人員來說,最希望就是一次創(chuàng)建和部署,可以在任意的地方
    發(fā)表于 07-25 14:36

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    Docker的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保環(huán)境一致性,從而不會在出現(xiàn)“這段代碼我機(jī)器上沒問題”這類問題。持續(xù)支付和部署:對開發(fā)和運(yùn)維人員來說,最希望就是一次創(chuàng)建和部署,可以在任意的地方
    發(fā)表于 07-17 11:05