1. 程式人生 > >Mac OS X EI 10.11安裝caffe注意點

Mac OS X EI 10.11安裝caffe注意點

os x ei用了很久,一直沒能將caffe安裝成功,之前一直使用theano和keras,所以沒仔細處理每個問題細節。

今天仔細看了所有問題,最終終於安裝成功。下面記錄幾個注意點:

1、homebrew

一定要使用homebrew管理各種外掛,否則會非常蛋疼。caffe依賴的library包括snappy leveldb gflags glog szip lmdb opencv hdf5

brew install -vd snappy leveldb gflags glog szip lmdb
brew tap homebrew/science
brew install hdf5 opencv
新版的homebrew都會進行識別,特別注意的是,如果之前有過手動安裝,可能會帶來衝突,這裡大部分衝突homebrew會識別,但可能存在漏網的,尤其是opencv,如果之前安裝過3.0,這裡用homebrew安裝2.4,或者用anaconda安裝過2.4等等,都會導致衝突,在編譯link的時候,就很可能報類似
ld: can't map file, errno=22 file '/usr/local/cuda'
//上面具體可能是一個opencv的錯誤,例如
cv:cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int) 未定義引用
//又或者是
cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)’未定義的引用

這個問題解決了很久,最終是,將所有其他版本的opencv全部解除安裝(包括anaconda),使用homebrew安裝後重新link

2、openblas

同樣使用homebrew安裝openblas,但是這裡單獨提出來,是因為,可能由於cmake版本的問題,openblas的依賴無法獲得,這裡我是直接在cmakelist裡進行了一些修改:

cmakelist的依賴檢查在如下內容

# ---[ Dependencies
include(cmake/Dependencies.cmake)
在該檔案下找到blas的檢查,我是直接在apple裡進行了修改,如果是linux系統,可能會同樣遇到cmake版本的問題,類似修改即可:
# ---[ BLAS
if(NOT APPLE)
  set(BLAS "Atlas" CACHE STRING "Selected BLAS library")
  set_property(CACHE BLAS PROPERTY STRINGS "Atlas;Open;MKL")

  if(BLAS STREQUAL "Atlas" OR BLAS STREQUAL "atlas")
    find_package(Atlas REQUIRED)
    include_directories(SYSTEM ${Atlas_INCLUDE_DIR})
    list(APPEND Caffe_LINKER_LIBS ${Atlas_LIBRARIES})
  elseif(BLAS STREQUAL "Open" OR BLAS STREQUAL "open")
    find_package(OpenBLAS REQUIRED)
    include_directories(SYSTEM ${OpenBLAS_INCLUDE_DIR})
    list(APPEND Caffe_LINKER_LIBS ${OpenBLAS_LIB})
  elseif(BLAS STREQUAL "MKL" OR BLAS STREQUAL "mkl")
    find_package(MKL REQUIRED)
    include_directories(SYSTEM ${MKL_INCLUDE_DIR})
    list(APPEND Caffe_LINKER_LIBS ${MKL_LIBRARIES})
    add_definitions(-DUSE_MKL)
  endif()
elseif(APPLE)
  SET(BLAS "OpenBLAS")
  SET(OpenBLAS_VERSION "0.2.18")
  SET(OpenBLAS_INCLUDE_DIRS /usr/local/Cellar/openblas/0.2.18_2/include)
  SET(OpenBLAS_LIBRARIES /usr/local/Cellar/openblas/0.2.18_2/lib/libopenblas.dylib)
include_directories(SYSTEM ${OpenBLAS_INCLUDE_DIRS}) list(APPEND Caffe_LINKER_LIBS ${OpenBLAS_LIBRARIES}) #find_package(vecLib REQUIRED) #include_directories(SYSTEM ${vecLib_INCLUDE_DIR}) #list(APPEND Caffe_LINKER_LIBS ${vecLib_LINKER_LIBS}) #if(VECLIB_FOUND) #if(NOT vecLib_INCLUDE_DIR MATCHES "^/System/Library/Frameworks/vecLib.framework.*") #add_definitions(-DUSE_ACCELERATE) #endif() #endif() endif()

如果使用vecLib,貌似會出很多問題,之前一直坑在這裡,可能的原因是10.11版本的問題,沒細深究,但網上給出的方案全部不可行,所以選擇openblas。

3、 python依賴

在caffe的python目錄下(或者build完後的python目錄下)有一個requirements.txt記錄了python的依賴,直接用pip安裝即可

for req in $(cat requirements.txt); do pip install $req; done

其他的問題都是細節的小問題了,如果上面的都沒問題安裝好的話,cmake之後就可以make all了。

最後一個小問題就是,目標build在build目錄下的install資料夾下,bin需要新增環境變數,python目錄建議是直接copy到python對於的site-packages下,mac下可能會出現找不到._caffe這個module,原因是python不載入dylib檔案,解決方法是將python目錄下的_caffe.dylib檔案直接修改為_caffe.so檔案就可以了。