天天看點

Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 & 編譯八、Cifar10資料集測試九、使用Pycaffe

Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記

一、Ubuntu 安裝

    安裝Ubuntu 15.04x64 + Win7x64 雙系統,讓二者在啟動引導上互相隔離, 删除Ubuntu時不至Win7躺槍,就必須講究安裝方法。

    最easy的就是使用EasyBCD安裝。這可以将Ubuntu的啟動引導(Grub2)安裝在其自己的boot分區,而Win7的啟動引導則安裝在C槽或其保留分區,互相隔離,不存在用Ubuntu引導Win7啟動的問題,重裝和解除安裝互不影響。這個政策非常幹淨。

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    那麼,問題來了,如果你主機闆比較新,使用的是 "UFEI啟動 + GPT磁盤" 這個組合,那麼使用EasyBCD就有問題,如下所述.

     問題始于,萬惡的windows推出一個稱之為UFEI的東東,美其名曰:大一統安全啟動引導接口!!此接口位于主機闆和系統之間,用于啟動時進行軟硬體對接,即在主機闆上加載系統核心,以及向系統核心注冊硬體。電腦一啟動,作業系統必須向主機闆出示一個安全密鑰,主機闆才會加載這個系統,可用于杜絕boot病毒,從Win8開始這個标準開始執行。。。 然就坑了Ubuntu等一大批Linux系統,因為這些系統必須向MS購買密鑰。。。但是!!為了防止被訴壟斷,微軟要求所有主機闆廠商必須在提供UFEI的同時,以這樣或那樣的方式提供傳統的BISO啟動。。。微軟關上了一扇門,上帝打開了一扇窗 .,美帝的反壟斷大法果然強。。。

    是以,新型的主機闆上一般都能找到禁止UFEI,以及打開BIOS的辦法,各家主機闆不一樣。

    啟動方式: UFEI  or  Legacy BIOS

    不用UFEI的原因是,EasyBCD 2.3 目前還無法在ufei中注入Ubuntu的grub2啟動,是以在UFEI引導下安裝的Win7,當安裝完EasyBCD後,軟體會提示:注意到你正在使用ufei,EasyBCD的許多特性都無法使用!而屏蔽ufei,在BIOS下重裝win7之後,EasyBCD一切正常。這樣後面安裝ubuntu時,EasyBCD才能在其boot分區上注入grub2啟動引導程式。  

....不用UFEI的另一個好處時,不會在Win7的保留分區内額外生成一個ufei檔案夾,進而可以用DsikGenius為win7的這個保留分區配置設定盤符使其可見,激活win7就十分Easy了....

....若非要用ufei就要用其他方式解決雙系統隔離的問題,但百度之後發現都比較繁瑣 。

關掉UFEI的辦法看主機闆什麼類型,我的華碩Z170-AR/-P,進入進階設定,啟動頁面,打開CMOS選項設定為僅Legacy,打開安全選項設定作業系統為others。

....重新開機,插啟動U盤,啟動選項裡面徹底不見了UFEI字樣,,說明UFEI被成功屏蔽!!

....裝完Win7之後,用DiskGnius檢視隐藏分區,其中無ufei檔案夾,隻有boot檔案夾,OK!    

    分區表類型:  GPT or  MBR

....GPT可以管理大于1.8T以上的磁盤,MBR不行,是以單盤超限的另尋解決辦法。

用Win7CD光牒在裸機上裝完系統之後,啟動方式+分區表 被預設處理為 UFEI+GPT 這樣的組合。可以用Diskgnis檢視Win7隐藏分區,隐藏分區中有個ufei檔案夾,然後點各個磁盤檢視資訊,分區表類型都為GPT,這說明是UFEI+GPT的組合。

....進入按上步用BIOS安裝的Win7之後,打開DiskGnius可轉換各GPT盤為MBR盤。但注意:不能直接轉換系統所在的C槽,因為會導緻系統引導丢失,還有可能整壞硬碟。解決辦法是“騰籠換鳥”,在另一個已經轉換為MBR的空閑盤上用硬碟安裝的方式先安裝一個Win7上去,然後重新開機進入這個新系統;再用DISK轉換原來的系統C槽為MBR,再用硬碟安裝方法在C槽裝上Win7,裝完之後進入C槽Win7,删掉掉剛才空閑盤的那個臨時Win7即可。。。 

....好消息是:在非系統盤上用DISK轉換GPT為MBR時,不會格式化磁盤,是以資料仍然在

....之是以要轉換成MBR是因為裝Ubuntu出問題,啥問題忘了,不轉換應該也有解決辦法。。

  OK! 這樣就得到了 BIOS啟動 + MBR磁盤 + Win7×64系統 的經典組合!!可以開始安裝 Ubuntu了。。。。。

   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    下載下傳Ubuntu 15.04 64位

    下載下傳UltraISO制作啟動U盤 

    在Win7某盤下壓縮出 300G~500G 空間,不建立分區、使其空閑

    重新開機進入BIOS,選擇U盤啟動

    開始安裝》》。。。

    分區:/ 90G~120G , /boot  200M~400M , swap 記憶體大小左右 ,/home 剩餘

    分區順序按此方式、且全部設定為邏輯分區,其他方式也可但發現容易出問題........

    注意::分區完成之後,安裝開始之前,切記要在下方的啟動器安裝選項(boot installer)上,手動選擇,将啟動器安裝到你的上述boot分區中,否則預設的話就是用ubuntu引導win7了

....另外::若需重裝ubuntu的時候,要進入Win7重新删除四個分區,格式化該盤,使其空閑。進入安裝界面後,還要改變上述分區的相對大小,不然ubuntu會一直卡在creating ext4 ... 安裝不下去。

....另外::若上述辦法還是繼續卡在creating ext4上,則在Win7下重新格式化該區,并預先分好4個區的大小,進入Ubuntu安裝界面後,将四個對應分區挂載上去即可,可順利安裝......

....另外::重裝Ubuntu之後,進入Win7,用EasyBCD删掉上次的grub2啟動,重建立一個即可

....但是::這樣還是有可能會碰到安裝進度條卡在 creating etx4...這裡,百度了好久沒找到辦法,我在這都卡瘋了。看到的有解決辦法,還請留言分享下啊*&……*&*&

    最好選擇英文安裝,友善安裝caffe相關軟體時路徑全英文,進入之後再安裝中文包和fcitx中文輸入法....

    最好斷開網絡安裝,否則會下載下傳語言包和更新/.///

    等待安裝完成,系統提示:重新開機電腦

    重新開機之後會直接進入Win7,這時打開EasyBCD,在剛才的boot目錄上添加linux的gub2啟動。

    OK !! 

    重新開機之後,界面出現系統選擇 .........  進入ubuntu ..................

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    進入系統之後,

    打開終端,右擊桌面,

    設定root使用者密碼,sudo passward

    修改apt-get源為阿裡雲,sudo gedit /etc/apt/sources.list

    遇到自動推送的系統更新,不要同意,也不要不同意,直接x掉!

    語言設定中安裝中文包,自帶fcitx拼音輸入法

    注意不要用中文替換原英文檔案夾,

    開始caffe安裝 。。。

二、CUDA 安裝

CUDA 安裝會出各種奇妙問題,顯示卡、系統各不一樣,是以雖然問題的表現形式一樣,但解決辦法可能不一樣,因為驅動跟硬體緊密相關,在軟體層面很難統一解決,是以多百度幾種方法試吧。。。 CUDA的官方安裝文檔,小白的一大原罪就是不喜官方資料,想偷懶結果還繞了個大彎……*&*%!!!

2.1 關閉xWindow,開啟tty1

安裝cuda的同時會安裝顯示卡驅動,是以要進入ubuntu的純字元界面才行 。 方法是 ctrl + alt + F1 進入tty1,登入, 輸入init 3,進入純字元界面。 可以按ctrl+alt+F7驗證,無法傳回xWindow了,說明關閉成功。 再次 ctrl + alt + F1 傳回tty1。 輸入startx ,  會再次恢複啟動xWinow。 ctrl+atl +f7 即可進入。 如果 init 3 & startx 不行,可以用 sudo service lightdm start/stop 指令。 如果中間哪一步卡住了,強制重新開機,再試一次,仍然不行說明有問題。 注意,關閉xWindow後,切換到xWin時應該隻顯示一行219的版本号,沒有[ok]start lightdm maneger之類的。 否則,後續安裝會有錯誤。 —————————————————————— 如果上面這個操作,完全沒問題,OK,可以開始CUDA安裝了 —————————————————————— 但我這遇到問題:  安裝cuda前,進入tty1黑屏,傳回xWindow正常. 。。。 安裝cuda後,登陸xWindow異常,進入tty1正常 。 。。 安裝cuda中,爆出“ Error: can't xxx kernel xxx ”。。。           方法一:網上有用sudo stop lightdm關閉xWindow的,但是需要自己生成和修改xorg檔案,ubuntu15.04安裝完預設是沒有這玩意的。參考好多部落格後,沒弄成,非常不适合linux新手。          方法二:還有用stop gdm的,gdm是相對于lightdm的另一套xWindow,現在不流行了,是以預設沒安裝上,需要自己 apt-get install gdm,然後從lightdm切換到gdm。在gdm下可用sudo  gdm stop, 來關閉xWIndow。這個的好處是不用修改xorg檔案。但這個也有點問題,忘了。          方法三:浪費一天google來的,非常簡單,原文中這個辦法用來解決“裝完nvidia驅動,重新開機後卡在登陸界面,無法進入xWindow”這個問題的。在我這是被用來解決“裝nvidia驅動或cuda前,進入tty1黑屏”這個問題。 方法流程如下:

cd /etc/default
sudo cp grub grub.bk  #備份
sudo gedit grub
GRUB_CMDLINE_LINUX="nomodeset" #修改
sudo update-grub  #更新grub
sudo reboot  #重新開機
           

重新開機之後,發現桌面分辨率掉到渣,說明奏效了。。 先登陸 xWindow, 嘗試切換到 tty1,果然成功刷出登陸提示,tty1黑屏的問題解決! 可以驗證下, xWindow 和 tty1 是否可毫無障礙的 反複自由 切換。。。驗證OK! 接下來就可關閉xWindow,隻使用tty1了。 登陸tty1→輸入 init 3 /或者 sudo service lightdm stop→xWindow被關閉,→可能會卡屏,ctr+alt+f1 就可以了。。 可以驗證下, ctr+alt+f7 打開xWindow 失效,顯示且隻顯示一個版本号 。。。驗證OK! 可以安裝cuda了 !!!

方法四: 本文是單顯示卡titanx,按方法三第一天裝完cuda正常,裝opencv時出問題,是以第二天重裝按方法三再整,結果出了新問題 。安裝完cuda後,無法正常登陸xWindow,隻能進入tty1。 重新整了好多次無果! 最後在cuda的官方安裝教程中,發現方法四~~~終于成功~~~ 操作如下: #打開終端

lsmod | grep nouveau        #驗證 有輸出說明noveau驅動正常
cd /etc/modprobe.d
sudo gedit balcklist-nouveau  #寫入以下2句儲存
blacklist nouveau
options nouveau modset=0
sudo update-initramfs -u    #更新init
sudo reboot                 #重新開機,發現分辨率掉渣
lsmod | grep nouveau        #驗證,無輸出說明屏蔽noveau成功
           

此時再次嘗試,進入tty1,無黑屏bug。再傳回xWindow,也無障礙。 

在tty1下,sudo service lightdm stop.  → xWindow被關閉!

可以驗證,ctr+alt+f7傳回xWindow時,隻顯示一版本号。 

在tty1下, sudo service lightdm start.  → 打開xWindow成功!

可以驗證,ctrl+alt+f7成功傳回xWindow.

再重新開機後,仍可循環切換,完美關閉或打開xWindow。   

說明終于完美實作了 字元終端和圖形終端的切換。

開始安裝cuda~~~~~~~ 

方法五:本文另一桌上型電腦,GTX970單顯示卡,按照上述方法三和方法四安裝cuda,安裝之前能正常切換tty1和xWindow。 但是,安裝之後,竟然就進不去xWindow了,一直卡在登陸界面,輸入密碼死循環!!而在安裝過程中曾爆出一個“ Error: can't return kernel xxx” ,據查,這個是安裝驅動的時候需要linux 核心參與編譯。在tty1下驗證顯示卡驅動是否存在,ls /proc/drivers/nvidia, 無任何輸出,說明顯示卡驅動确實沒寫進去。 最後的解決辦法如下:

1.完全重裝ubuntu15.04

2.未降級gcc/g++-4.9到gcc/g++-4.7

   (這個是導緻産生kernel錯誤的原因。)

3.未更換阿裡源,使用系統自帶的apt源。

  (這個估計更換後無影響,因為我後面安裝opencv時為加快速度,還是換成阿裡源了)

  (cuda安裝過程中會自動驗證kernel的版本資訊,阿裡源隻是原生源的鏡像,差異有一點點,但kernel-header應該是一緻的,另一台titanx的就在阿裡源下安裝的cuda).

4.彈出系統更新提示時,不要接受,也不要拒絕,直接x掉。 

  據我推斷,接受更新肯定會修改核心,但拒絕更新坑能也會!!。 (最有可能是這個原因)

5.官方安裝指導的 pre-installation中,需要驗證系統類型x86_64,以及更新kernel-header,這些都沒做。

  因為ubuntu15.04_x86_64安裝完,預設是最新的kernel-header.

6.按方法三,修改GRUB_CMDLINE_LINUX="nomodeset",并sudo update-grub,再重新開機!

7.分辨率掉渣,進入tty1, sudo service lightdm stop 關閉xWindow. 

  注意驗證下,傳回xWindow時,顯示且僅顯示一行219版本号,說明才是徹底關閉了。

8.開始安裝cuda。

終于進入油意義的第一步!!  ----------------------

2.2 安裝cuda 7.5

預先下載下傳并拷貝cuda7.5_linux_64_.deb安裝包到home下。 關于是否要先獨立安裝nvidia驅動的問題,本人嘗試幾次重裝都失敗了,無法打開核心什麼的。。 是以直接cuda走起,安裝cuda的時候會自動安裝驅動。。。        安裝過程中要編譯,是以先對gcc和g++進行降級,至-4.7版本。 後面安裝各種包都要用到gcc, 是以一開始降級可讓全部軟體包的安裝都比較一緻。降級方法參見歐新宇。

進入tty1,關閉xWindow,開始安裝

cd ~
sudo dpkg -i install cuda---x-x-x.deb
sudo apt-get update
sudo apt-get install -y cuda 
           

等待安裝完成 》》》》 注意:安裝的過程中,可能會刷出ERROR,解除安裝掉或重裝來過......  重新開機:sudo reboot!

配置cuda bin & lib 目錄

cd /etc
sudo gedit profile   #寫入以下2句儲存
PATH=/usr/local/cuda/bin:$PATH  
export PATH
source /etc/profile #立即生效
           
cd /etc/ld.so.conf.d
ls
sudo cp xxx.conf  cuda.conf   #xxx替換成ls出的随便哪個檔案
sudo gedit cuda.conf          #編輯
/usr/local/cuda/lib64         #寫入并儲存
sudo ldconfig -v              #立即生效
nvcc --version                #驗證
           

注意:此處可先重新開機電腦,不重新開機就要在這個終端内繼續,不更換新的終端視窗。 因為上面的立即生效是針對目前終端這個shell的,不是整個系統,隻有重新開機才能應用到整個系統。 可以驗證,在不重新開機時,另開一終端,nvcc --version 是無輸出的。

2.3 安裝cuda sample

cd /usr/local/cuda/samples
sudo make all -j8                #編譯
cd ./bin/x86_64/linux/release    #驗證
./deviceQuery                    #刷出顯示卡資訊 則成功
           

2.4 安裝cudnn-v4

由于是cuda7.5 是以安裝 cudnn-v4.0比較好 下載下傳 cudnn-7.0-linux-x64-v4.0-prod.tgz 放到home下

tar zxvf cudnn-7.0-linux-x86-v4.0-prod.taz  
sudo cp include/cudnn.h /usr/local/include
sudo cp lib64/libcudnn.* /usr/local/lib
sudo ln -sf /usr/local/lib/libcudnn.so.7.0.64 /usr/local/lib/libcudnn.so.7.0   #建立連結
sudo ln -sf /usr/local/lib/libcudnn.so.7.0 /usr/local/lib/libcudnn.so
sudo ldconfig -v
           

重新開機 .......

三、Matlab 安裝

Matlab安裝簡單,參見歐新宇。

注意拷貝matlab至home檔案夾時,使用歐的挂在方法,sudo cp 之後,安裝時出現權限不足,且無法更改?

網上找的連結: http://pan.baidu.com/s/1c0jaEek 密碼: cjvg

安裝完成之後,Home下的Matlab檔案夾即可删除。

四、BLAS 安裝

BLAS可選MKL和altas,安裝簡單。 mkl-2016下載下傳和安裝參見歐新宇。 注意mkl隻能安裝一次!! 如果沒有mkl,就安裝預設的 altas !  本文前後2台電腦,分别安裝了mkl 和 altas,都OK!.  後面都以安裝altas的電腦為例:

sudo apt-get install libatlas-base-dev
           

五、OpenCV安裝

OpenCV大部分使用 Install_OpenCV_Master這個方法,但這個安裝過程比較混亂,可以打開安裝腳本看看, 各種依賴包裝了卸、卸了裝,反反複複好幾次,而且裝完之後與ffmpeg這個包有關的地方全部報錯,導緻OpenCV安裝不完整,後面的caffe編譯也出錯!! 坑了2天終于找到了救星>>>>>  xuezhisdc. 在Home下建立檔案夾OpenCV,再于其中建立5個sh文檔, 拷貝救星給出的各個shell到這幾個文檔中儲存。 安裝過程中把OpenCV拷貝到 /usr/local目錄下,(與cuda和matlab看齊,好看好管理×××),,        本文是cuda7.5,是以使用比較新的 opencv3.0與之搭配,不容易出莫名奇妙的bug,3.0的shell可仿照2.4.11那個改一下××××         依次運作 1 2 3 4 5 五個shell ........直到安裝完成,且無bug報錯!         注意:安裝過程全程聯網,而且網速不能太慢,否則下載下傳的包會有損失。  本文安裝過程中,下載下傳的 3rdparty中的ICV元件始終報錯!! MD5不比對!! 最後打開腳本檔案找到下載下傳位址,手動下載下傳ICV後放到對應目錄下。。。終于通過!! 出錯後,可以重新來過,會覆寫掉前次的,我安裝了好幾次~~ 腳本安裝和編譯的好處就在于,碰到問題立馬停止,能精準定位錯誤源~~~~~ 是以出錯之後,可研究下 Error Information ~~~~~~~

六、Python安裝

安裝Pyhton主要是為caffe的pycaffe接口提供一個python環境。

Python被其他軟體廣泛依賴,在安裝這些軟體的時候可能已經安裝過了,而且同一個包的版本還不太一緻。 ---------------這導緻非常混亂----------比如,: 安裝前面 opencv的時候就需要 numpy 和 scipy,在那裡已經安裝過了! 但安裝此處的Python環境的時候,會再被安裝一次! 然後面安裝caffe的時候,還會被再安裝一次! 好多cafee安裝教程上都是裝了又裝,不知道多少次。。 --------------------------------------------- 但幸好,Ubuntu 的 apt-get 能夠自動管理各種版本,以及依賴關系,方法是檢查版本号,若最新則跳過!! “xxx is already the newest version” 但盡管如此,caffe官方還是裂牆推薦 :Python包管理神器----> Anaconda !!! 本文在2台電腦上試了下2種方案都可通過。。

6.1  Anaconda 方案

下載下傳  Anaconda2-4.1.0-Linux-x86_64.sh Anaconda很多博文都安裝在/Home/usrname目錄下,這樣吧/目錄的空間都浪費了,是以本文安裝到/usr/local 這與 Matlab / CUDA / OpenCV 保持風格一緻,比較賞心悅目。。 用Chrome下載下傳Ananconda,放到/home下,開始安裝。

python --version                               #驗證下原生python版本   
md5sum Anaconda2-4.1.0-Linux-x86_64.sh         #驗證md5
sudo bash Anaconda2-4.1.0-Linux-x86_64.sh      #安裝
           

安裝中間,會提示是否安裝在/home/xx/ananconda2目錄下,或于下方輸入自定義路徑,輸入:/usr/local/Anaconda 安裝末尾,會提示是否在 /home/xx/.bashrc 中建立bin目錄,yes!

安裝之後,開始配置Anacoda的路徑。 

在全局變量中配置其lib&bin路徑!

sudo gedit /etc/profile
export PATH=/usr/local/anaconda2/bin:$PATH"     #寫入并儲存
source /etc/profile           #立即生效

sudo gedit /etc/ld.so.conf
/usr/local/anaconda2/lib      #追加一行,寫入此路徑,并儲存
sudo ldconfig -v              #立即生效

cd ~                          #xx使用者目錄
sudo gedit .bashrc            #找到anconda寫在此檔案最後的路徑,并拷貝。
sudo su                       #擷取root權限
cd ~                          #root使用者目錄
sudo gedit .bashrc            #将剛才拷貝的路徑,添加到最後儲存
           

conda --version                                 # 驗證

conda list                                          # 列出 conda安裝的所有Python包

python --version                               # conda-python 生效 ,原生的Python被屏蔽

重新開機,使路徑完全生效....

6.2 原生Python方案

也可使用原生Python方案,再繼續往Unbuntu的python中添加三方包就可以,如下

sudo apt-get install -y python-numpy python-scipy python-matplotlib python-sklearn python-skimage python-h5py python-protobuf python-leveldb python-networkx python-nose python-pandas python-gflags cython ipython
           

安裝過程中,大部分都會提示 “scuceessfly installing xxx....”, 

python-pandas 貌似有個小錯,沒管了。。。直接繼續後面,貌似不影響!

七、安裝google-glog

這個簡單,參見歐新宇

八、安裝 其他依賴項

這裡主要是caffe用到的9個小軟體:  protobuf  leveldb  lmdb snappy opencv boost hdf5 gflag google-glog  好多博文在最最開始就安裝這些小軟體,流程比較混亂,建議放在大塊頭後面安裝,流程比較清晰。

sudo apt-get install -y build-essential  # basic requirement  
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler #caffe  requirment
           

九、Caffe 安裝 & 編譯

Caffe下載下傳,解壓至Home目錄下。

如本文目錄為:/home/xx/caffe-master 。

xx為使用者名,home目錄預設是目前使用者的家目錄,是以中間是有使用者名的。

進入caffe-master, 右擊,在T終端中打開檔案夾,然後 pwd指令 ,可以檢視目前完整目錄。

配置各種路徑的時候,最友善是這個辦法,直接滑鼠找到檔案夾,右擊在T終端中打開,pwd 出目前目錄,複制之!!        

9.1 安裝pycaffe的依賴包

若在6.2中,使用原生Python安裝的

進入根目錄的 python檔案夾,打開終端執行:

pip --version                           #驗證pip是否已經安裝,預設是沒有的
sudo apt-get install pip                #安裝
cd /home/xx/caffe-master/python
for req in $(cat requirements.txt); do pip install $req; done
           

可打開 python/requirements.txt , 裡面絕大部分依賴包其實與上面6.2中是重複的。 直接覆寫安裝,pip 會自動處理,已經安裝的隻是驗證版本号,并更新!

若在6.2中,使用Anaconda方案的

事實上,requirements.txt中的絕大部分包,已經在Anaconda中了,可如下驗證

conda list | grep xxx
           

xxx取requirements.txt中每一行包名字的幾個連續字元,注意要小寫,比如cython, num, level,gfl等等

經過驗證,發現隻有 leveldeb 和 python-gflags 等3個無輸出,說明沒安裝。

此時建立一個txt,如req.txt,将requirements.txt 中的内容拷貝進去,别的全删,隻留下上面3個無輸出的。

然後執行如下:

sudo su                                                   # 必須切換至root
cd /home/xx/caffe-master/python
for req in $(cat req.txt); do pip install $req; done      #用req.txt替換requirements.tx
           

**** 注意,本文是将anaconda安裝到了usr/local 下,目前使用者是無法更改Anacoda的。 **** 是以隻要涉及到anaconda的寫入和删除都需要root權限,或者sudo執行,此處sudo不合文法,隻能root. **** 安裝中,pip 會在 Anacoda的sit-package檔案夾中寫入第三方Python包。

當然,如果不想這麼麻煩,則無需驗證,直接執行如下,已安裝的會被跳過。

sudo su  #切換至root
cd /home/xx/caffe-master/python
for req in $(cat requirements.txt); do pip install $req; done
           

可見,Anaconda 可以更靈活更完備的處理Python的各種版本,以及各種包,這就是caffe列強推薦的原因。 建議使用Anaconda,越到後面越友善,而且理得清。

9.2 配置Makefile.config

此檔案中全部都是關于 CUDA  cudnn  BLAS Matlab  python  hdf5  opencv 這7個部分的路徑資訊。

--------------------------------------------------------

那我麼先檢查下這些軟體都安裝在啥地方。。

CUDA 預設安裝,位于/usr/local/cuda-7.5   /usr/local/cuda是其連結

Matlab 預設安裝,位于/usr/local/MATLAB/R2014a

BLAS 預設安裝,mkl位于/opt/intel,altas default        

hdf5 預設安裝,位于/usr/lib/x86_64-linux-gnu/

OpenCV 預設安裝,位于usr/local下

注意OpenCV被打散在 usr/local/include/xxx.h  /usr/local/lib/xxx.lib  /usr/share/opencv/samples這三個目錄下

Python  

如果不用anaconda則是系統預設自帶,目錄到處都有,不用管了。。

如果是Ananconda 則在這個檔案夾下,/usr/local/ananconda2/lib  /usr/local/anaconda2/bin

前面每步在安裝完上述軟體後,已經對其路徑資訊進行了配置,在以下3個檔案中

/etc/ld.so.conf.d   /etc/ld.so.conf   /etc/profile 

 -----------------------------------------------------------------------

現在即可按照上述資訊配置Makefile.config

cd ~/caffer-master
sudo  cp   Makefile.config.example   Makefile.config
sudo gedit Makefile.config
           

1. 去注釋    USE_CUDNN=1 2. 加注釋   # CPU_ONLY:=1 3. 修改BLAS    BLAS = altas & mkl(maybe) 4. 配置 python & matlab

## 原生python
PYTHON_LIB :=/usr/local/lib            #原生python選擇 
PYTHON_INCLUDE := xxxxx                #原生python預設 
## Ananconda
# 先注釋掉原生python路徑
AanacondaHome=/usr/local/ananconda2  # path to your anaconda
PYTHON_LIB :=$(AanacondaHome)/lib 
PYTHON_INCLUDE := $(AnacondaHome)/xxxx #預設,但注意把Anaconda三行的注釋符#全去掉,否則編譯caffe報錯找不到Python.h
MATLAB_DIR :=/usr/local/MATLAB/R2014a
           

5. 補充hdf5路徑,紅色  # what ever else you find, you can add it to here ---------  INCLUDE_DIRS := $(PYTHON_INCLUDE)   /usr/local/include  /usr/lib/x86_64-linux-gnu/hdf5/serial/include

LIBRARY_DIRS := $(PYTHON_LIB)   /usr/local/lib   /usr/lib   /usr/lib/x86_64-linux-gnu/hdf5/serial     

6. 啟用OpenCV3.0.0    

去注釋:OPENCV_VERSION=3

lib&bin路徑已經在上面5.中做了配置:usr/local/include  & usr/local/lib

使用OpenCV3.x需要額外修改 Makefile檔案,現在版本的caffe已經對Makefile做了修改,是以不用手動修改也可。

在Makefile檔案中查找“Derive include and lib directories”一節,

修改“LIBRARIES +=”的最後一行,增加 opencv_imgcodecs,

修改之後為: LIBRARIES += opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

最終的完整Makefile.config如下>>>>

## Refer to http://caffe.berkeleyvision.org/installation.html
# Contributions simplifying and improving our build system are welcome!

# cuDNN acceleration switch (uncomment to build with cuDNN).
USE_CUDNN := 1

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1

# uncomment to disable IO dependencies and corresponding data layers
# USE_OPENCV := 0
# USE_LEVELDB := 0
# USE_LMDB := 0

# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
#	You should not set this flag if you will be reading LMDBs with any
#	possibility of simultaneous read and write
# ALLOW_LMDB_NOLOCK := 1

# Uncomment if you're using OpenCV 3
OPENCV_VERSION := 3

# To customize your choice of compiler, uncomment and set the following.
# N.B. the default for Linux is g++ and the default for OSX is clang++
# CUSTOM_CXX := g++

# CUDA directory contains bin/ and lib/ directories that we need.
CUDA_DIR := /usr/local/cuda

# CUDA architecture setting: going with all of them.
# For CUDA < 6.0, comment the *_50 lines for compatibility.
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
		-gencode arch=compute_20,code=sm_21 \
		-gencode arch=compute_30,code=sm_30 \
		-gencode arch=compute_35,code=sm_35 \
		-gencode arch=compute_50,code=sm_50 \
		-gencode arch=compute_50,code=compute_50

# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := atlas
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
# BLAS_INCLUDE := /path/to/your/blas
# BLAS_LIB := /path/to/your/blas


# This is required only if you will compile the matlab interface.
# MATLAB directory should contain the mex binary in /bin.
MATLAB_DIR := /usr/local/MATLAB/R2014a


# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
# Anaconda Python distribution is quite popular. Include path:
# Verify anaconda location, sometimes it's in root.
ANACONDA_HOME := /usr/local/anaconda2
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
		  $(ANACONDA_HOME)/include/python2.7 \
		  $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include \

# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := $(ANACONDA_HOME)/lib

# Uncomment to support layers written in Python (will link against Python libs)
# WITH_PYTHON_LAYER := 1

# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial


# Uncomment to use `pkg-config` to specify OpenCV library paths.
# (Usually not necessary -- OpenCV libraries are normally installed in one of the above $LIBRARY_DIRS.)
# USE_PKG_CONFIG := 1

# N.B. both build and distribute dirs are cleared on `make clean`
BUILD_DIR := build
DISTRIBUTE_DIR := distribute

# Uncomment for debugging. Does not work on OSX due to https://github.com/BVLC/caffe/issues/171
# DEBUG := 1

# The ID of the GPU that 'make runtest' will use to run unit tests.
TEST_GPUID := 0

# enable pretty build (comment to see full commands)
Q ?= @
           

7.3  編譯caffe

make all -j8
make test -j8
make runtest -j8
           

7.4 編譯pycaffe & matcaffe

make pycaffe -j8
make matcaffe -j8
make destribution  #釋出,可不執行
           

編譯完成之後,需設定python環境變量,将caffe配置為Python或Anaconda的一個包。

辦法是将caffe/python路徑,或者caffe/destribution/python路徑添加到python環境變量中.

下面的路徑隻添加一個,本文用destribution這個

sudo gedit /etc/profile 
#PYTHONPATH=/home/xx/caffe-master/python:$PYTHONPATH              #寫入,2選1
PYTHONPATH=/home/xx/caffe-master/destribution/python:$PYTHONPATH  #寫入,2選1
export PYTHONPATH
           

最後的profile如下:

#接上原有文本#

#CUDA
PATH=/usr/local/cuda/bin:$PATH
export PATH

#Anaconda
export PATH="/usr/local/anaconda2/bin:$PATH"

#Caffe
#LD_LIBRARY_PATH=/home/xx/caffe-master/build/lib:$LD_LIBRARY_PATH
LD_LIBRARY_PATH=/home/xx/caffe-master/distribute/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH


#Pycaffe
#PYTHONPATH=/home/xx/caffe-master/python:$PYTHONPATH
PYTHONPATH=/home/xx/caffe-master/distribute/python:$PYTHONPATH
export PYTHONPATH

#Matcaffe
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOAD
export LD_PRELOAD
           

→→ 測試matcaffe

運作 caffe-master/matlab/demo/classification_demo.m 

需要提前下載下傳個berkely.caffemodel到caffe-master/models的對應檔案夾下。

刷出一連串得分數字,顯示測試成功!

*******補充!如果在運作classcifcation_demo時出錯:

Invalid mex: xxxxxxxx “libstdc++ , GLIBCXX-versionxxx不存在”  xxxxxxx

則是因為matlab自帶的gcc版本較低,而編譯matcaffe并生成caffe_.mexa64時的gcc版本較高,

進而編譯時标準c++庫和運作時标準c++庫不一緻,導緻的。 

辦法是添加路徑,讓matlab運作時引用系統gcc,而非自帶gcc。

修改方法:

sudo gedit /etc/profile

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:$LD_PRELOAD   #加入此句 儲存

source /etc/profile

然後在此終端視窗内,打開matlab,運作其demo,則錯誤消失。

或者重新開機,讓預加載路徑徹底生效,打開matlab,運作demo,錯誤消失。

Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 &amp; 編譯八、Cifar10資料集測試九、使用Pycaffe
Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 &amp; 編譯八、Cifar10資料集測試九、使用Pycaffe

→→ 測試pycaffe

在Python中導入caffe,進行驗證。

現在可以看到 Python 2.7成為Ananconda下的一個包,caffe又成為Python的一個包。

Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 &amp; 編譯八、Cifar10資料集測試九、使用Pycaffe

八、Cifar10資料集測試

cd ~
cd caffe-master
sh data/cifar/get_cifar10_data.sh           #擷取源資料
sh examples/cifar/creat_cifar10_data.sh     #建立LevelDB
sh examples/cifar/train_quick.sh            #訓練
           
Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 &amp; 編譯八、Cifar10資料集測試九、使用Pycaffe

九、使用Pycaffe

第7步,導入caffe.draw時,出錯,百度下原因是缺了2個python包。pydot & graphviz 。 在原生python中,安裝如→XXX 在Anaconda中安裝如下: 由于此處sudo指令不合文法,隻能使用root權限,安裝指令如圖:

Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 &amp; 編譯八、Cifar10資料集測試九、使用Pycaffe

打開終端,輸入 spyder, 即可開啟Anaconda內建的ython IDE.。 原生Python的可在軟體中心下載下傳Spyder. Spyder開啟可能會卡出去,多開幾次就OK。 建立目錄 /home/xx/Spyder/mnist,  床建以下pycaffe訓練檔案: 首先要按照上面cifar的方法,去mnist下擷取源資料,并建立資料檔案LevelDB. 其次要自己設定訓練參數到mnist_lenet_solver.prototxt檔案 

# -*- coding: utf-8 -*-
"""
Created on Tue Jul  5 18:30:56 2016

@author: xx
"""
# 導入caffe
import caffe

from caffe import layers as L
from caffe import params as P

# 載入資料
dataDir = '/home/xx/caffe-master/examples/mnist'

# 設計網絡
def lenet(lmdb,batch_size):
    n = caffe.NetSpec()
    
    n.data, n.label = L.Data(batch_size = batch_size,
                             backend = P.Data.LMDB,source=lmdb,
                             transform_param = dict(scale=1./255),ntop=2)
    n.conv1 = L.Convolution(n.data, kernel_size=5,
                            num_output=20, weight_filler=dict(type='xavier'))
    n.pool1 = L.Pooling(n.conv1, kernel_size=2,
                        stride=2, pool=P.Pooling.MAX)
    n.conv2 = L.Convolution(n.pool1, kernel_size=5,
                            num_output=50, weight_filler=dict(type='xavier'))
    n.pool2 = L.Pooling(n.conv2, kernel_size=2,
                        stride=2, pool=P.Pooling.MAX)
    n.ip1 = L.InnerProduct(n.pool2, num_output=500,
                           weight_filler=dict(type='xavier'))
    n.relu1 = L.ReLU(n.ip1, in_place=True)
    
    n.ip2 = L.InnerProduct(n.relu1, num_output=10,
                           weight_filler=dict(type='xavier'))
    n.loss = L.SoftmaxWithLoss(n.ip2, n.label)

    return n.to_proto()  
    
# 儲存網絡

modelDir = '/home/xx/Spyder/mnist'

with open(modelDir+'/mnist_lenet_train.prototxt','w') as f:
    f.write(str(lenet(dataDir+'/'+'mnist_train_lmdb',64)))

with open(modelDir+'/mnist_lenet_test.prototxt','w') as f:
    f.write(str(lenet(dataDir+'/'+'mnist_test_lmdb',100)))

# -------------------------
# 設計 solver
# modelDir/mnist_lenet_solver.prototxt 
# ------------------------

# 訓練網絡

caffe.set_device(0)

caffe.set_mode_gpu()   # or cpu

solver = caffe.SGDSolver(modelDir+'/'+'mnist_lenet_solver.prototxt')

solver.solve()
           

運作即可看到如下訓練過程~~~~~~~~~~。

繪制此lenet的網絡結構如下。

# -*- coding: utf-8 -*-
"""
Created on Tue Jul  5 20:30:20 2016
繪制網絡結構
@author: xx
"""
# 導入 draw
import caffe
import caffe.draw
from caffe.proto import caffe_pb2
from google.protobuf import text_format

# 模型
model_path = '/home/xx/Spyder/mnist/mnist_lenet_train.prototxt'
# 讀取模型
net = caffe_pb2.NetParameter()
text_format.Merge(open(model_path).read(),net)

# 輸出
pic_path = '/home/xx/Spyder/mnist/lenet_pic.png'
# 排列方式
rankdir = 'LR'  # LR TB RL BT

# 繪制網絡
print('Drawing net to %s' % pic_path)
caffe.draw.draw_net_to_file(net,pic_path,rankdir)
print('Done!')
           
Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 &amp; 編譯八、Cifar10資料集測試九、使用Pycaffe

使用caffemodel對任意圖檔分類 需要到caffe model zoon 下載下傳 bvlc_reference_caffenet.caffemodel

# -*- coding: utf-8 -*-
"""
Created on Tue Jul  5 22:16:37 2016
使用caffemodel進行分類
@author: xx
"""

import caffe

#caffemodel 檔案
modelDir = '/home/xx/caffe-master/models/bvlc_reference_caffenet/'
model = modelDir + 'bvlc_reference_caffenet.caffemodel'

#deploy檔案
deploy = modelDir + 'deploy.prototxt'

#GPU模式
caffe.set_mode_gpu()
net = caffe.Net(deploy,model,caffe.TEST)

#資料預處理配置
#config infomation from deploy
#top: "data"
#input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }
#輸入尺寸
transformer = caffe.io.Transformer({'data':net.blobs['data'].data.shape})  #data form deploy
#次元調整 HWK-KHW python讀取為HWK
transformer.set_transpose('data',(2,0,1))
#值阈調整 python讀取圖檔為[0,1]
transformer.set_raw_scale('data',255)
#通道調整 RGB-BGR caffe與opencv一緻為BGR,而原圖為RGB
transformer.set_channel_swap('data',(2,1,0))
#尺寸調整 第0維可任意改變
net.blobs['data'].reshape(10,3,227,227)

#加載測試圖檔
pic = '/home/xx/Spyder/mnist/dog.jpg'
img = caffe.io.load_image(pic);

#分類預測
net.blobs['data'].data[...] = transformer.preprocess('data',img)
out = net.forward()
pridects = out['prob']  #prob form deploy
predict = pridects.argmax() 
print predict  #輸出265
           
net.meta.classes.description(265)

ans = 

    'Cardigan, Cardigan Welsh corgi'    # 羊毛衫、羊毛衫威爾士柯基犬
           
Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記Ubuntu 15.04 + CUDA7.5 + Caffe 配置筆記一、Ubuntu 安裝二、CUDA 安裝 三、Matlab 安裝四、BLAS 安裝 五、OpenCV安裝六、Python安裝 七、安裝google-glog 八、安裝 其他依賴項 九、Caffe 安裝 &amp; 編譯八、Cifar10資料集測試九、使用Pycaffe