天天看點

docker中使用gpu(darknet-yolo,tensorflow)

(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      
docker中使用gpu(darknet-yolo,tensorflow)

(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

docker中使用gpu(darknet-yolo,tensorflow)
#修改cuda路徑
NVCC=/usr/local/cuda-9.0/bin/nvcc #即改為本機CUDA安裝位址      

測試:

./detect cfg/yolov3.cfg ../darknet_weights/yolov3.weights data/dog.jpg      

效果:

docker中使用gpu(darknet-yolo,tensorflow)

(4)在容器中使用tensorflow-gpu

拉取鏡像

docker中使用gpu(darknet-yolo,tensorflow)

 啟動容器

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      
docker中使用gpu(darknet-yolo,tensorflow)

 輸入密碼:dfc1c647055ec0a17168ac4260efc64fb44cabafe649d188

sess = tf.Session(config= tf.ConfigProto(log_device_placement=True))      
docker中使用gpu(darknet-yolo,tensorflow)

 使用gpu成功