caffe cuda docker 環境搭建

注意:

在安裝過程中,要時刻提醒自己注意版本的一致性(若不一致,會走很多彎路),包括nvidia driver cuda cudnn 和caffe ,我們需要的版本是: dirver:384以上 cuda:9.0 cudnn:7.0 caffe:1.0

幾個概念

Cuda是nvidia的驅動模塊,用來做gpu併發計算,它提供內核驅動和應用層的工具nvidia-smi;
Cudnn,是nvidia爲深度學習封裝的SDK,提供給那些使用nvidia GPU的應用統一的接口,比如caffe;
那麼,nvidia爲了提供簡易的安裝,對cuda和cudnn都提供了docker的支持,並且不斷的更新維護,

開始

好了,到了我們說說caffe的時候了,Caffe是深度學習的框架,跟tensfllow屬於一個地位的,caffe可以基於cpu/gpu來進行學習計算,那麼,當caffe 使用gpu進行運算的時候,就用到了nvidia的gpu,也就意味着需要用到 cuda和cudnn。當然,cudnn並不是必須的,所以在編譯caffe時,可以enable cudnn,也可以disable cudnn,

OK,我們再來說說caffe的版本維護,它是有BVLC進行維護的,並且BVLC提供docker的版本 BVLC/caffe,到現在,我們搞清楚了前後聯繫,那麼在安裝和參考官方文檔的時候就不會出現邏輯混亂了。

現在,我們來確定我們目標,目標是使用caffe框架進行高效的深度學習開發,這個目標提到高效,那就要用到caffe 的GPU版本,那就要跟nvidia 扯上關係了,Nvidia這個東西挺麻煩,因爲nvidia的驅動與其對應的應用工具都有版本關聯,也就是說,驅動和工具安裝的版本不一致,可能就會有衝突而無法運行,
所以,大前提是,先了解一下本地Host宿主機的GPU型號,驅動版本,以及我們要使用的cuda和cudnn的版本,這些都瞭解清楚了之後,
先要在Host宿主機上安裝nvidia的驅動,
查看GPU型號 nvidia-smi -L

驅動裝完之後,剩下的就是找對docker的版本了,首先得確定docker的版本,這個很重要,由於要使用nvidia-docker 作爲runtime,nvidia-docker 與通用版本的docker是有對應關係的,nvidia只支持穩定版本的docker,詳細參考 https://github.com/NVIDIA/nvidia-docker 中的Quickstart 中的鏈接,可以查看nvidia-docker支持的版本,注意,在安裝cuda這一步是有選擇性的操作,
#Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
運行這個的結果,會安裝最新的nvdia/cuda
那我們需要的是cuda9.0,可以使用下面的命令來代替上面最後這個命令,
sudo docker run --rm --runtime=nvidia nvidia/cuda:9.0-cudnn7-devel nvcc --version

這樣,獲取cuda9.0和cudnn7.0 到此OK了,在獲取cuda相關版本的時候,我不得不提一下 nvidia 對cuda docker的官方支持,
https://hub.docker.com/r/nvidia/cuda/
在這個上面,有我們需要的最新的所有cuda和cudnn的版本。

接下來,我們需要的就是caffe了,同樣,我們需要安裝的是caffe docker鏡像,我們的caffe需要運行在我們剛剛安裝好的cuda9.0和cudnn7.0之上,而caffe的官方入口是
http://caffe.berkeleyvision.org/installation.html,
通過這個入口,我們可以最終確定caffe docker的入口
https://github.com/BVLC/caffe/tree/master/docker
對,就是這個由BVLC/caffe維護的版本,
這個上面的README 給了我們主要的參考流程,但是我們還不能直接使用,看看GPU版本的Dockerfile,我們會發現它對應的是cuda8.0的版本,
我們要使用cuda9.0來重新build一個鏡像,在新build鏡像時,首先需要確定基礎鏡像,在Dockerfile中把FROM對應的版本信息改成我們需要的,
FROM nvidia/cuda:9.0-cudnn7-devel-ubuntu16.04

接下來是另一個重頭戲,編譯caffe,官網上編譯指導文檔
http://caffe.berkeleyvision.org/installation.html#compilation
我們選擇使用Make進行編譯,所以,需要重新修改
Makefile.config
比如
USE_CUDNN := 1
USE_NCCL := 1
以及一些依賴庫,報錯什麼依賴沒找到就往上添加什麼庫,
在做make caffe 的時候,
只需要make all 和 make test 即可,
不用使用 make runtest(提示找不到)
make pycaffe 這個是需要單獨編譯的,也需要加上,

至此,Dockerfile修改完成,

最後,就是創建新鏡像環節,這裏還是需要注意一下的,
因爲在新build的過程中,需要gpu庫,所以必須使用nvidia-docker進行build,
sudo nvidia-docker build --rm -t rainbow/caffe:cuda9-cudnn7 .
然後就是
等待,等待。。。
祈禱吧。。。Amen

不需要安裝caffe,因爲在應用時一般都是在用pycaffe,所以只需要編 譯好後製定PYTHONPATH即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章