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

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

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

如何使用NVIDIA Docker部署GPU服務(wù)器應(yīng)用程序

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-04-27 15:06 ? 次閱讀

在過去的幾年里,使用容器來大規(guī)模部署數(shù)據(jù)中心應(yīng)用程序的數(shù)量急劇增加。原因很簡(jiǎn)單:容器封裝了應(yīng)用程序的依賴項(xiàng),以提供可重復(fù)和可靠的應(yīng)用程序和服務(wù)執(zhí)行,而無需整個(gè)虛擬機(jī)的開銷。如果您曾經(jīng)花了一天的時(shí)間為一個(gè)科學(xué)或 深度學(xué)習(xí) 應(yīng)用程序提供一個(gè)包含大量軟件包的服務(wù)器,或者已經(jīng)花費(fèi)數(shù)周的時(shí)間來確保您的應(yīng)用程序可以在多個(gè) linux 環(huán)境中構(gòu)建和部署,那么 Docker 容器非常值得您花費(fèi)時(shí)間。

圖 1 : Docker 容器封裝了應(yīng)用程序的依賴項(xiàng),以提供可重復(fù)和可靠的執(zhí)行。 NVIDIA Docker 插件支持在任何 Linux GPU 服務(wù)器上部署 GPU – 加速應(yīng)用程序,并支持 NVIDIA Docker 。

在 NVIDIA ,我們以各種方式使用容器,包括開發(fā)、測(cè)試、基準(zhǔn)測(cè)試,當(dāng)然還有生產(chǎn)中的容器,作為通過 NVIDIA DGX-1 的云管理軟件部署深度學(xué)習(xí)框架的機(jī)制。 Docker 改變了我們管理工作流程的方式。使用 Docker ,我們可以在工作站上開發(fā)和原型化 GPU 應(yīng)用程序,然后在任何支持 GPU 容器的地方發(fā)布和運(yùn)行這些應(yīng)用程序。

在本文中,我們將介紹 Docker 容器;解釋 NVIDIA Docker 插件的好處;通過構(gòu)建和部署一個(gè)簡(jiǎn)單的 CUDA 應(yīng)用程序的示例;最后演示如何使用 NVIDIA Docker 運(yùn)行當(dāng)今最流行的深度學(xué)習(xí)應(yīng)用程序和框架,包括 DIGITS 、 Caffe 和 TensorFlow 。

上周在 DockerCon 2016 年 上, Felix 和 Jonathan 做了一個(gè)演講“使用 Docker 實(shí)現(xiàn) GPU – 加速應(yīng)用”。這是幻燈片。

[slideshare id=63346193&doc=146387dockercon16-160622172714]

Docker 簡(jiǎn)介

Docker 容器是一種將 Linux 應(yīng)用程序與其所有庫、數(shù)據(jù)文件和環(huán)境變量捆綁在一起的機(jī)制,以便在運(yùn)行的任何 Linux 系統(tǒng)上以及在同一主機(jī)上的實(shí)例之間,執(zhí)行環(huán)境始終是相同的。 Docker 容器僅為用戶模式,因此來自容器的所有內(nèi)核調(diào)用都由主機(jī)系統(tǒng)內(nèi)核處理。 在它的網(wǎng)站上 , Docker 這樣描述容器:

Docker 容器將一個(gè)軟件包在一個(gè)完整的文件系統(tǒng)中,該文件系統(tǒng)包含運(yùn)行所需的一切:代碼、運(yùn)行時(shí)、系統(tǒng)工具、系統(tǒng)庫——任何可以安裝在服務(wù)器上的東西。這保證了軟件無論其環(huán)境如何,都將始終運(yùn)行相同的程序。

區(qū)分容器和基于 hypervisor 的虛擬機(jī)( vm )很重要。 vm 允許操作系統(tǒng)的多個(gè)副本,甚至多個(gè)不同的操作系統(tǒng)共享一臺(tái)機(jī)器。每個(gè)虛擬機(jī)可以承載和運(yùn)行多個(gè)應(yīng)用程序。相比之下,容器被設(shè)計(jì)成虛擬化單個(gè)應(yīng)用程序,并且部署在主機(jī)上的所有容器共享一個(gè)操作系統(tǒng)內(nèi)核,如圖 2 所示。通常,容器運(yùn)行速度更快,以裸機(jī)性能運(yùn)行應(yīng)用程序,并且更易于管理,因?yàn)檫M(jìn)行操作系統(tǒng)內(nèi)核調(diào)用沒有額外的開銷。

圖 2 :雖然 vm 封裝了整個(gè)操作系統(tǒng)和任何應(yīng)用程序,但容器封裝了單個(gè)應(yīng)用程序及其依賴項(xiàng),以便進(jìn)行可移植部署,但在容器之間共享相同的主機(jī)操作系統(tǒng)。

Docker 提供了硬件和軟件封裝,允許多個(gè)容器同時(shí)在同一個(gè)系統(tǒng)上運(yùn)行,每個(gè)容器都有自己的資源集( CPU 、內(nèi)存等)和它們自己的專用依賴集(庫版本、環(huán)境變量等)。 Docker 還提供了可移植的 Linux 部署: Docker 容器可以在任何內(nèi)核為 3 。 10 或更高版本的 Linux 系統(tǒng)上運(yùn)行。自 2014 年以來,所有主要的 Linux 發(fā)行版都支持 Docker 。封裝和可移植部署對(duì)于創(chuàng)建和測(cè)試應(yīng)用程序的開發(fā)人員以及在數(shù)據(jù)中心運(yùn)行應(yīng)用程序的操作人員都很有價(jià)值。

Docker 提供了許多更重要的功能。

Docker 強(qiáng)大的命令行工具“ Docker build ”,使用“ Dockerfile ”中提供的描述,從源代碼和二進(jìn)制文件創(chuàng)建 Docker 映像。

Docker 的組件架構(gòu)允許一個(gè)容器映像用作其他容器的基礎(chǔ)。

Docker 提供容器的自動(dòng)版本控制和標(biāo)簽,優(yōu)化了組裝和部署。 Docker 映像由版本化的層組合而成,因此只需要下載服務(wù)器上缺少的層。

Docker Hub 是一項(xiàng)服務(wù),它可以方便地公開或私下共享 Docker 圖像。

容器可以限制在一個(gè)系統(tǒng)上有限的一組資源(例如一個(gè) CPU 內(nèi)核和 1GB 內(nèi)存)。

Docker 提供了一個(gè) 分層文件系統(tǒng) ,它可以節(jié)省磁盤空間,并構(gòu)成可擴(kuò)展容器的基礎(chǔ)。

為什么是 Docker ?

Docker 容器與平臺(tái)無關(guān),但也與硬件無關(guān)。當(dāng)使用特殊的硬件,如 NVIDIA GPUs 時(shí),這就產(chǎn)生了一個(gè)問題,這些硬件需要內(nèi)核模塊和用戶級(jí)庫來操作。因此, Docker 本機(jī)不支持容器中的 NVIDIA GPUs 。

解決這個(gè)問題的早期解決方案之一是在容器中完全安裝 NVIDIA 驅(qū)動(dòng)程序,并在啟動(dòng)時(shí)映射到與 NVIDIA GPUs (例如 /dev/nvidia0 )對(duì)應(yīng)的字符設(shè)備中。此解決方案很脆弱,因?yàn)橹鳈C(jī)驅(qū)動(dòng)程序的版本必須與容器中安裝的驅(qū)動(dòng)程序版本完全匹配。這一要求大大降低了這些早期容器的可移植性,破壞了 Docker 更重要的特性之一。

為了使 Docker 映像能夠利用 NVIDIA GPUs 實(shí)現(xiàn)可移植性,我們開發(fā)了 nvidia-docker ,這是一個(gè)托管在 Github 上的開源項(xiàng)目,它提供了基于 GPU 的可移植容器所需的兩個(gè)關(guān)鍵組件:

與驅(qū)動(dòng)程序無關(guān)的 CUDA 圖像;以及

Docker 命令行包裝器,在啟動(dòng)時(shí)將驅(qū)動(dòng)程序和 GPUs (字符設(shè)備)的用戶模式組件裝入容器。

nvidia-docker 本質(zhì)上是圍繞 docker 命令的包裝器,它透明地為容器提供了在 GPU 上執(zhí)行代碼所需的組件。只有在使用 nvidia-docker run 來執(zhí)行使用 GPUs 的容器時(shí)才是絕對(duì)必要的。但為了簡(jiǎn)單起見,在本文中,我們將其用于所有 Docker 命令。

安裝 Docker 和 NVIDIA Docker

在我們開始構(gòu)建集裝箱化的 GPU 應(yīng)用程序之前,讓我們先確保您已經(jīng)安裝了必備軟件并能正常工作。您需要:

您系統(tǒng)的最新 NVIDIA drivers 。

碼頭工人。您可以按照 此處為安裝說明 操作。

` NVIDIA -docker `您可以按照 此處為安裝說明 操作。

為了幫助安裝,我們創(chuàng)建了一個(gè) 執(zhí)行 docker 和 NVIDIA -docker 安裝的可靠角色 。 Ansible 是一個(gè)自動(dòng)化機(jī)器配置管理和應(yīng)用程序部署的工具。

要測(cè)試您是否準(zhǔn)備就緒,請(qǐng)運(yùn)行以下命令。您應(yīng)該會(huì)看到與所示內(nèi)容類似的輸出。

要測(cè)試您是否準(zhǔn)備就緒,請(qǐng)運(yùn)行以下命令。您應(yīng)該會(huì)看到與所示內(nèi)容類似的輸出。

ryan@titanx:~$ nvidia-docker run --rm hello-world

Using default tag: latest

latest: Pulling from library/hello-world

a9d36faac0fe: Pull complete

Digest: sha256:e52be8ffeeb1f374f440893189cd32f44cb166650e7ab185fa7735b7dc48d619

Status: Downloaded newer image for hello-world:latest



Hello from Docker.

This message shows that your installation appears to be working correctly.



[... simplified output ...]

現(xiàn)在一切都正常了,讓我們開始在容器中構(gòu)建一個(gè)簡(jiǎn)單的 GPU 應(yīng)用程序。

構(gòu)建集裝箱化 GPU 應(yīng)用程序

為了突出 Docker 和我們的插件的特性,我將在容器中從 CUDA 工具箱示例構(gòu)建 deviceQuery 應(yīng)用程序。此三步方法可以應(yīng)用于任何 CUDA 示例,也可以應(yīng)用于您最喜歡的應(yīng)用程序,只需稍作修改。

在容器中設(shè)置和探索開發(fā)環(huán)境。

在容器中構(gòu)建應(yīng)用程序。

在多個(gè)環(huán)境中部署容器。

發(fā)展環(huán)境

相當(dāng)于安裝 CUDA 開發(fā)庫的 Docker 命令如下:

nvidia-docker pull nvidia/cuda

這個(gè)命令從 DockerHub 獲取最新版本的nvidia/cuda映像, DockerHub 是一個(gè)用于容器映像的云存儲(chǔ)服務(wù)??梢允褂?code style="font-size:inherit;color:inherit;margin:0px;padding:0px;border:0px;font-style:inherit;font-variant:inherit;font-weight:inherit;line-height:inherit;vertical-align:baseline;background-color:rgb(244,244,244);">docker run在這個(gè)容器中執(zhí)行命令。下面是在我們剛剛提取的容器中對(duì)nvcc --version的調(diào)用。

ryan@titanx:~$ nvidia-docker run --rm -ti nvidia/cuda nvcc --version

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2015 NVIDIA Corporation

Built on Tue_Aug_11_14:27:32_CDT_2015

Cuda compilation tools, release 7.5, V7.5.17

如果需要 CUDA 6 .5 或 7.0 ,可以指定 圖像的標(biāo)記 。 Ubuntu 和 CentOS 可用的 CUDA 圖像列表可以在 NVIDIA -docker 維基 上找到。下面是一個(gè)使用 CUDA 7 。 0 的類似示例。

ryan@titanx:~$ nvidia-docker run --rm -ti nvidia/cuda:7.0 nvcc --version

Unable to find image 'nvidia/cuda:7.0' locally

7.0: Pulling from nvidia/cuda

6c953ac5d795: Already exists

[ … simplified layers -- ubuntu base image … ]

68bad08eb200: Pull complete

[ … simplified layers -- cuda 7.0 toolkit … ]



Status: Downloaded newer image for nvidia/cuda:7.0

nvcc: NVIDIA (R) Cuda compiler driver

Copyright (c) 2005-2015 NVIDIA Corporation

Built on Mon_Feb_16_22:59:02_CST_2015

Cuda compilation tools, release 7.0, V7.0.27

由于系統(tǒng)上本地只有 nvidia/cuda:7.5 映像,所以上面的 docker run 命令將 pull 和 run 操作合并在一起。您會(huì)注意到, nvidia/cuda:7.0 圖像的拉動(dòng)比 7 。 5 圖像的拉動(dòng)要快。這是因?yàn)閮蓚€(gè)容器映像共享相同的基礎(chǔ) ubuntu14 。 04 映像,該映像已經(jīng)存在于主機(jī)上。 Docker 緩存并重用圖像層,因此只下載 CUDA 7 。 0 工具包所需的新層。這一點(diǎn)很重要: Docker 鏡像是逐層構(gòu)建的,可以與多個(gè)鏡像共享,節(jié)省主機(jī)上的磁盤空間(以及部署時(shí)間)。 Docker 映像的這種可擴(kuò)展性是一個(gè)強(qiáng)大的特性,我們將在本文后面討論。(了解更多 Docker 的分層文件系統(tǒng) )。

最后,您可以通過運(yùn)行一個(gè)執(zhí)行 bash shell 的容器來探索開發(fā)映像。

nvidia-docker run --rm -ti nvidia/cuda:7.5 bash

在這個(gè)沙盒環(huán)境中盡情玩耍吧。您可以通過 apt 安裝軟件包或檢查 /usr/local/cuda 中的 CUDA 庫,但請(qǐng)注意,退出( ctrl + d 或 exit 命令)時(shí),對(duì)正在運(yùn)行的容器所做的任何更改都將丟失。

這種非持久性實(shí)際上是 Docker 的一個(gè)特性。 Docker 容器的每個(gè)實(shí)例都從映像定義的相同初始狀態(tài)開始。在下一節(jié)中,我們將研究一種擴(kuò)展和向圖像添加新內(nèi)容的機(jī)制。

構(gòu)建應(yīng)用程序

讓我們?cè)谌萜髦袠?gòu)建 deviceQuery 應(yīng)用程序,方法是用應(yīng)用程序的層擴(kuò)展 CUDA 映像。一種用于定義層的機(jī)制是 Dockerfile 。 Dockerfile 就像一個(gè)藍(lán)圖,文件中的每一條指令都會(huì)給圖像添加一個(gè)新的層。讓我們看看 deviceQuery 應(yīng)用程序的 Dockerfile 。

# FROM defines the base image

FROM nvidia/cuda:7.5



# RUN executes a shell command

# You can chain multiple commands together with &&

# A \ is used to split long lines to help with readability

# This particular instruction installs the source files

# for deviceQuery by installing the CUDA samples via apt

RUN apt-get update && apt-get install -y --no-install-recommends \

        cuda-samples-$CUDA_PKG_VERSION && \

    rm -rf /var/lib/apt/lists/*



# set the working directory

WORKDIR /usr/local/cuda/samples/1_Utilities/deviceQuery



RUN make



# CMD defines the default command to be run in the container

# CMD is overridden by supplying a command + arguments to

# `docker run`, e.g. `nvcc --version` or `bash`

CMD ./deviceQuery

有關(guān)可用Dockerfile指令的完整列表,請(qǐng)參閱碼頭工人

在只有 Dockerfile 的文件夾中運(yùn)行以下docker build命令,從 Dockerfile 藍(lán)圖構(gòu)建應(yīng)用程序的容器映像。

nvidia-docker build -t device-query .

這個(gè)命令生成一個(gè)名為 device-query 的 docker 容器映像,它繼承了 CUDA 7 。 5 開發(fā)映像的所有層。

運(yùn)行集裝箱化 CUDA 應(yīng)用程序

我們現(xiàn)在準(zhǔn)備在 GPU 上執(zhí)行 device-query 容器。默認(rèn)情況下, nvidia-docker 將主機(jī)上的所有 GPUs 映射到容器中。

ryan@titanx:~$ nvidia-docker run --rm -ti device-query

./deviceQuery Starting...



 CUDA Device Query (Runtime API) version (CUDART static linking)



Detected 2 CUDA Capable device(s)



Device 0: "GeForce GTX TITAN X"

  CUDA Driver Version / Runtime Version          8.0 / 7.5

  CUDA Capability Major/Minor version number:    5.2

  Total amount of global memory:                 12287 MBytes (12883345408 bytes)

  (24) Multiprocessors, (128) CUDA Cores/MP:     3072 CUDA Cores

[... simplified output …]



Device 1: "GeForce GTX TITAN X"

  CUDA Driver Version / Runtime Version          8.0 / 7.5

  CUDA Capability Major/Minor version number:    5.2

  Total amount of global memory:                 12288 MBytes (12884705280 bytes)

  (24) Multiprocessors, (128) CUDA Cores/MP:     3072 CUDA Cores

[... simplified output …]



> Peer access from GeForce GTX TITAN X (GPU0) -> GeForce GTX TITAN X (GPU1) : Yes

> Peer access from GeForce GTX TITAN X (GPU1) -> GeForce GTX TITAN X (GPU0) : Yes



deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0,

CUDA Runtime Version = 7.5, NumDevs = 2,

Device0 = GeForce GTX TITAN X,

Device1 = GeForce GTX TITAN X

Result = PASS

nvidia-docker還通過NV_GPU環(huán)境變量提供資源隔離功能。下面的示例在 GPU 1 上運(yùn)行device-query容器。

ryan@titanx:~$ NV_GPU=1 nvidia-docker run --rm -ti device-query

./deviceQuery Starting...



 CUDA Device Query (Runtime API) version (CUDART static linking)



Detected 1 CUDA Capable device(s)



Device 0: "GeForce GTX TITAN X"

  CUDA Driver Version / Runtime Version          8.0 / 7.5

  CUDA Capability Major/Minor version number:    5.2

  Total amount of global memory:                 12288 MBytes (12884705280 bytes)

  (24) Multiprocessors, (128) CUDA Cores/MP:     3072 CUDA Cores



[... simplified output …]



deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0,

CUDA Runtime Version = 7.5, NumDevs = 1,

Device0 = GeForce GTX TITAN X

Result = PASS

因?yàn)槲覀冎粚?GPU 1 映射到容器中, deviceQuery 應(yīng)用程序只能看到并報(bào)告一個(gè) GPU 。資源隔離允許您指定允許您的容器化應(yīng)用程序使用哪個(gè) GPUs 。為獲得最佳性能,請(qǐng)確保在選擇 GPUs 的子集時(shí)考慮到 PCI 樹的拓?fù)浣Y(jié)構(gòu)。

集裝箱 GPU

在我們目前的例子中,我們?cè)谝粋€(gè)有兩個(gè) GPUs NVIDIA X Titan 的工作站上構(gòu)建并運(yùn)行 device-query 。現(xiàn)在,讓我們?cè)?DGX-1 服務(wù)器上部署該容器。部署容器是將容器映像從構(gòu)建位置移動(dòng)到運(yùn)行位置的過程。部署容器的多種方法之一是 碼頭樞紐 ,這是一種云服務(wù),用于承載容器映像,類似于 Github 托管 git 存儲(chǔ)庫的方式。我們用來構(gòu)建 device-query 的 nvidia/cuda 映像由 Docker Hub 托管。

在將 device-query 推送到 DockerHub 之前,我們需要用 DockerHub 用戶名/帳戶對(duì)其進(jìn)行標(biāo)記。

ryan@titanx:~$ nvidia-docker tag device-query ryanolson/device-query

現(xiàn)在將標(biāo)記的圖像推送到 Docker Hub 很簡(jiǎn)單。

ryan@titanx:~/docker/blog-post$ nvidia-docker push ryanolson/device-query

The push refers to a repository [docker.io/ryanolson/device-query]

35f4e4c58e9f: Pushed

170db279f3a6: Pushed

3f6d94182a7e: Mounted from nvidia/cuda

[ … simplifed multiple ‘from nvidia/cuda’ layers … ]

對(duì)于使用 Docker Hub 或其他容器托管存儲(chǔ)庫的替代方法,請(qǐng)查看 docker save 和 docker load 命令。

我們推送到 Docker Hub 的 device-query 映像現(xiàn)在可供世界上任何支持 Docker 的服務(wù)器使用。為了在我實(shí)驗(yàn)室的 DGX-1 上部署 device-query ,我只需拉取并運(yùn)行映像。這個(gè)例子使用了 CUDA 8 。 0 候選版本,現(xiàn)在您可以通過加入 NVIDIA 加速計(jì)算開發(fā)人員計(jì)劃 來訪問它。

lab@dgx-1-07:~$ nvidia-docker run --rm -ti ryanolson/device-query

Using default tag: latest

latest: Pulling from ryanolson/device-query

6c953ac5d795: Already exists

[ … simplified multiple ‘a(chǎn)lready exists’ layers … ]

1cc994928295: Pull complete

a9e6b6393938: Pull complete

Digest: sha256:0b42703a0785cf5243151b8cba7cc181a6c20a3c945a718ce712476541fe4d70

Status: Downloaded newer image for ryanolson/device-query:latest



./deviceQuery Starting...



 CUDA Device Query (Runtime API) version (CUDART static linking)



Detected 8 CUDA Capable device(s)



Device 0: "Tesla P100-SXM2-16GB"

  CUDA Driver Version / Runtime Version          8.0 / 7.5

  CUDA Capability Major/Minor version number:    6.0

  Total amount of global memory:                 16281 MBytes (17071669248 bytes)

  (56) Multiprocessors, (64) CUDA Cores/MP:     3584 CUDA Cores



[... simplified output … ]



Device 7: "Tesla P100-SXM2-16GB"

  CUDA Driver Version / Runtime Version          8.0 / 7.5

  CUDA Capability Major/Minor version number:    6.0

  Total amount of global memory:                 16281 MBytes (17071669248 bytes)

  (56) Multiprocessors, (64) CUDA Cores/MP:     3584 CUDA Cores



[ … simplified output … ]



deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 8.0,

CUDA Runtime Version = 7.5, NumDevs = 8,

Device0 = Tesla P100-SXM2-16GB,

Device1 = Tesla P100-SXM2-16GB,

Device2 = Tesla P100-SXM2-16GB,

Device3 = Tesla P100-SXM2-16GB,

Device4 = Tesla P100-SXM2-16GB,

Device5 = Tesla P100-SXM2-16GB,

Device6 = Tesla P100-SXM2-16GB,

Device7 = Tesla P100-SXM2-16GB

Result = PASS

Docker for Deep Learning 和 HPC

既然您已經(jīng)了解了構(gòu)建和運(yùn)行一個(gè)簡(jiǎn)單的 CUDA 應(yīng)用程序是多么容易,那么運(yùn)行更復(fù)雜的應(yīng)用程序(如 DIGITS 或 Caffe )有多困難?如果我告訴你這就像一個(gè)命令那么簡(jiǎn)單呢?

nvidia-docker run --name digits --rm -ti -p 8000:34448 nvidia/digits

這個(gè)命令啟動(dòng) nvidia/digits 容器,并將運(yùn)行 DIGITS web 服務(wù)的容器中的 34448 端口映射到主機(jī)上的端口 8000 。

如果您在閱讀本文的同一臺(tái)機(jī)器上運(yùn)行該命令,那么現(xiàn)在嘗試打開 http://localhost:8000 。如果在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行 nvidia-docker 命令,則需要訪問該計(jì)算機(jī)上的端口 8000 。如果可以直接訪問遠(yuǎn)程服務(wù)器,只需將 localhost 替換為遠(yuǎn)程服務(wù)器的主機(jī)名或 IP 地址。

只需一個(gè)命令,就可以啟動(dòng)并運(yùn)行 NVIDIA 的數(shù)字平臺(tái),并且可以從瀏覽器訪問,如圖 3 所示。

圖 3 這個(gè)屏幕截圖顯示了一個(gè)本地 web 瀏覽器連接到遠(yuǎn)程主機(jī)上的容器中運(yùn)行的數(shù)字,使用 ssh 隧道進(jìn)行轉(zhuǎn)發(fā)本地主機(jī): 8000 到運(yùn)行容器的遠(yuǎn)程主機(jī)上的端口 8000 。(點(diǎn)擊查看更大的屏幕截圖。)

這就是為什么我們喜歡 NVIDIA 的 Docker 。作為 DIGITS 等開源軟件的開發(fā)人員,我們希望像您這樣的用戶能夠以最小的努力使用我們最新的軟件。

而且我們并不是唯一的一家:谷歌和微軟分別使用我們的 CUDA 圖片作為 TensorFlow 和 CNTK 的基礎(chǔ)圖片。 Google 提供 TensorFlow 的預(yù)構(gòu)建 Docker 映像 通過他們的公共容器存儲(chǔ)庫,而微軟 為 CNTK 提供 Dockerfile 則可以自己構(gòu)建。

讓我們看看啟動(dòng)一個(gè)更復(fù)雜的應(yīng)用程序有多容易,比如 TensorFlow ,它需要 NumPy 、 Bazel 和無數(shù)其他依賴項(xiàng)。是的,只是一條線!您甚至不需要下載和構(gòu)建 TensorFlow ,您可以直接使用 Docker Hub 上提供的圖像。

nvidia-docker run --rm -ti tensorflow/tensorflow:r0.9-devel-gpu

運(yùn)行此命令后,您可以通過運(yùn)行其包含的 MNIST 訓(xùn)練腳本來測(cè)試 TensorFlow :

nvidia-docker run --rm -ti tensorflow/tensorflow:r0.9-devel-gpu

root@ab5f46ba17d2:~# python -m tensorflow.models.image.mnist.convolutional

[tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally

[tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally

[tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally

[tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally

[tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally

Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.

Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.

Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.

Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.

[...]

今天就開始使用 NVIDIA Docker

在這篇文章中,我們通過擴(kuò)展 nvidia/cuda 映像并在多個(gè)不同的平臺(tái)上部署我們的新容器,介紹了在容器中構(gòu)建 GPU 應(yīng)用程序的基本知識(shí)。當(dāng)您將您的 GPU 應(yīng)用程序容器化時(shí),請(qǐng)使用下面的注釋與我們聯(lián)系,以便我們可以將您的項(xiàng)目添加到 使用 nvidia-docker 的項(xiàng)目列表 。

關(guān)于作者

Ryan Olson 是 NVIDIA 全球現(xiàn)場(chǎng)組織的解決方案架構(gòu)師。他的主要職責(zé)包括支持深度學(xué)習(xí)和高性能計(jì)算應(yīng)用程序。

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

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

Phil Rogers 是 NVIDIA 計(jì)算服務(wù)器產(chǎn)品的首席軟件架構(gòu)師。 Phil 現(xiàn)在主要關(guān)注的是 DGX-1 的系統(tǒng)軟件,以及 GPU ——加速容器,用于將應(yīng)用程序傳送到該服務(wù)器。

審核編輯:郭婷

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

    關(guān)注

    14

    文章

    4818

    瀏覽量

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

    關(guān)注

    27

    文章

    4640

    瀏覽量

    128487
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    GPU高性能服務(wù)器配置

    GPU高性能服務(wù)器作為提升計(jì)算速度和效率的關(guān)鍵設(shè)備,在各大應(yīng)用場(chǎng)景中發(fā)揮著越來越重要的作用。在此,petacloud.ai小編為你介紹GPU高性能服務(wù)器的配置要點(diǎn)。
    的頭像 發(fā)表于 10-21 10:42 ?96次閱讀

    美國(guó)大帶寬云服務(wù)器怎么用?完整教程來了

    首先選擇一家靠譜的服務(wù)商,其次在服務(wù)商平臺(tái)上創(chuàng)建云服務(wù)器實(shí)例,第三,進(jìn)行遠(yuǎn)程連接,并配置云服務(wù)器,第五步部署
    的頭像 發(fā)表于 09-20 11:00 ?253次閱讀

    gpu服務(wù)器與cpu服務(wù)器的區(qū)別對(duì)比,終于知道怎么選了!

    gpu服務(wù)器與cpu服務(wù)器的區(qū)別主要體現(xiàn)在架構(gòu)設(shè)計(jì)、性能特點(diǎn)、能耗效率、應(yīng)用場(chǎng)景、市場(chǎng)定位等方面,在以上幾個(gè)方面均存在顯著差異。CPU服務(wù)器更適合數(shù)據(jù)庫管理和企業(yè)應(yīng)用,而
    的頭像 發(fā)表于 08-01 11:41 ?382次閱讀

    算力服務(wù)器為什么選擇GPU

    隨著人工智能技術(shù)的快速普及,算力需求日益增長(zhǎng)。智算中心的服務(wù)器作為支撐大規(guī)模數(shù)據(jù)處理和計(jì)算的核心設(shè)備,其性能優(yōu)化顯得尤為關(guān)鍵。而GPU服務(wù)器也進(jìn)入了大眾的視野,成為高性能計(jì)算的首選。那么,為什么算力
    的頭像 發(fā)表于 07-25 08:28 ?410次閱讀
    算力<b class='flag-5'>服務(wù)器</b>為什么選擇<b class='flag-5'>GPU</b>

    寶塔面板Docker一鍵安裝:部署GPTAcademic,開發(fā)私有GPT學(xué)術(shù)優(yōu)化工具

    gptacademic,并將其部署服務(wù)器上,從而開發(fā)出專屬于自己的GPT學(xué)術(shù)優(yōu)化工具。 ? 寶塔面板Docker一鍵安裝gptacademi
    的頭像 發(fā)表于 07-02 11:58 ?2327次閱讀
    寶塔面板<b class='flag-5'>Docker</b>一鍵安裝:<b class='flag-5'>部署</b>GPTAcademic,開發(fā)私有GPT學(xué)術(shù)優(yōu)化工具

    新手小白怎么學(xué)GPU服務(wù)器跑深度學(xué)習(xí)?

    新手小白想用GPU服務(wù)器跑深度學(xué)習(xí)應(yīng)該怎么做? 用個(gè)人主機(jī)通常pytorch可以跑但是LexNet,AlexNet可能就直接就跑不動(dòng),如何實(shí)現(xiàn)更經(jīng)濟(jì)便捷的實(shí)現(xiàn)GPU服務(wù)器深度學(xué)習(xí)?
    發(fā)表于 06-11 17:09

    使用Docker部署Go Web應(yīng)用程序步驟

    大多數(shù)情況下Go應(yīng)用程序被編譯成單個(gè)二進(jìn)制文件,web應(yīng)用程序則會(huì)包括模版和配置文件。而當(dāng)一個(gè)項(xiàng)目中有很多文件的時(shí)候,由于很多文件沒有同步就會(huì)導(dǎo)致錯(cuò)誤的發(fā)生并且產(chǎn)生很多的問題。
    發(fā)表于 04-20 09:33 ?438次閱讀
    使用<b class='flag-5'>Docker</b><b class='flag-5'>部署</b>Go Web<b class='flag-5'>應(yīng)用程序</b>步驟

    應(yīng)用程序中的服務(wù)器錯(cuò)誤怎么解決?

    在使用應(yīng)用程序時(shí),可能會(huì)遇到服務(wù)器錯(cuò)誤的問題。這種錯(cuò)誤通常會(huì)導(dǎo)致應(yīng)用程序無法正常運(yùn)行 ,給用戶帶來不便。下面將介紹應(yīng)用程序中的服務(wù)器錯(cuò)誤及其
    的頭像 發(fā)表于 03-12 15:13 ?5237次閱讀

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

    ,亦可實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用Docker,可像管理應(yīng)用程序一樣管理基礎(chǔ)結(jié)構(gòu)。通過利用Docker的快速發(fā)布、測(cè)試和部署代碼的方法,可顯著減少產(chǎn)
    的頭像 發(fā)表于 03-07 13:48 ?685次閱讀
    ARM平臺(tái)實(shí)現(xiàn)<b class='flag-5'>Docker</b>容器技術(shù)

    gpu服務(wù)器是干什么的 gpu服務(wù)器與cpu服務(wù)器的區(qū)別有哪些

    gpu服務(wù)器是干什么的 gpu服務(wù)器與cpu服務(wù)器的區(qū)別 GPU
    的頭像 發(fā)表于 01-30 15:31 ?764次閱讀

    超微gpu服務(wù)器評(píng)測(cè)

    GPU服務(wù)器進(jìn)行評(píng)測(cè)。 一、超微GPU服務(wù)器概述 超微GPU服務(wù)器是一種基于超微
    的頭像 發(fā)表于 01-10 10:37 ?1167次閱讀

    gpu服務(wù)器是干什么的 gpu服務(wù)器與cpu服務(wù)器的區(qū)別

     相比于傳統(tǒng)的CPU服務(wù)器,GPU服務(wù)器支持同時(shí)計(jì)算大量相似的計(jì)算操作,可以實(shí)現(xiàn)更強(qiáng)的并行計(jì)算性能。GPU服務(wù)器通常配備多個(gè)高性能的
    的頭像 發(fā)表于 12-02 17:20 ?1804次閱讀

    docker部署對(duì)性能的影響

    Docker 是一個(gè)流行的容器化平臺(tái),它提供了一種輕量級(jí)的虛擬化技術(shù),使得應(yīng)用程序可以在獨(dú)立的容器中運(yùn)行。然而,部署應(yīng)用程序Docker
    的頭像 發(fā)表于 11-23 09:31 ?1409次閱讀

    docker部署mysql的壞處

    Docker 是一種虛擬化技術(shù),它允許開發(fā)人員在容器內(nèi)打包應(yīng)用程序及其所有依賴項(xiàng),從而實(shí)現(xiàn)在不同環(huán)境中運(yùn)行相同的應(yīng)用程序的能力。然而,在使用 Docker
    的頭像 發(fā)表于 11-23 09:29 ?1297次閱讀

    linux docker安裝部署

    Docker是一種開源的容器化平臺(tái),可以幫助開發(fā)者在不同的環(huán)境中快速構(gòu)建、測(cè)試和部署應(yīng)用程序。它能夠解決不同操作系統(tǒng)之間的兼容性問題,簡(jiǎn)化了應(yīng)用程序
    的頭像 發(fā)表于 11-23 09:27 ?995次閱讀