由於實習公司的任務要求,需要學習CaffeOnSpark的安裝和使用,作為一個對DL學習不到一個月的小白,拿到這個任務的時候真的是一臉懵逼,沒招只能上網找教程。可能這個技術比較新,網上的教程比較少,比較詳細的一個是:
參考教程。這個教程對於有一定深度學習基礎的朋友來說應該足夠了,但像我這樣入門級的菜鳥,中間會掉一個又一個的坑。通過半個多月的掉坑、爬坑的痛哭煎熬過程,終於完成了CaffeOnSpark的安裝和測試案例的使用。廢話不多說,直接上乾貨。
說明:本教程預設hadoop和spark叢集已經搭建完成,由於網上關於搭建hadoop叢集和spark叢集的教程很多,在此就不過多介紹具體的搭建過程。
1、更新源
sudo apt-get update
2、下載CaffeOnSpark
確保伺服器中已經安裝git,如果沒有,執行如下命令:
sudo apt-get install git
下載CaffeOnSpark:
sudo git clone https://github.com/yahoo/CaffeOnSpark.git --recursive
3、安裝maven
(1)確保已經安裝好jdk
(2)下載apache-maven-3.2.5-bin.tar.gz
(3)解壓
tar -zxvf apache-maven-3.2.5-bin.tar.gz
(4)修改環境變數
sudo vim /etc/profile
在末尾添加:
export M2_HOME=/home/master/software/apache-maven-3.2.5
export PATH=$M2_HOME/bin:$PATH
使環境變數生效
source /etc/profile
(5)檢測是否安裝成功
mvn -v
如果出現如下結果表示安裝成功:
4、安裝Caffe
(1)安裝依賴包
sudo apt-get install libprotobuf-dev protobuf-compiler
sudo apt-get install libleveldb-dev
sudo apt-get install libsnappy-dev
sudo apt-get install libopencv-dev
sudo apt-get install libhdf5-serial-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install python-dev
sudo apt-get install libgflags-dev
sudo apt-get install libgoogle-glog-dev
sudo apt-get install liblmdb-dev
(2)下載Caffe
git clone https://github.com/bvlc/caffe.git
(3)修改Caffe中的Makefile.config,開啟CPU_ONLY選項:
cd caffe/
mv Makefile.config.example Makefile.config
vim Makefile.config
去掉CUP_ONLY :=1前邊的“#”
(4)編譯Caffe
make all
4、修改CaffeOnSpark中caffe-public下的Makefile.config設定檔:
cd CaffeOnSpark/caffe-public
sudo mv Makefile.config.example Makefile.config
sudo vim Makefile.config
去掉CUP_ONLY :=1前邊的“#”
在設定檔中添加:
INCLUDE_DIRS +=${JAVA_HOME}/include
5、編譯CaffeOnSpark
在CaffeOnSpark的主目錄下執行命令:
sudo make build
使用sudo為了保證編譯過程中對系統訪問的許可權,但是最好之前先運行:
alias sudo=”sudo env PATH=$PATH”
註:因為系統預裝的sudo在編譯時間預設使用了--with-secure-path參數,因此目前使用者使用sudo時,之前設定的環境變數$PATH會被覆蓋。通過添加上面那行別名設定,就會在執行sudo時把當前的$PATH的值再套用上,達到想要的效果。
出現下述資訊,則表示編譯成功:
註:1、判斷編譯成功有兩個標誌:一是比較在輸出資訊中明顯的看到BUILD SUCCESS;二是在控制台看到All tests passed資訊輸出。由於在CaffeOnSpark編譯過程中會自動進行測試,有“All tests passed”資訊輸出,表示通過了所有的測試案例。
2、在編譯過程中需要下載很多東西,需要較長的時間。如果網路不好的話,可能出現編譯出錯的提示,可以等到網路穩定了在make build一次。
在編譯過程中會進行測試,可通過Spark叢集的master:4040web頁面查看測試案例的執行情況:
註:1、在編譯CaffeOnSpark時,若出現如下錯誤:
解決辦法:
sudo apt-get install python-numpy
2、在編譯CaffeOnSpark時,出現:
產生原因:沒有指定Spark叢集的Master節點IP
解決辦法:在Spark的conf目錄下修改spark-env.sh設定檔:
添加:
export SPARK_MASTER_IP=192.168.1.107
3、在編譯CaffeOnSpark時,出現如下錯誤(比較重要的問題,若在編譯過程中不解決,在隨後使用過程中也會出現類似問題):
ERROR: testTrain (__main__.PythonApiTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/master/CaffeOnSpark/caffe-grid/src/test/python/PythonApiTest.py", line 28, in setUp
self.cos=CaffeOnSpark(sc)
File "/home/master/CaffeOnSpark/caffe-grid/target/caffeonsparkpythonapi.zip/com/yahoo/ml/caffe/CaffeOnSpark.py", line 25, in __init__
self.__dict__['caffeonspark']=wrapClass("com.yahoo.ml.caffe.CaffeOnSpark")
產生原因:從上邊截取的部分錯誤資訊記錄可以看到出現的錯誤在com.yahoo.ml.caffe包下的CaffeOnSpark類中。在該類中需要調用Spark sql包中的UserDefinedFunction類的相關介面,但在Spark2.0的版本org.apache.spark.sql包已經沒有UserDefinedFunction這個類。
解決辦法:按照yahoo在Github上CaffeOnSpark的官方文檔中的介紹更改hadoop和spark的版本,使用hadoop的版本為hadoop-2.6.4,spark的版本為spark-1.6.0。