[deep learning]caffe cuda docker 深度學習的第一步
阿新 • • 發佈:2019-01-24
今天很高興,因為經過將近3天的努力,我的深度學習終於邁出了第一步,caffe 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即可。