说明:
Yahoo
在
Github
中给出了在
Hadoop Yarn
集群中
CaffeOnSpark
的简单安装和测试教程:(集群环境和单节点有很多重复步骤,废话比较多)
https://github.com/yahoo/CaffeOnSpark/wiki/GetStarted_yarn
但该教程只能作为参考,完全按照教程中的操作会出现一堆莫名其妙的问题。
1、
确保
CaffeOnSpark
已经正确安装。
2、
确保
Hadoop
和
Spark
集群已经正确部署。
3、
配置
Spark on Yarn
修改
Spark
的
spark-env.sh
配置文件:
cd /home/cluster/software/spark-1.6.0-bin-hadoop2.6/conf
vim spark-env.sh
添加如下配置信息:
export YANR_CONF_DIR=
/home/cluster/software/hadoop-2.6.4/etc/hadoop
export SPARK_LOCAL_DIRS=
/home/cluster/software/spark-1.6.0-bin-hadoop2.6
export SPARK_YARN_USER_ENV=
“CLASSPATH=/home/cluster/software/hadoop-2.6.4/etc/hadoop”
将
spark-env.sh
配置文件发送到集群的其他节点:
scp -r spark-env.sh cluster@
slave1
:
/home/cluster/software/spark-1.6.0-bin-hadoop2.6/conf/
scp -r spark-env.sh cluster@
slave2
:
/home/cluster/software/spark-1.6.0-bin-hadoop2.6/conf/
4、
下载
MNIST
数据集
进入
CaffeOnSpark
的主目录,执行如下指令:
sudo
./scripts/setup-mnist.sh
注:通过指令可以看到
CaffeOnSpark
的所有者为
root
,即普通的用户对
CaffeOnSpark
目录下的所有文件都没有写权限,这点非常重要。如果不注意这点,后续也会遇到权限问题的错误。使用“
ls -l
”指令可以查看
CaffeOnSpark
的详细权限信息。
5、
修改
CaffeOnSpark/data/lenet_memory_train_test.prototxt
文件:
sudo vim lenet_memory_train_test.prototxt
注:在该文件中主要是修改训练和测试数据的路径信息,教程中给出的资源路径为:
查看发现在
CaffeOnSpark/data
目录下确实有
mnist_test_lmdb
和
mnist_train_lmdb
两个资源文件:
但由于前文介绍的,只有
root
用户对
CaffeOnSpark
有操作权限,因此若在
lenet_memory_train_test.prototxt
文件中传入
CaffeOnSpark/data
下的这两个资源文件,在执行过程中会出现“
Permission Denied
”的错误!
因此,在
software
新建一个所有者为普通用户的文件夹
test
,将
mnist_test_lmdb
和
mnist_train_lmdb
这两个资源文件拷贝到该文件夹下,在
lenet_memory_train_test.prototxt
中传入
test
下这两个资源文件的路径。
6、
修改
CaffeOnSpark/data/lenet_memory_solver.prototxt
文件:
将
“
net
”中
lenet_memory_train_test.prototxt
路径信息修改为绝对路径;
去掉
“
solver_mode:CPU
”前边的“
#
”
7、导入临时环境变量
export
LD_LIBRARY_PATH
=${CAFFE_ON_SPARK}/caffe-public/distribute/lib:${CAFFE_ON_SPARK}/caffe-distri/distribute/lib
export
LD_LIBRARY_PATH
=${LD_LIBRARY_PATH}:/usr/local/cuda-7.0/lib64:/usr/local/mkl/lib/intel64/
export
CAFFE_ON_SPARK
=/home/cluster/software/CaffeOnSpark
8、
执行
CaffeOnSpark
示例程序
在
Spark
集群中输入如下指令:
spark-submit
–master
yarn –deploy-mode client
–num-executors
1
–files
${CAFFE_ON_SPARK}/data/lenet_memory_solver.prototxt,${CAFFE_ON_SPARK}/data/lenet_memory_train_test.prototxt
–conf
spark.driver.extraLibraryPath=”${LD_LIBRARY_PATH}”
–conf
spark.executorEnv.LD_LIBRARY_PATH=”${LD_LIBRARY_PATH}”
–class
com.yahoo.ml.caffe.CaffeOnSpark
${CAFFE_ON_SPARK}/caffe-grid/target/caffe-grid-0.1-SNAPSHOT-jar-with-dependencies.jar
-train
-features
accuracy,loss
-label
label
-conf
${CAFFE_ON_SPARK}/data/lenet_memory_solver.prototxt
-devices
1
-connection
ethernet
-model
hdfs:///mnist_cluster/mnist.model
-output
hdfs:///mnist_cluster/mnist_features_result
9、查看运行结果
由于设定训练的模型和特征结果保存在
HDFS
上,因此可以在
Hadoop
的监控页面看到如下信息:
前两个为得到的最终结果,后边四个分别为迭代
1000
次和
2000
的快照信息。
通过以下指令可以查看最终得到的特征文件的具体内容信息:
hadoop fs -cat hdfs:///mnist_cluster/mnist_features_result/*
注:在
lenet_memory_solver.prototxt
中指定最大迭代次数为
2000
次,且每
1000
次打印一次快照,因此在结果文件中有
1000
和
2000
次
迭代
的信息
: