(1)安裝nvidia-docker
nvidia-docker其實是docker引擎的一個應用插件,專門面向NVIDIA GPU,因為docker引擎是不支援NVIDIA驅動的,安裝插件後可以在使用者層上直接使用cuda。具體看上圖。這個圖很形象,docker引擎的運作機制也表現出來了,就是在系統核心之上通過cgroup和namespace虛拟出一個容器OS的使用者空間,我不清楚這是否運作在ring0上,但是cuda和應用确實可以使用了(虛拟化的問題,如果關心此類問題可以了解一些關于docker、kvm等等虛拟化的實作方式,目前是系統類比較火熱的話題)
下載下傳rpm包:https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker-1.0.1-1.x86_64.rpm
這裡也可以通過添加apt或者yum sourcelist的方式進行安裝
$ sudo rpm -i nvidia-docker-1.0.1-1.x86_64.rpm && rm nvidia-docker-1.0.1-1.x86_64.rpm
$ sudo systemctl start nvidia-docker
(2)容器測試
我們還需要NVIDIA官方提供的docker容器nvidia/cuda,裡面已經編譯安裝了CUDA和CUDNN,或者直接run,缺少image的會自動pull。
$ docker pull nvidia/cuda

(3)啟動容器測試
nvidia-docker run -v /home/dwai/tensorflow_container/:/tensorflow_container --rm -it nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04 bash
下載下傳了一份darknet的樣例(關于darknet),在不使用GPU的情況下耗時22s,使用GPU的情況下耗時0.04s
修改Makefile,GPU=1,CUDNN=1
#修改cuda路徑
NVCC=/usr/local/cuda-9.0/bin/nvcc #即改為本機CUDA安裝位址
測試:
./detect cfg/yolov3.cfg ../darknet_weights/yolov3.weights data/dog.jpg
效果:
(4)在容器中使用tensorflow-gpu
拉取鏡像
啟動容器
sudo docker run --name=dw_contatiner --runtime=nvidia --privileged=true -v /home/dwai/tensorflow_container/:/tf/tensorflow-tutorials/tensorflow_container -p 8888:8888 -p 5000:5000 -d tensorflow/tensorflow:nightly-gpu-py3-jupyter
進入jupyter
sudo docker exec dw_contatiner jupyter notebook list
輸入密碼:dfc1c647055ec0a17168ac4260efc64fb44cabafe649d188
sess = tf.Session(config= tf.ConfigProto(log_device_placement=True))
使用gpu成功