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

docker本身不支持GPU加速,但是在AIPlanner運(yùn)行環(huán)境下需要GPU加速支持運(yùn)行。
這時候就出現(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,然而這種辦法是很脆弱的。因?yàn)樗拗鳈C(jī)的driver的版本必須完全匹配容器內(nèi)的driver版本,這樣導(dǎo)致docker image無法共享,很可能本地機(jī)器的不一致導(dǎo)致每臺機(jī)器都需要去重復(fù)操作,這很大的違背了docker的設(shè)計之初。
為了使docker image能很便利的使用Nvidia GPU,從而產(chǎn)生了nvidia-docker,由它來制作nvidia driver的image,這就要求在目標(biāo)機(jī)器上啟動container時,確保字符設(shè)備以及驅(qū)動文件已經(jīng)被掛載。
nvidia-docker-plugin是一個docker plugin,被用來幫助我們輕松部署container到GPU混合的環(huán)境下。類似一個守護(hù)進(jìn)程,發(fā)現(xiàn)宿主機(jī)驅(qū)動文件以及GPU 設(shè)備,并且將這些掛載到來自docker守護(hù)進(jìn)程的請求中。以此來支持docker GPU的使用。

必要環(huán)境:

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

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

安裝步驟:

# 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 時,它會默認(rèn)加上--runtime=nvidia參數(shù)。將運(yùn)行時指定為nvidia。
當(dāng)然,為了方便使用,可以直接修改Docker daemon的啟動參數(shù),修改默認(rèn)的運(yùn)行時為nvidia-container-runtime
docker的daemon文件中加入---運(yùn)行時---

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ū)動,因?yàn)橐呀?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(安裝路徑,使用默認(rèn),直接回車就行)
 [ 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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容