您的位置:首页 > 其它

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

一 安装配置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_YARN

https://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.git

pushd 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到此为止环境,用例算是测试通过了,总共陆续花了两天时间。

接下来就是要学以致用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdp tensorflow spark