软件驱动安装在docker_别为Docker本地实现不支持GPU发愁,解决方案在此!
原標(biāo)題:別為Docker本地實現(xiàn)不支持GPU發(fā)愁,解決方案在此!
導(dǎo)讀
通過提供獨立的執(zhí)行環(huán)境而不需要整個虛擬機的開銷,容器已經(jīng)成為大規(guī)模部署應(yīng)用程序的很有吸引力的選擇。
Docker讓容器變得易于使用,因此受到歡迎。通過使多個工程團隊能夠利用自己的配置進行開發(fā)、對齊基準(zhǔn)或部署可擴展的微服務(wù)架構(gòu),容器在各個地方都有用。
基于GPU的應(yīng)用程序,正在迅速成為標(biāo)準(zhǔn)工作流程的一部分,特別是在深度學(xué)習(xí)領(lǐng)域。
這些應(yīng)用程序在容器化應(yīng)用程序中的部署、測試和基準(zhǔn)測試已經(jīng)迅速成為公認的慣例。
但Docker容器的本地實現(xiàn)不支持NVIDIA GPU,這就是為什么我們開發(fā)了nvidia-docker插件。
在這里,筆者會告訴你如何使用它。
Nvidia-docker
NVIDIA GPU要求內(nèi)核模塊和用戶級庫來被識別并用于計算。有一個解決這個問題的辦法,但需要安裝Nvidia驅(qū)動程序和對應(yīng)于NVIDIA GPU字符設(shè)備的映射。但是,如果主機的Nvidia驅(qū)動程序已更改,則安裝在容器內(nèi)的驅(qū)動程序版本將不再兼容,因此會中斷主機上的容器使用。這違背了容器的主要特征,即可移動性。但是使用Nvidia Docker,可以無縫地配置一個GPU設(shè)備可見的容器,并準(zhǔn)備好執(zhí)行基于GPU的應(yīng)用程序。
Nvidia關(guān)于nvidia-docker的博客強調(diào)了使用便攜式GPU容器的兩個關(guān)鍵點:
——與驅(qū)動程序無關(guān)的CUDA鏡像
——Docker命令行包裝器,在啟動時將驅(qū)動程序的用戶模式組件和GPU(字符設(shè)備)裝載到容器中。
Nvidia-docker入門
安裝NVIDIA Docker
在安裝nvidia-docker之前更新系統(tǒng)的NVIDIA驅(qū)動程序。另外,確保Docker安裝在系統(tǒng)上。完成之后,請按照此處的安裝說明進行操作(https://nvidia.github.io/nvidia-docker/)。
下一步是測試nvidia-docker:
rtaneja@DGX:~$ nvidia-dockerUsage: docker COMMANDA self-sufficient runtime for containersOptions:--config stringLocation of client config files(default "/home/rtaneja/.docker")-D, --debug Enable debug mode--help Print usage-H, --host list Daemon socket(s) to connect to(default [])-l, --log-level stringSet the logging level("debug", "info", "warn", "error", "fatal") (default "info")--tls Use TLS; implied by --tlsverify--tlscacert stringTrust certs signed only bythisCA(default "/home/rtaneja/.docker/ca.pem")--tlscert stringPath to TLS certificate file(default "/home/rtaneja/.docker/cert.pem")--tlskey stringPath to TLS key file(default "/home/rtaneja/.docker/key.pem")--tlsverify Use TLS and verify the remote-v, --version Print version information and quit
現(xiàn)在,讓我們測試一下,是否可以使用nvidia-docker而不是Docker命令從docker-hub中提取hello-world鏡像:
rtaneja@DGX:~$ nvidia-docker run --rm hello-worldUsing default tag: latestlatest: Pulling from library/hello-world9a0669468bf7: Pull completeDigest: sha256:cf2f6d004a59f7c18ec89df311cf0f6a1c714ec924eebcbfdd759a669b90e711Status: Downloaded newer image for hello-world:latestHello from Docker!
上面的消息顯示安裝正常工作。
開發(fā)GPU應(yīng)用程序
對于CUDA開發(fā),你可以先從Dockerhub提取nvidia / cuda鏡像。
rtaneja@DGX:~$ nvidia-docker run --rm -ti nvidia/cuda:
8.0 nvidia-smi8.0: Pulling from nvidia/cuda
16da43b30d89: Pull complete
1840843dafed: Pull complete
91246eb75b7d: Pull complete
7faa681b41d7: Pull complete
97b84c64d426: Pull complete
ce2347c6d450: Pull complete
f7a91ae8d982: Pull complete
ac4e251ee81e: Pull complete
448244e99652: Pull complete
f69db5193016: Pull complete
Digest: sha256:a73077e90c6c605a495566549791a96a415121c683923b46f782809e3728fb73
Status: Downloaded newer image for nvidia/cuda:8.0
構(gòu)建自己的應(yīng)用
現(xiàn)在,不用從docker命令行運行nvidia-smi,只要啟動一個容器,就可以構(gòu)建一個Docker鏡像并使用CMD運行nvidia-smi。為了構(gòu)建鏡像,Docker從Dockerfile讀取指令并進行組裝和鏡像。Docker hub的Ubuntu 16.04和CUDA 9.0的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
RUN apt-get update && apt-get install -y --no-install-recommends cuda-samples-$CUDA_PKG_VERSION && rm -rf /var/lib/apt/lists/*
# 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 nvidia-smi
#end of Dockerfile
$ docker build -t my-nvidia-smi . # will build an image named my-nvidia-smi and assumes you have Dockerfile in the current directory
$ nvidia-docker images # or docker images will show the nvidia-smi image name
現(xiàn)在,我們準(zhǔn)備執(zhí)行鏡像。 默認情況下,你將看到主機上的所有GPU在容器內(nèi)可見。使用NV_GPU環(huán)境變量,在nvidia-docker中,提供了一個包含所需GPU數(shù)量的容器。 例如,下面的命令將使容器只能看到來自主機的一個GPU:
NV_GPU=1 nvidia-docker run --rm my-nvidia-smi+-----------------------------------------------------------------------------+| NVIDIA-SMI 384.81 Driver Version: 384.81 ||-------------------------------+----------------------+----------------------+| 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:06:00.0 Off | 0 || N/A 37C P0 45W / 300W | 10MiB / 16152MiB | 0% Default |+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+| Processes: GPU Memory|| GPU PID Type Process name Usage ||=============================================================================|| No running processes found |+---------------------------------------------------------------------------+
用于深度學(xué)習(xí)的Nvidia優(yōu)化容器入門
要開始DL開發(fā),你可以從docker集線器中提取nvidia DIGITS容器,并啟動DIGITS Web服務(wù)。下面的命令將主機上的端口8000映射到容器上的端口5000,運行此命令后,你可以訪問http:// localhost:8000上的DIGITS:
nvidia-docker run --name digits -ti -p 8000:5000 nvidia/digits
期待
新版本的nvidia-docker(2.0)項目是基于libnvidia-container的alpha版本發(fā)布的,將來會成為部署GPU容器的首選方式。 現(xiàn)在,你已經(jīng)對部署基于GPU的容器化應(yīng)用程序有了大體了解,Nvidia還通過新發(fā)布的NVIDIA GPU云容器注冊表服務(wù)提供了容器化的易于使用的、全面優(yōu)化的深度學(xué)習(xí)軟件堆棧。
雙12福利預(yù)告:
12月12日,開源云中文社區(qū)將聯(lián)合K8S技術(shù)社區(qū)、EasyStack為國內(nèi)社區(qū)用戶精彩送上“赴美大咖團國內(nèi)首輪直播訪談”,為大家解讀KubeCon北美峰會最新最熱議題內(nèi)容!添加小助手免費報名!返回搜狐,查看更多
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的软件驱动安装在docker_别为Docker本地实现不支持GPU发愁,解决方案在此!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 512G内存卡震撼评测:速度翻倍,数据安
- 下一篇: 内存时序与频率:优化计算机性能的关键