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./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 http://blog.csdn.net/woszsj/article/details/16848871
yum install openssl-devel -y http://www.cnblogs.com/yuechaotian/archive/2013/06/03/3115472.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./get-pip.py bin/python get-pip.py rm get-pip.py
解决了上一个步骤的问题后,这一步也将会很顺利
1.4 安装pydoop Python与hadoop交互的实现包
二 安装TensorFlowhttps://github.com/yahoo/TensorFlowOnSpark/wiki/GetStarted_YARN 在上一个步骤中,已经安装了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路径。
五 安装TensorFlowOnSparkgit 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./exdb/mnist/train-images-idx3-ubyte.gz" curl -O "http://yann./exdb/mnist/train-labels-idx1-ubyte.gz" curl -O "http://yann./exdb/mnist/t10k-images-idx3-ubyte.gz" curl -O "http://yann./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到此为止环境,用例算是测试通过了,总共陆续花了两天时间。
接下来就是要学以致用了。
|
|
来自: 进门交钱 > 《Tensorflow》