說到 Deep learning 的工具,首選應該就是 caffe 了吧,BVLC維護中
這裡就把之前整理過的東西,公開一下好了,無妨吧,因為純紀錄用,純屬參考阿
畢竟我也不是什麼 Coding 高手,就只是好玩而已 XDD
現在的 Code 都已經被我改的快不像Caffe了,效率變差不過可以用就好!!! 而且終於成功搞定 Interface with C#了
環境:Ubuntu 15.04 後來我改成 OSX 11.4 很神奇的是,居然OSX會比較快? 這其中必定有詐,我單純猜測應該是Memory的CP比較有效率八
系統 GTX 960 少少的 4G 可憐的 4G
原則上下列以Ubuntu為主,但是 OSX 幾乎通用,有些tricks就以後再談吧
以下適合剛裝好Ubuntu
先裝
apt-get install libxml2 libxml2-dev libz-dev
可以的話再裝一下pip
python也是必要的
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
Download Caffe
apt-get install git
git clone https://github.com/BVLC/caffe.git
最簡單的開始就是
cp Makefile.config.example Makefile.config
然後去修改Makefile.config
這個參考官網不會錯
# 看要不要cpu only,如果沒GPU就把此項uncomment掉
值得一提的是hdf5在Ubuntu 15.04中預設路徑有改
變成 /usr/include/hdf5/serial
要不在 Makefile.config 中把路徑加入 Include_dir
要不就把
src/caffe/layers/hdf5_data_layer.cpp
src/caffe/layers/hdf5_output_layer.cpp
./include/caffe/data_layers.hpp
./include/caffe/util/io.hpp
都改成"serial/hdf5.hpp"
Python_include也有要改一個小地方,一樣是路徑問題,是python-numpy的路徑
改成 /usr/lib/python2.7/dist-packages/numpy/core/include
其他沒什麼好注意的
接下來就是下
make all -j12 (12代表 12 threads, make main functions)
make test -j12 (make test tools)
make runtest (run the test tools to test functionality of caffe)
make pycaffe (建立Python的 Wrapper)
make matcaffe (建立 Matlab 的 Wrapper)
如果Linking有錯呢
幾點參考的
1. 找不到hdf5_hl的問題
cd /usr/lib/x86_64-linux-gnu (32bit 位於 386)
sudo ln -s libhdf5_serial.so.8.0.2 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.8.0.2 libhdf5_hl.so
2. matlab 2014b或只支援gcc 4.7x的版本 要降級 才能完整透過matlab叫caffe功能~
解法:降級gcc
sudo apt-get install -y gcc-4.7 g++-4.7
cd /usr/bin
sudo rm gcc && sudo ln -s gcc-4.7 gcc && sudo rm g++ && sudo ln -s g++-4.7 g++
sudo cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20 /usr/local/MATLAB/R2014b/sys/os/glnxa64/libstdc++.so.6.0.20
cd /usr/local/MATLAB/R2014b/sys/os/glnxa64/
sudo mv libstdc++.so.6 libstdc++.so.6.backup
sudo ln -s libstdc++.so.6.0.20 libstdc++.so.6
sudo ldconfig -v
3. 要是降級後才安裝scipy 會GG,所以呢,要先升級回來gcc 4.9才能安裝scipy
真的要硬跑可以,解法如下
sudo bluefish /usr/lib/python2.7/plat-x86_64-linux-gnu/_sysconfigdata_nd.py
把-fstack-protector-strong 都改成 -fstack-protector
4. CUDA/NVIDIA驅動安裝失敗是時有所聞,遇到時候,記得叫出log來看,通常也是gcc版本不對,導致於無法編譯Driver kernel
5. GCC版本太高 (5.2) 無法 make caffe
解法:sudo vim /usr/local/cuda-7.5/include/host_config.h
(line 116) #if __GNUC__ > 5 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9)
6. 跑Caffe程式說找不到CUDA的LIB
解法:
sudo ldconfig /usr/local/cuda-7.5/bin && sudo ldconfig /usr/local/cuda-7.5/lib64
要不然就把路徑加到妳的 ~./bashrc or ~./profile裡面~
7. 手殘不小心自動更新,結果driver跑掉了,桌面進不去 Cuda也不會跑,重裝CUDA也會出現Driver installation fail的訊息
解法:完整移除cuda ,例如 sudo apt-get autoremove --prruge cuda
重開之後下載舊版的Nvidia driver for 妳的顯卡,直接安裝,通常是用 dpkg -i 安裝
好了之後重開桌面有了,再安裝一次CUDA,打完收工
有學弟也在問怎麼加入一個新的 layer,其實看完 code之後妳很容易找到的,基本上就這樣搞哦
Add new layer into caffe
- new layer.cpp 要有對應的 new layer.hpp
- caffe.proto 要加入定義
- 舊版caffe要改vision_layer.hpp的定義 (比如DeconvNet就用舊版caffe),新版要自己定義new layer.hpp (通常是目前BVLC master branch的˙)
- layer_factory.cpp要加入include 對應的 new layer.hpp (舊版Caffe不用)
- layer_factory.cpp要加入對應的定義
- 定義 forward / backward 就好了..
如果說是要改 *.cu, 那得先去看 CUDA的書練習一下,不然應該會霧沙沙
跟CAFFE沒關係的,有些人會希望既有CUDA又有Ubuntu的桌面可以用 (像我就是XDD)
所以這常常會有衝突問題,特別有時候一更新 lightdm 或是 gdm就掛在那給妳看,經反覆實驗有找出解
完整移除桌面,我是這樣做:
- sudo apt-get remove lightdm ubuntu-desktop kubuntu-desktop sddm gdm unity等
- Reboot後安裝 sudo apt-get install kubuntu-desktop nvidia-prime unity
- 修改檔案:sudo gedit /etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=uvesafb:mode_option=1360x768-24,mtrr=3,scroll=ywrap"
- #GRUB_GFXMODE=1360x768
- 修改sudo gedit /etc/initramfs-tools/modules
- 最後一行新增
- uvesafb mode_option=1360x768-24 mtrr=3 scroll=ywrap
- echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
- sudo update-grub2
- sudo update-initramfs -u
- reboot