tensorflow on spark安装

基于centos7.5,安装OS时安装包比较齐全。

1 Python安装。需要Python 3.5+ 

 1.1 wget --no-check-certificate https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

 1.2 解压编译安装到:/usr/local/python3

      ./configure --prefix=/usr/local/python3 --enable-optimizations
       make
        make install

 1.3  /usr/bin下创建Python3链接,然后可以直接运行python3命令

      ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3

    BIN目录下原来的软链接依然指向python2,暂时不动,可以同时支持2个版本: python -->python2        python2-->python2.7

1.4 安装下载工具pip3软链接:

      ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 

1.5  默认版本较低,升级下

  pip3 -V   

  pip3 install --upgrade pip

2 tensorflow安装

2.1  安装tensorflow版本1.8 .(这里使用tensor flow 1.x, 不加版本号,会安装最新版本2.X)

      sudo pip3  install tensorflow==1.8     

安装后,测试是否成功安装:python3 test.py
import tensorflow as tf

#初始化一个Tensorflow的常量:Hello Google Tensorflow! 字符串,并命名为greeting作为一个计算模块
greeting = tf.constant('Hello Google Tensorflow!')
#启动一个会话
sess = tf.Session()
#使用会话执行greeting计算模块
result = sess.run(greeting)
print(result)
sess.close()

3  Create a Python.zip package for Spark

进入python安装目录, 
 zip -r   Python.zip *
hadoop fs -put ./Python.zip
上传到/user/hadoop/Python.zip

此步骤在集群没有安装python的情况下比较有用,结合anaconda避免每节点安装麻烦。如果是新的集群,都安装了python就没太大作用。

 4 Install TensorFlowOnSpark

4.1下载TensorflowOnspark

对应tensorflow2.0以下的版本,TensorflowOnspark必须是1.4.4。
对于Tensorflow2.0及以上版本,TensorflowOnspark必须是v2.0.0. 我们装的1.8,  所以使用1.4.4.

官方文档的安装步骤如下,实际下载的是最新版本2.0,所以需要手动下载
git clone https://github.com/yahoo/TensorFlowOnSpark
git clone https://github.com/yahoo/tensorflow.git  

直接通过 上述地址分别下载源码:  1.4.4 和1.8的包 

4.2 将下载的tensorflow源码包移动到TensorFlowOnSpark下(下一步生成tensorflow-hadoop-1.0-SNAPSHOT.jar包要此路径)

4.3 打包TensorFlowOnSpark ,  后续使用spark 运行tensorflow需要依赖此包提供组件接口运行。

cd TensorFlowOnSpark
zip -r tfspark.zip tensorflowonspark

5 生成tensorflow-hadoop-1.10.0.jar

Install and compile Hadoop InputFormat/OutputFormat for TFRecords

此包的主要作用为tensorflow将minist数据按照指定trf的格式写到hadoop.  如果是写csv格式,可以不用。

5.1 Protoc安装

protoc用于通过指定的描述文件,生成不同语言的代码文件。这里用来生成java代码。

下载地址:https://github.com/google/protobuf/releases

安装文档:https://www.jianshu.com/p/04150a3f98b1    

protof设置如下环境变量。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/
export PATH=$PATH:/usr/local/protobuf/bin/
#c程序头文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/     
注:protoc的版本依赖下属打包的pom.xml的依赖版本,如果版本不对,可能导致编译包失败。刚开始是下载最新版本,后续使用pom.xml要求的3.5.1解决问题。

5.2 下载 ecosystem
git clone https://github.com/tensorflow/ecosystem.git

5.3 运行生成java代码

protoc --proto_path=/home/hadoop/Downloads/TensorFlowOnSpark/tensorflow --java_out=/home/hadoop/Downloads/ecosystem/hadoop/src/main/java/ /home/hadoop/Downloads/TensorFlowOnSpark/tensorflow/tensorflow/core/example/{example,feature}.proto

5.4 maven安装

5.4.1 下载maven,解压  设置环境变量,   mvn -version

export M2_HOME=/home/hadoop/Downloads/apache-maven-3.6.3
export PATH=$PATH:$M2_HOME/bin

5.4.2 构建jar包

设置mvn 库镜像地址为aliyun,默认库很慢

<mirrors>
   <mirror>
     <id>alimaven</id>
     <name>aliyun maven</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
     <mirrorOf>central</mirrorOf>
   </mirror>
</mirrors>

mvn install
target目录下生成 
hadoop fs -put tensorflow-hadoop-1.10.0.jar

6 Download/zip the MNIST dataset

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 *

7 运行将图片格式文件转换为CSV格式

注: idx3是一种约定的数据格式。

头文件(16进制表示),第一个 4字节:  0000 0803             这里成为magic number:     前2个字节默认0    第三个字节08代表数据类型unsi byte 03代表数组维度 (01代表格式idx1,03为idx3格式)

第二个4字节   0000 0a60 代表 数据总数, 即图片数据集为6000个图片

第三个4个连续字节  0000 001c 表示图片长度为28个字节

第四个4个连续字节  0000 001c 表示图片宽度为28个字节  可见 28*28 =784个连续字节代表一个图片。每个字节的值为图片像素的值(灰度值: 2种颜色的混合,256白色  0黑色)

8 环境变量设置PYSPARK_PYTHON

指定集群下ps 创建使用的python版本,必须广播出去,否则可能找不到python下安装的组件如numpy等等。

export PYTHON_ROOT=/usr/local/python3
export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python3

上述必须在提交节点环境变量指定广播(其它节点可以不用设置)。  否则报错: ImportError: No module named numpy
也可以在spark-submit 提交时添加参数:--conf spark.pyspark.python=/usr/local/python3/bin/python3 \ #executor集群端的pyspark配置(python路径),即任务执行的机器
–conf spark.pyspark.driver.python=/data/home/niulijun/local_venv/bin/python #dirver端的pyspark配置,driver端就是你的sparkcontext所在的机器,driver如果是spark-submit yarn-client是当前提交的机器上,如果是yarn-cluster 是随机找一台机器

如果安装了GPU支持,配置cuda

export LIB_CUDA=/usr/local/cuda-7.5/lib64

下述环境变量指定yarn环境下启用的pyspark_python路径,现在基本上已经废弃此参数

export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=Python/bin/python3"

9 数据导出为csv格式:

/opt/cloudera/parcels/CDH/lib/spark/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--–conf spark.pyspark.python=/usr/local/python3/bin/python3 \
--num-executors 4 \
--executor-memory 1G \
--archives hdfs:///user/hadoop/Python.zip#Python,/home/hadoop/Downloads/mnist/mnist.zip#mnist \
/home/hadoop/Downloads/TensorFlowOnSpark/examples/mnist/mnist_data_setup.py \
--output mnist/csv \
--format csv

如若使用GPU,加入此参数:

--driver-library-path=$LIB_CUDA \

 --queue gpu \

--conf spark.executorEnv.LD_LIBRARY_PATH=$LIB_CUDA \

注意:archives参数将制定的zip包上载到每一个worker(HDFS可以避免每次job传递zip消耗),解压后命名为 mnist根目录, 相对此目录找到对应的数据集合。
Python.zip可以创建一个临时的python目录,结合Anaconda,构建一个临时的python环境,适合原来集群没有安装python的大集群场景。

10 数据训练:

设置环境变量:

# set paths to libjvm.so, libhdfs.so, and libcuda*.so
#export LIB_HDFS=/opt/cloudera/parcels/CDH/lib64                      # for CDH (per @wangyum)
export LIB_HDFS=$HADOOP_PREFIX/lib/native/Linux-amd64-64              # path to libhdfs.so, for TF acccess to HDFS
export LIB_JVM=$JAVA_HOME/jre/lib/amd64/server                        # path to libjvm.so
export LIB_CUDA=/usr/local/cuda-7.5/lib64                             # for GPUs only

训练--conf spark.executorEnv.LD_LIBRARY_PATH=$LIB_CUDA:$LIB_JVM:$LIB_HDFS \

上述动态链接库参数具体什么作用,暂时不清楚。这里没有使用。

如果GPU,设置--driver-library-path=$LIB_CUDA \

这里直接CPU,如下命令即可:

/opt/cloudera/parcels/CDH/lib/spark/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--num-executors 6 \
--executor-memory 27G \
--py-files /home/hadoop/Downloads/TensorFlowOnSpark/tfspark.zip,/home/hadoop/Downloads/TensorFlowOnSpark/examples/mnist/spark/mnist_dist.py \
--conf spark.dynamicAllocation.enabled=false \
--conf spark.yarn.maxAppAttempts=1 \
--archives hdfs:///user/hadoop/Python.zip#Python \
/home/hadoop/Downloads/TensorFlowOnSpark/examples/mnist/spark/mnist_spark.py \
--images mnist/csv/train/images \
--labels mnist/csv/train/labels \
--mode train \
--model mnist_model

参考文档:https://github.com/yahoo/TensorFlowOnSpark/wiki/GetStarted_YARN

发布了16 篇原创文章 · 获赞 0 · 访问量 2837

猜你喜欢

转载自blog.csdn.net/peidezhi/article/details/103390774