《機器學習 caffe 環境搭建——redhat7.1 和 caffe 的 python 介面編譯》
機器學習 caffe 環境搭建——redhat7.1 和 caffe 的 python 介面編譯
相信看這篇文章的都知道 caffe 是幹嘛的了,無非就是深度學習、神經網路、計算機視覺、人工智慧這些,這個我就不多介紹了,下面說說我的安裝過程即遇到的問題,當然還有解決方法。
說下我的環境:1》虛擬機器:VM Workstation 12 Player2》OS:redhat7.1
虛擬機器裝好之後因為 RedHat 的 yum 服務是收費的,為了倒騰免費 yum 源看網上的教程,坑了一 b,浪費了 N 久時間,最後得高人指點得以成功,寫了個 blog:redhat 配置免費 yum 源
步入正題,安裝 caffe. 再次建議大家嘗試看英文文件,因為最新的東西很少有中文的,而且,中文教程各種坑。。。附上官方地址:caffe 官方安裝教程
1. 安裝依賴包,各種依賴包
這一步之前,你要先把 yum 源都配好,要不的話會出現下面的情況:
假設你 yum 配置好了,繼續:
sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
sudo yum install gflags-devel glog-devel lmdb-devel sudo yum install atlas-devel
你可能會問,都是安裝依賴為啥需要 2 條命令,而不是一條直接執行。這個我只能說,官方文件裡第一行裡的是:General dependencies,即:基本依賴,理解出必選的就行,第二行的包是:Remaining dependencies 剩餘的依賴?不管了,你只管裝就好了。
另外,如果你是按照我上面給出的方法配置的 yum 源的話(上面支配了本地源,163 源,和 epel),可能還會有包找不到, 這時候就要自己找源了,新增方法都是差不多的。
如果你需要用 caffe 提供的 python 介面的話,那還有一個包需要安裝:sudo yum installpython-devel,後面會說到。
2. 下載 caffe 原始碼,編譯
sudo yum install git git clone https://github.com/BVLC/caffe.git
下載過程有點慢,慢慢等。
下完之後, 會在當前目錄生成一個 caffe 資料夾,本文預設 caffe 下載到 / code 目錄下,以下所有命令預設都在 / code/caffe 目錄下,除非有 cd 命令出現。
root@localhost caffe]#cd /code/caffe
[root@localhost caffe]# cp Makefile.config.example Makefile.config
[root@localhost caffe]# vi Makefile.config
把第8行的註釋開啟,我們使用CPU模式,如圖。
接著,開始編譯吧,遇到問題再說:
[root@localhost caffe]# make all
遇到的第一個問題,如圖:
很明顯,提示 g++ 找不到。安裝 g++,
[root@localhost caffe]# yum install gcc-c++
繼續編譯,遇到第二個錯,如圖:
找不到 atlas,上面明明裝了atlas-devel,檢視官方教程發現如下描述:
(圖 BLAS)
我標註了兩個地方,先看第二個,說需要取消 BLAS_LIB 的註釋,並且要設定 atlas 的路徑,提示說一般都放在 / usr/lib/atlas 目錄下。那就試試,但是編輯哪個檔案呢?當然是 Makefile.config, 編輯它,如圖:
找到 51 行的樣子,果然有一個 BLAS_LIB 被註釋掉了,第一步取消註釋,第二步,先到 / usr/lib64/atlas 下看看有沒有這個目錄。我看了下是有的,並且在 atlas 下有這些檔案,如圖:
那把 / usr/lib64/atlas 配到 51 行,繼續編譯(make all),錯誤依舊。繼續看官方給出的對 BLAS 的解釋(圖 BLAS)(往上數第三個截圖),
官方提示安裝是這麼說的:install ATLAS bysudo yum install atlas-devel
or install OpenBLAS,注意一個 or, 我們剛才是第一種方法,現在試試安裝 openblas
yum install openblas openblas-devel
安裝之後,搜尋下安裝到的目錄:
find / -name "*openblas*.so"
發現都在 / usr/lib64 目錄下,再次修改 Makefile.config, 如圖:
再次編譯:
make all
順利通過。這裡也給各位再次強調下,各種教程官網的最正宗,一定要強迫自己看官網。。。雖然是英文。。
接著執行下測試命令
make test make runtest
上面的成功了,這兩個應該不會有問題。
到此,caffe 的安裝就結束了.
接下來說下編譯 caffe 的 python 介面,pycaffe:
還是在 / code/caffe 目錄下:
第一步還是安裝依賴,下把 pip 安裝了,並且升級下:
[root@localhost caffe]#yum intall python-pip [root@localhost caffe]# pip install --upgrade pip
然後安裝 pycaffe 的各種依賴:
[root@localhost caffe]# pip install -r python/requirements.txt
[root@localhost caffe]# yum installpython-devel
把 caffe 的 python 介面路徑新增到系統環境變數:
[root@localhost caffe]# vim /etc/profile 在檔案的最後一行新增: export PYTHONPATH=/code/caffe/python:$PYTHONPATH 注意,/code/caffe/python這部分要根據你的實際目錄來填寫。 然後然修改生效 [root@localhost caffe]# source /etc/profile [root@localhost caffe]# source /etc/profile
編譯 pycaffe
[root@localhost caffe]# make pycaffe
輸出如下:
匯入 python 試試:
提示找不到 caffe,這時候再重新開啟一個終端試試,如果還不行,那就說明配置有問題了。
我的匯入時出現如下問題:
提示 six 這個包沒有 indexbytes 方法。手動 dir 了一下,確實沒有 indexbytes, 如下:
但是既然 caffe 程式碼裡有寫這個方法,那就應該是有的,猜測是 python 引用的 six 包的版本不對。於是想到看看系統裡有沒有其他的 six.py 檔案:
python 預設匯入的是/usr/lib/python2.7/site-packages / 這個目錄下的 six.py, 它沒有 indexbytes 方法,看了下上圖其他幾個目錄下的 six.py 檔案都是有該方法的,於是,把 / usr/lib/python2.7/site-packages/pip/_vendor 下的 six.py 拷貝到 / usr/lib/python2.7/site-packages/(建議備份)。然後重新開啟一個終端,匯入 caffe
另外,匯入 caffe 的時候若提示 numpy 版本問題,到 / usr/lib64/python2.7/site-packages 下執行
rm -rf numpy*
然後在安裝 numpy: pip install numpy
ok 了,完事。祝好!歡迎下方交流。
PS, 有錯誤,或者有問題的地方歡迎下方交流。