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
然后要安裝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