NVIDIA-docker容器內(nèi)部調(diào)用GPU加速

docker本身不支持GPU加速悴品,但是在AIPlanner運行環(huán)境下需要GPU加速支持運行。
這時候就出現(xiàn)了 NVIDIA-docker 号阿,docker一般都是使用基于CPU的應(yīng)用争便,而如果是GPU的話怎静,就需要安裝特有的硬件環(huán)境媚污,比如需要安裝nvidia driver舀瓢。所以docker容器并不直接支持Nvidia GPU。為了解決這個問題耗美,最早的處理辦法是在容器內(nèi)部京髓,全部重新安裝nvidia driver航缀,然后通過設(shè)置相應(yīng)的設(shè)備參數(shù)來啟動container,然而這種辦法是很脆弱的堰怨。因為宿主機的driver的版本必須完全匹配容器內(nèi)的driver版本芥玉,這樣導(dǎo)致docker image無法共享,很可能本地機器的不一致導(dǎo)致每臺機器都需要去重復(fù)操作备图,這很大的違背了docker的設(shè)計之初飞傀。
為了使docker image能很便利的使用Nvidia GPU,從而產(chǎn)生了nvidia-docker诬烹,由它來制作nvidia driver的image,這就要求在目標機器上啟動container時弃鸦,確保字符設(shè)備以及驅(qū)動文件已經(jīng)被掛載绞吁。
nvidia-docker-plugin是一個docker plugin,被用來幫助我們輕松部署container到GPU混合的環(huán)境下唬格。類似一個守護進程家破,發(fā)現(xiàn)宿主機驅(qū)動文件以及GPU 設(shè)備,并且將這些掛載到來自docker守護進程的請求中购岗。以此來支持docker GPU的使用汰聋。

必要環(huán)境:

docker
由于nvidia docker是基于docker基礎(chǔ)之上運行的,因此需要安裝原生的docker喊积。

nvidia顯卡驅(qū)動(見底部)
毫無疑問烹困,要想使用GPU,必須要安裝顯卡驅(qū)動乾吻,這樣nvidia docker才能正常運行髓梅。

安裝步驟:

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers  
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  
  
# Add the package repositories  
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \  
  sudo apt-key add -  
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \  
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list  
sudo apt-get update  
  
# Install nvidia-docker2 and reload the Docker daemon configuration  
sudo apt-get install -y nvidia-docker2  
sudo pkill -SIGHUP dockerd  
  
# Test nvidia-smi with the latest official CUDA image  
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi 

但是nvdia-docker的安裝依賴于docker-ce或者docker-ee,所以必須先滿足依賴條件绎签,而且對docker-ce和docker-ee也有版本的要求枯饿。

# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers  
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  
  
# Add the package repositories  
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \  
  sudo apt-key add -  
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \  
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list  
sudo apt-get update  
  
# Install nvidia-docker2 and reload the Docker daemon configuration  
sudo apt-get install -y nvidia-docker2  
sudo pkill -SIGHUP dockerd  
  
# Test nvidia-smi with the latest official CUDA image  
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi  

當(dāng)我們執(zhí)行nvidia-docker create或者nvidia-docker run 時,它會默認加上--runtime=nvidia參數(shù)诡必。將運行時指定為nvidia奢方。
當(dāng)然,為了方便使用爸舒,可以直接修改Docker daemon的啟動參數(shù)蟋字,修改默認的運行時為nvidia-container-runtime
docker的daemon文件中加入---運行時---

cat /etc/docker/daemon.json
{     "default-runtime": "nvidia",     "runtimes": {         "nvidia": {             "path": "/usr/bin/nvidia-container-runtime",             "runtimeArgs": []         }     } }

通過以下方式啟動容器

docker run --rm -it -e NVIDIA_VISIBLE_DEVICES=all ubuntu:18.04
FHGLNZJEyCc4XfAO__thumbnail.png

然后要安裝cuda、cudnn加速碳抄。

附NVIDIA驅(qū)動及cuda愉老、cudnn安裝教程

安裝nvidia驅(qū)動(optinal)
1) cd Downloads/

2) ls
#(NVIDIA-Linux-x86_64–410.57.run #output of ls)

3) chmod +x NVIDIA-Linux-x86_64–410.57.run
#(to get permission to execute the run file)

4) sudo ./NVIDIA-Linux-x86_64–410.57.run --no-x-check

安裝cuda
1 chmod +x cuda_10.0.130_410.48_linux.run
2 ./cuda_10.0.130_410.48_linux.run

是否同意條款,必須同意才能繼續(xù)安裝)
accept/decline/quit: accept

(這里不要安裝驅(qū)動剖效,因為已經(jīng)安裝最新的驅(qū)動了嫉入,否則可能會安裝舊版本的顯卡驅(qū)動焰盗,導(dǎo)致重復(fù)登錄的情況)
Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n

Install the CUDA 10.0 Toolkit?(是否安裝CUDA 10 ,這里必須要安裝)
(y)es/(n)o/(q)uit: y

Enter Toolkit Location(安裝路徑咒林,使用默認熬拒,直接回車就行)
 [ default is /usr/local/cuda-10.0 ]:  

Do you want to install a symbolic link at /usr/local/cuda?(同意創(chuàng)建軟鏈接)
(y)es/(n)o/(q)uit: y

Install the CUDA 10.0 Samples?(不用安裝測試,本身就有了)
(y)es/(n)o/(q)uit: n

Installing the CUDA Toolkit in /usr/local/cuda-10.0 ...(開始安裝)

安裝完成之后垫竞,可以配置他們的環(huán)境變量澎粟,在vim ~/.bashrc的最后加上以下配置信息:

export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}
1
2
3
最后使用命令source ~/.bashrc使它生效。

可以使用命令nvcc -V查看安裝的版本信息:

test@test:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

安裝cudnn

tar -zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz 

解壓之后可以得到以下文件:

cuda/include/cudnn.h
cuda/NVIDIA_SLA_cuDNN_Support.txt
cuda/lib64/libcudnn.so
cuda/lib64/libcudnn.so.7
cuda/lib64/libcudnn.so.7.4.2
cuda/lib64/libcudnn_static.a

使用以下兩條命令復(fù)制這些文件到CUDA目錄下:

sudo cp cuda/lib64/* /usr/local/cuda-10.0/lib64/
sudo cp cuda/include/* /usr/local/cuda-10.0/include/

拷貝完成之后欢瞪,可以使用以下命令查看CUDNN的版本信息:

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末活烙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子遣鼓,更是在濱河造成了極大的恐慌啸盏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骑祟,死亡現(xiàn)場離奇詭異回懦,居然都是意外死亡,警方通過查閱死者的電腦和手機次企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門怯晕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缸棵,你說我怎么就攤上這事舟茶。” “怎么了蛉谜?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵稚晚,是天一觀的道長。 經(jīng)常有香客問我型诚,道長客燕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任狰贯,我火速辦了婚禮也搓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涵紊。我一直安慰自己傍妒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布摸柄。 她就那樣靜靜地躺著颤练,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驱负。 梳的紋絲不亂的頭發(fā)上嗦玖,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天患雇,我揣著相機與錄音,去河邊找鬼宇挫。 笑死苛吱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的器瘪。 我是一名探鬼主播翠储,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼橡疼!你這毒婦竟也來了援所?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤欣除,失蹤者是張志新(化名)和其女友劉穎任斋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耻涛,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年瘟檩,在試婚紗的時候發(fā)現(xiàn)自己被綠了抹缕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡墨辛,死狀恐怖卓研,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睹簇,我是刑警寧澤奏赘,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站太惠,受9級特大地震影響磨淌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凿渊,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一梁只、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧埃脏,春花似錦搪锣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至堵幽,卻和暖如春狗超,著一層夾襖步出監(jiān)牢的瞬間弹澎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工抡谐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留裁奇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓麦撵,卻偏偏與公主長得像刽肠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子免胃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容