Mac OS X10.10 下安裝caffe

來源:互聯網
上載者:User

標籤:mac os x10.10   caffe   cuda   opencv   gflags   

Mac OS X10.10 下安裝caffe


[email protected]

http://blog.csdn.net/surgewong


     在Linux學習 Caffe【1】有一段時間了,也漸漸地對 Caffe 的架構有了一點認識。在 Linux 下學習 Caffe 的人很多,網上的參考資料也想對比較多。安裝配置教程很多,出了問題都相對比較好解決。前兩天老大弄了一台Mac 筆記本過來,叫我幫他在 Mac上安裝 Caffe。窮屌絲以前沒有玩過 Mac 筆記本,衝著對 Mac 的這份好奇,開始痛苦的安裝之旅。


一、Mac下軟體安裝方式

     習慣了Linux下的 sudo apt-get install XXXX 的軟體安裝方式,對 Mac下 brew install XXXX 很容易上手。不過之前對 Mac 幾乎沒有任何基礎,要瞭解其中的一些特定術語,比如:formula,framework還是有些困難的。多用幾次,就開始慢慢對其有些瞭解。brew 的方式安裝是通過一個叫著 homebrew【2】 軟體包管理工具來實現的。圍繞 brew 的安裝的常用命令有:

     brew install XXXX          --> 安裝軟體包或者相應的庫

     brew uninstall XXXX         --> 卸載軟體包或者相應的庫

     brew update              --> 更新 Homebrew自己

     brew upgrade             -->  升級所有可以升級的軟體(通過brew方式安裝的)

     brew list               -->  列出所有通過 brew 安裝的軟體

     brew doctor              --> 診斷是否安裝成功

     brew edit XXXX            --> 編輯 XXXX (Formula)相應的軟體配安裝置檔案

     brew help               --> 列出常用命令


二、 安裝 Caffe 必要的依賴

    參考官方教程【3】,Caffe需要安裝的內容有:

     CUDA                     最好是 6.5 版本

     BLAS                     可以通過ATLAS,MKL,OpenBLAS 提供

     Opencv                   版本大於或等於 2.4 

     Boost                    版本大約或等於 1.5, 如有必要還需要提供 python 版本

     glog, gflags, protobuf, leveldb, snappy, hdf5, lmdb

下面是非必需的:

    Python                     Python 2.7  numpy 版本大於或等於1.7

    Matlab                     提供 mex 編譯器


三、CUDA 及 BLAS 的安裝

   1.CUDA 的安裝: Mac 下面 CUDA 的安裝相比 Linux 要簡單很多,直接下載【4】,然後直接雙擊,按照提示直接安裝就可以,其他的相關設定可以參考文檔【5】。

   主要是需要設定 cuda 相關的路徑,可以在 /etc/profile 中設定下面環境變數:

   export PATH=/Developer/NVIDIA/CUDA-6.5/bin:$PATH

   export DYLD_LIBRARY_PATH=/Developer/NVIDIA/CUDA-6.5/lib:$DYLD_LIBRARY_PATH


   2.Atlas 的安裝: Mac 系統下面的 vecLib 架構(Accelerate Frame)本身就整合了 Atlas的實現,在編譯Caffe的時候只需要指定相應標頭檔所在的目錄就可以。


   3.OpenBlas 的安裝: 使用 brew 安裝 就可以。(直接使用brew安裝可能有些問題,後面會介紹)

      brew install  homebrew/science/openblas          ---> 直接安裝

      brew install --build-from-source homebrew/science/openblas     --> 通過編譯源碼安裝


   4.MKL 的安裝: Intel MKL 是一個商業化針對CPU最佳化的一個庫,可以使用學生免費版,可以到intel官網【6】註冊一個帳號,下載相應的mac版本的 MKL。


四、 OpenCV, glog, gflags, protobuf, leveldb, snappy, hdf5, lmdb 的安裝

  從Mac 10.9 開始 系統預設的C/C++ 編譯器是 clang/clang++ 而不是 gcc/g++,相應使用的C++ 標準庫是 libc++ (主要是針對 C++ X11)。在Caffe中很多依賴庫主要是基於libstdc++ 庫,所以使用預設編譯選項時,很容易出現undefined symbols for architecture x86_64 的錯誤。要解決這個問題,就不必須,保證其相應的依賴本身就是基於 libstdc++ 來編譯安裝的。

  首先可以通過 brew 的方式來安裝上述依賴,不過需要選擇通過源碼安裝,並且在編譯時間選擇使用 libstdc++庫進行編譯。使用這種方式可以通過編輯 相應的 homebrew formula。前面提到的 openblas 最好也通過該方式進行編譯安裝。對於每個需要安裝的Homebrew formula: 


    boost snappy leveldb protobuf gflags glog szip lmdb homebrew/science/opencv


  使用 brew edit FORMULA(例如 brew edit boost) 加入相應的環境 ENV定義:


  def install      # ADD THE FOLLOWING:      ENV.append "CXXFLAGS", "-stdlib=libstdc++"      ENV.append "CFLAGS", "-stdlib=libstdc++"      ENV.append "LDFLAGS", "-stdlib=libstdc++ -lstdc++"      # The following is necessary because libtool likes to strip LDFLAGS:      ENV["CXX"] = "/usr/bin/clang++ -stdlib=libstdc++"

  對於每個 formula 按順序 先卸載然後重新通過源碼編譯安裝:


for x in snappy leveldb gflags glog szip lmdb homebrew/science/opencv; do brew uninstall $x; brew install --build-from-source --fresh -vd $x; donebrew uninstall protobuf; brew install --build-from-source --with-python --fresh -vd protobufbrew install --build-from-source --fresh -vd boost boost-python

  註: 即便是上面編譯安裝成功,在編譯caffe過程中,可能會提示缺失 tr1/truple 標頭檔,這還需要安裝hdf5 依賴,通過上述類似方式安裝即可。


五、OpenCV 本地源碼編譯,以及 gflags ,glog 本地源碼編譯

  1.OpenCV的安裝:上面提到的 brew 的安裝方式可能會安裝失敗。筆者在安裝 opencv 的遇到了不少麻煩。

    a. 直接使用 brew install homebrew/science/opencv 能夠成功安裝 opencv,但是該 opencv 沒有編譯 有關 cuda 庫,其本身是通過預設的 libc++ 庫編譯的,因此在使用編譯 Caffe 的時候就會出現上述講的 undefined symbols for architecture x86_64 錯誤。這種方式是不可取的。


    b. 筆者在使用 brew install --build-from-source --fresh -vd homebrew/science/opencv 的方式安裝,系統安裝的是2.4.10.1 版本,該版本,有個與cuda相容性問題的 bug,無法正常編譯。(註:對Mac不是很熟悉,沒有嘗試方法修複 該問題)筆者在Linux下使用的版本是 2.4.9,遇到過類似的 bug【7】。因此放棄使用該方法,轉而使用 2.4.9 源碼直接編譯。


    c. 在使用源碼編譯的時候,最大的就是如何在 opencv 編譯的時候 讓其選擇 libstdc++ 而不是 libc++。OpenCV 是通過 cmake 來產生 makefile的,要添加 相應的設定就需要修改相應的 cmake 配置。由於對 cmake 的文法不是很熟悉,只能大概猜測。筆者對檔案cmake/OpenCVDetectCUDA.cmake 的第 151行處 添加了

set(CUDA_NVCC_FLAGS  ${CUDA_NVCC_FLAGS}  "-Xcompiler -stdlib=libstdc++; -Xlinker -stdlib=libstdc++")

      然後直接按照正常的編譯步驟即可,不過編譯時間比較長。


  2.  gflags的安裝:筆者使用 第四步的 brew 的方式 安裝並沒有使得 gflags 成功使用 libstdc++庫進行編譯(編譯caffe報錯)。同樣的對 gflags的 cmake 相關檔案 添加 相應的配置。筆者在 cmake/CMakeCXXInformation.cmake 中 第 209 行出添加 

              set(CMAKE_CXX_FLAGS "-stdlib=libstdc++" ${CMAKE_CXX_FLAGS})

      然後直接按照正常的編譯步驟編譯安裝。


  3.  glog的安裝:glog對 gflags 有依賴,所以安裝 glog之前 必須安裝 gflags,在編譯 glog 時,部分檔案(*unittest.cc)編譯錯誤,其主要問題是名字空間的問題(沒有深究其原因,這裡只給出解決方案)。只需要在相應的檔案中加入

                      using namespace gflags;


六、編譯 Caffe

     在編譯 Caffe 時,需要設定好相關依賴的路徑以及庫依賴,然後等待 make 成功。至此好好享受在 Mac 下使用 Caffe 編程吧!



參考資料:


【1】 Caffe首頁

【2】 Homebrew 首頁 

【3】 Caffe 安裝官網 

【4】 CUDA 官網

【5】 CUDA 線上文檔 

【6】 Intel 官網 MKL 

【7】 一個OpenCV 2.4.9 與 CUDA 相容性的 Bug





Mac OS X10.10 下安裝caffe

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.