TensorFlowOnSpark HDP环境搭建及Mnist部署测试过程
2017-03-27 19:59
1106 查看
TensorFlow是谷歌提供的开源深度学习框架
TensorFlowOnSpark: 是雅虎提供的集成到Spark上的深度学习框架
鉴于我们使用的是Spark核心计算框架,现在搭建TensorFlow ON Hadoop Yarn开发环境
整体搭建步骤,https://github.com/yahoo/TensorFlowOnSpark/wiki/GetStarted_YARN网站上有详细介绍,主要步骤有:
安装环境说明: 操作系统Cent OS 7 , 大数据环境HDP2.5
1.1 下载python2.7
# download and extract Python 2.7
export PYTHON_ROOT=~/Python
curl -O https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
tar -xvf Python-2.7.12.tgz
rm Python-2.7.12.tgz
这个步骤没问题,很顺利!
1.2 编译python2.7
# compile into local PYTHON_ROOT
pushd Python-2.7.12
./configure --prefix="${PYTHON_ROOT}" --enable-unicode=ucs4
2make
make install
popd
rm -rf Python-2.7.12
这个步骤你如果按照这个来的话也没有问题,但是在后续的步骤会产生一系列莫名其妙的问题。我遇到的就两个:
(1) zlib找不到
(2) ssl模块找不到
最后分析问题原因就是在这一步编译过程中,没有将这两个模块编译进去,导致后面的步骤无法找到模块依赖。
幸好有万能的百度。
Yum install zlib-devel
/detail/2595947601.html
yum install openssl-devel -y
/detail/2581243341.html
大致意思 首先要安装完zlib和ssl再去编译python,那么在编译Python之前,要修改Module/Setup文件。修改文件操作是在configure和make命令之间。
Setup内容修改
ZLIB
SSL
1.3 安装pip
这一步是安装pip包管理工具,主要是为了后续安装其他包方便。
# install pip
pushd "${PYTHON_ROOT}"
curl -O https://bootstrap.pypa.io/get-pip.py
bin/python get-pip.py
rm get-pip.py
解决了上一个步骤的问题后,这一步也将会很顺利
1.4 安装pydoop
Python与hadoop交互的实现包
https://github.com/yahoo/tensorflow/blob/22fd3aad2dac96d521b5224519f443cef5269efb/tensorflow/g3doc/get_started/os_setup.md
在上一个步骤中,已经安装了pip包管理器,Tensorflow也支持这个包管理的安装,因此TensorFlow的安装就很简单了
$ pip install tensorflow
所有依赖一键安装完成。
官方安装步骤如下:
git clone https://github.com/tensorflow/ecosystem.git
# follow build instructions to generate tensorflow-hadoop-1.0-SNAPSHOT.jar
# copy jar to HDFS for easier reference
hadoop fs -put tensorflow-hadoop-1.0-SNAPSHOT.jar
最终目的是获取tensorflow-hadoop-1.0-SNAPSHOT.jar包然后将它放置到HDFS目录中去。
那么重点在于编译https://github.com/tensorflow/ecosystem/tree/master/hadoop这个源码。
编译这个源码的前提条件是:
(1) Protoc3.1.0安装
直接下载编译好的可执行包
https://github.com/google/protobuf/releases
可执行目录: /root/tensorflow/ protoc3.1.0/bin/protoc
(2) 下载apache maven
(3) 下载TensorFlow项目源码
git clone https://github.com/tensorflow/tensorflow.git
开始编译:
(1) 编译TensorFlow Eexample protos
export TENSORFLOW_ROOT=$PWD //指定tensorflow项目目录
# Suppose $TF_SRC_ROOT is the source code root of TensorFlow project
protoc --proto_path=$TF_SRC_ROOT --java_out=src/main/java/ $TF_SRC_ROOT/tensorflow/core/example/{example,feature}.proto
/root/tensorflow/protoc3.1.0/bin/protoc --proto_path=$TENSORFLOW_ROOT --java_out=src/main/java/ $TENSORFLOW_ROOT/tensorflow/core/example/{example,feature}.proto
(2) 编译ecosystem/hadoop项目
编译所在目录:/root/tensorflow/ecosystem/Hadoop
编译后会在target目录下找到
tensorflow-hadoop-1.0-SNAPSHOT.jar
将这些jar包放置到hdfs路径去。
zip -r Python.zip *
popd
# copy this Python distribution into HDFS
hadoop fs -put ${PYTHON_ROOT}/Python.zip
将之前编译的Python包打包成zip包,并放置到HDFS路径。
pushd TensorFlowOnSpark/src
zip -r ../tfspark.zip *
popd
构建ZIP包
mkdir ${HOME}/mnist
pushd ${HOME}/mnist >/dev/null
curl -O "http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz"
curl -O "http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz"
curl -O "http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz"
curl -O "http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz"
zip -r mnist.zip *
popd >/dev/null
6.2 将MNIS ZIP文件转换到HDFS文件
设置一系列环境变量:
指导命令
# set environment variables (if not already done)
export PYTHON_ROOT=~/Python
export LD_LIBRARY_PATH=${PATH}
export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python
export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=Python/bin/python"
export PATH=${PYTHON_ROOT}/bin/:$PATH
export QUEUE=gpu
# for CPU mode:
# export QUEUE=default
# remove --conf spark.executorEnv.LD_LIBRARY_PATH \
# remove --driver-library-path \
实际执行命令
[root@138 tensorflow]# export PYTHON_ROOT=/root/Python/
[root@138 tensorflow]# export LD_LIBRARY_PATH=${PATH}
[root@138 tensorflow]# export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python
[root@138 tensorflow]# export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=Python/bin/python"
[root@138 tensorflow]# export PATH=${PYTHON_ROOT}/bin/:$PATH
[root@138 tensorflow]# export QUEUE=gpu
[root@138 tensorflow]# export QUEUE=default
将图片和标签转换成TFRecords
指导命令
# save images and labels as TFRecords
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--queue ${QUEUE} \
--num-executors 4 \
--executor-memory 4G \
--archives hdfs:///user/${USER}/Python.zip#Python,mnist/mnist.zip#mnist \
--jars hdfs:///user/${USER}/tensorflow-hadoop-1.0-SNAPSHOT.jar \
--conf spark.executorEnv.LD_LIBRARY_PATH="/usr/local/cuda-7.5/lib64" \
--driver-library-path="/usr/local/cuda-7.5/lib64" \
TensorFlowOnSpark/examples/mnist/mnist_data_setup.py \
--output mnist/tfr \
--format tfr
实际命令:
spark-submit --master yarn --deploy-mode cluster --queue ${QUEUE} --num-executors 4 --executor-memory 4g --archives hdfs:///user/${USER}/Python.zip#Python,mnist/mnist.zip#mnist --jars hdfs:///user/${USER}/tensorflow-hadoop-1.0-SNAPSHOT.jar TensorFlowOnSpark/examples/mnist/mnist_data_setup.py --output mnist/tfr --format tfr
6.3 训练数据生成模型
spark-submit --master yarn --deploy-mode cluster --queue ${QUEUE} --num-executors 6 --executor-memory 18g --py-files TensorFlowOnSpark/tfspark.zip,TensorFlowOnSpark/examples/mnist/tf/mnist_dist.py --conf spark.dynamicAllocation.enabled=false --conf spark.yarn.maxAppAttempts=1 --archives hdfs:///user/${USER}/Python.zip#Python --conf spark.executorEnv.LD_LIBRARY_PATH=" /usr/hdp/2.4.0.0-169/usr/lib/:$JAVA_HOME/jre/lib/amd64/server" TensorFlowOnSpark/examples/mnist/tf/mnist_spark.py --images mnist/tfr/train --format tfr --mode train --model mnist_model
此处有两个坑:
(1) 需要在YARN中配置HADOOP_HDFS_HOME环境变量,否则报如下错
(2) 需要添加依赖动态库,官方文档介绍了如果使用CDH的时候需要添加lib库依赖
由于我使用的是HDP,所以相应的也要加上这个lib库依赖,因为这个问题被坑坏了!!!
训练完成后,终于生成了模型:
6.4 应用模型来测试测试数据
spark-submit --master yarn --deploy-mode cluster --queue ${QUEUE} --num-executors 6 --executor-memory 18g --py-files TensorFlowOnSpark/tfspark.zip,TensorFlowOnSpark/examples/mnist/tf/mnist_dist.py --conf spark.dynamicAllocation.enabled=false --conf spark.yarn.maxAppAttempts=1 --archives hdfs:///user/${USER}/Python.zip#Python --conf spark.executorEnv.LD_LIBRARY_PATH=" /usr/hdp/2.4.0.0-169/usr/lib/:$JAVA_HOME/jre/lib/amd64/server" TensorFlowOnSpark/examples/mnist/tf/mnist_spark.py --images mnist/tfr/test --mode inference
--model mnist_model –output predictions
执行完成后生成预测结果数据集:
OK到此为止环境,用例算是测试通过了,总共陆续花了两天时间。
接下来就是要学以致用了。
TensorFlowOnSpark: 是雅虎提供的集成到Spark上的深度学习框架
鉴于我们使用的是Spark核心计算框架,现在搭建TensorFlow ON Hadoop Yarn开发环境
整体搭建步骤,https://github.com/yahoo/TensorFlowOnSpark/wiki/GetStarted_YARN网站上有详细介绍,主要步骤有:
安装环境说明: 操作系统Cent OS 7 , 大数据环境HDP2.5
一 安装配置Python2.7
这里安装的Python并不是系统级用的,而是要准备一个完备的Python环境,然后可以打包提供给Spark使用的,因此需要安装在一个本地目录下。1.1 下载python2.7
# download and extract Python 2.7
export PYTHON_ROOT=~/Python
curl -O https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
tar -xvf Python-2.7.12.tgz
rm Python-2.7.12.tgz
这个步骤没问题,很顺利!
1.2 编译python2.7
# compile into local PYTHON_ROOT
pushd Python-2.7.12
./configure --prefix="${PYTHON_ROOT}" --enable-unicode=ucs4
2make
make install
popd
rm -rf Python-2.7.12
这个步骤你如果按照这个来的话也没有问题,但是在后续的步骤会产生一系列莫名其妙的问题。我遇到的就两个:
(1) zlib找不到
(2) ssl模块找不到
最后分析问题原因就是在这一步编译过程中,没有将这两个模块编译进去,导致后面的步骤无法找到模块依赖。
幸好有万能的百度。
Yum install zlib-devel
/detail/2595947601.html
yum install openssl-devel -y
/detail/2581243341.html
大致意思 首先要安装完zlib和ssl再去编译python,那么在编译Python之前,要修改Module/Setup文件。修改文件操作是在configure和make命令之间。
Setup内容修改
ZLIB
SSL
1.3 安装pip
这一步是安装pip包管理工具,主要是为了后续安装其他包方便。
# install pip
pushd "${PYTHON_ROOT}"
curl -O https://bootstrap.pypa.io/get-pip.py
bin/python get-pip.py
rm get-pip.py
解决了上一个步骤的问题后,这一步也将会很顺利
1.4 安装pydoop
Python与hadoop交互的实现包
二 安装TensorFlow
https://github.com/yahoo/TensorFlowOnSpark/wiki/GetStarted_YARNhttps://github.com/yahoo/tensorflow/blob/22fd3aad2dac96d521b5224519f443cef5269efb/tensorflow/g3doc/get_started/os_setup.md
在上一个步骤中,已经安装了pip包管理器,Tensorflow也支持这个包管理的安装,因此TensorFlow的安装就很简单了
$ pip install tensorflow
所有依赖一键安装完成。
三 安装编译Hadoop Input/OutputFormat for TFRecords
这一步的目的是编译获取TensorFlow中TFRecords格式文本的Input/OutputFormat实现。官方安装步骤如下:
git clone https://github.com/tensorflow/ecosystem.git
# follow build instructions to generate tensorflow-hadoop-1.0-SNAPSHOT.jar
# copy jar to HDFS for easier reference
hadoop fs -put tensorflow-hadoop-1.0-SNAPSHOT.jar
最终目的是获取tensorflow-hadoop-1.0-SNAPSHOT.jar包然后将它放置到HDFS目录中去。
那么重点在于编译https://github.com/tensorflow/ecosystem/tree/master/hadoop这个源码。
编译这个源码的前提条件是:
(1) Protoc3.1.0安装
直接下载编译好的可执行包
https://github.com/google/protobuf/releases
可执行目录: /root/tensorflow/ protoc3.1.0/bin/protoc
(2) 下载apache maven
(3) 下载TensorFlow项目源码
git clone https://github.com/tensorflow/tensorflow.git
开始编译:
(1) 编译TensorFlow Eexample protos
export TENSORFLOW_ROOT=$PWD //指定tensorflow项目目录
# Suppose $TF_SRC_ROOT is the source code root of TensorFlow project
protoc --proto_path=$TF_SRC_ROOT --java_out=src/main/java/ $TF_SRC_ROOT/tensorflow/core/example/{example,feature}.proto
/root/tensorflow/protoc3.1.0/bin/protoc --proto_path=$TENSORFLOW_ROOT --java_out=src/main/java/ $TENSORFLOW_ROOT/tensorflow/core/example/{example,feature}.proto
(2) 编译ecosystem/hadoop项目
编译所在目录:/root/tensorflow/ecosystem/Hadoop
编译后会在target目录下找到
tensorflow-hadoop-1.0-SNAPSHOT.jar
将这些jar包放置到hdfs路径去。
四 为Spark打包Python/tensorflow ZIP包
pushd "${PYTHON_ROOT}"zip -r Python.zip *
popd
# copy this Python distribution into HDFS
hadoop fs -put ${PYTHON_ROOT}/Python.zip
将之前编译的Python包打包成zip包,并放置到HDFS路径。
五 安装TensorFlowOnSpark
git clone git@github.com:yahoo/TensorFlowOnSpark.gitpushd TensorFlowOnSpark/src
zip -r ../tfspark.zip *
popd
构建ZIP包
六 运行MNIST 样例
6.1 下载 MNIST数据集mkdir ${HOME}/mnist
pushd ${HOME}/mnist >/dev/null
curl -O "http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz"
curl -O "http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz"
curl -O "http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz"
curl -O "http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz"
zip -r mnist.zip *
popd >/dev/null
6.2 将MNIS ZIP文件转换到HDFS文件
设置一系列环境变量:
指导命令
# set environment variables (if not already done)
export PYTHON_ROOT=~/Python
export LD_LIBRARY_PATH=${PATH}
export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python
export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=Python/bin/python"
export PATH=${PYTHON_ROOT}/bin/:$PATH
export QUEUE=gpu
# for CPU mode:
# export QUEUE=default
# remove --conf spark.executorEnv.LD_LIBRARY_PATH \
# remove --driver-library-path \
实际执行命令
[root@138 tensorflow]# export PYTHON_ROOT=/root/Python/
[root@138 tensorflow]# export LD_LIBRARY_PATH=${PATH}
[root@138 tensorflow]# export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python
[root@138 tensorflow]# export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=Python/bin/python"
[root@138 tensorflow]# export PATH=${PYTHON_ROOT}/bin/:$PATH
[root@138 tensorflow]# export QUEUE=gpu
[root@138 tensorflow]# export QUEUE=default
将图片和标签转换成TFRecords
指导命令
# save images and labels as TFRecords
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--queue ${QUEUE} \
--num-executors 4 \
--executor-memory 4G \
--archives hdfs:///user/${USER}/Python.zip#Python,mnist/mnist.zip#mnist \
--jars hdfs:///user/${USER}/tensorflow-hadoop-1.0-SNAPSHOT.jar \
--conf spark.executorEnv.LD_LIBRARY_PATH="/usr/local/cuda-7.5/lib64" \
--driver-library-path="/usr/local/cuda-7.5/lib64" \
TensorFlowOnSpark/examples/mnist/mnist_data_setup.py \
--output mnist/tfr \
--format tfr
实际命令:
spark-submit --master yarn --deploy-mode cluster --queue ${QUEUE} --num-executors 4 --executor-memory 4g --archives hdfs:///user/${USER}/Python.zip#Python,mnist/mnist.zip#mnist --jars hdfs:///user/${USER}/tensorflow-hadoop-1.0-SNAPSHOT.jar TensorFlowOnSpark/examples/mnist/mnist_data_setup.py --output mnist/tfr --format tfr
6.3 训练数据生成模型
spark-submit --master yarn --deploy-mode cluster --queue ${QUEUE} --num-executors 6 --executor-memory 18g --py-files TensorFlowOnSpark/tfspark.zip,TensorFlowOnSpark/examples/mnist/tf/mnist_dist.py --conf spark.dynamicAllocation.enabled=false --conf spark.yarn.maxAppAttempts=1 --archives hdfs:///user/${USER}/Python.zip#Python --conf spark.executorEnv.LD_LIBRARY_PATH=" /usr/hdp/2.4.0.0-169/usr/lib/:$JAVA_HOME/jre/lib/amd64/server" TensorFlowOnSpark/examples/mnist/tf/mnist_spark.py --images mnist/tfr/train --format tfr --mode train --model mnist_model
此处有两个坑:
(1) 需要在YARN中配置HADOOP_HDFS_HOME环境变量,否则报如下错
(2) 需要添加依赖动态库,官方文档介绍了如果使用CDH的时候需要添加lib库依赖
由于我使用的是HDP,所以相应的也要加上这个lib库依赖,因为这个问题被坑坏了!!!
训练完成后,终于生成了模型:
6.4 应用模型来测试测试数据
spark-submit --master yarn --deploy-mode cluster --queue ${QUEUE} --num-executors 6 --executor-memory 18g --py-files TensorFlowOnSpark/tfspark.zip,TensorFlowOnSpark/examples/mnist/tf/mnist_dist.py --conf spark.dynamicAllocation.enabled=false --conf spark.yarn.maxAppAttempts=1 --archives hdfs:///user/${USER}/Python.zip#Python --conf spark.executorEnv.LD_LIBRARY_PATH=" /usr/hdp/2.4.0.0-169/usr/lib/:$JAVA_HOME/jre/lib/amd64/server" TensorFlowOnSpark/examples/mnist/tf/mnist_spark.py --images mnist/tfr/test --mode inference
--model mnist_model –output predictions
执行完成后生成预测结果数据集:
OK到此为止环境,用例算是测试通过了,总共陆续花了两天时间。
接下来就是要学以致用了。
相关文章推荐
- 关于建立tensorflowOnspark时候,需要做的环境搭建,看如下链接的文章
- TensorflowOnSpark 介绍与搭建
- Spark2.0.1 on yarn with hue 集群搭建部署(一)基础环境配置
- Tensorflow object detection API 搭建属于自己的物体识别模型(1)——环境搭建与测试
- Jenkins+Maven+SVN搭建自动部署,自动测试环境
- SharePoint 2007部署过程详细图解(上)— 前期环境搭建
- Apache Spark1.1.0部署与开发环境搭建
- Jenkins+Maven+SVN搭建自动部署,自动测试环境
- 从需求分析到业务架构,系统架构,代码架构,软件测试,应用环境的部署和搭建
- spark学习十 yarn环境的搭建以及spark程序测试
- java web入门级开发全过程-环境搭建,开发,发布,部署,总结
- SharePoint 2007部署过程详细图解(上)— 前期环境搭建
- 前端环境搭建——代码开发测试部署
- Hive on Spark运行环境搭建
- Apache Spark1.1.0部署与开发环境搭建
- Spark On Yarn环境搭建
- Jenkins+Maven+SVN搭建自动部署,自动测试环境
- SharePoint 2007部署过程详细图解(上)— 前期环境搭建
- centreon+nagios安装测试-环境搭建
- Spark On YARN 环境搭建