分享

TensorflowOnSpark 安装

 进门交钱 2017-05-24

1. Spark 集群环境 

spark的安装配置参考《Spark 安装》。本环境是用了6台工作站,规划如下:

序号 主机名 IP 用途
1 bdml-c01 192.168.200.170 客户端
2 bdml-m01 192.168.200.171 namenode
resourcemanager
master
3 bdml-s01 192.168.200.172 datanode
nodemanager
worker
4 bdml-s01 192.168.200.173 datanode
nodemanager
worker
5 bdml-s01 192.168.200.174 datanode
nodemanager
worker
6 bdml-s01 192.168.200.175 datanode
nodemanager
worker

TensorflowOnSpark 的安装参考了《Getting Started TensorFlowOnSpark on Hadoop Cluster》。这篇文章也有误导,以至于我专门装了一个虚拟机去编译tensorflow,实际上是如果你不需要RDMA这个特性的话,完全不需要编译。为编译tensorflow,配置google的Bazel编译环境,费了不少时间。

2. 软件版本 

redhat 7.2 / centOS 7.2

Hadoop 2.6.0

spark 1.6.0

Scala 2.10.6

Python 2.7.12 

tensorflow 1.0.1

TensorFlowOnSpark master

3. 安装

安装中最怕的就是版本冲突,当经过数次尝试,版本对了。再重新装一次,把步骤整理出来,事情就变得容易了。

1)软件列表:

Python-2.7.12.tgz

setuptools-23.0.0.tar.gz

pip-8.1.2.tar.gz

pbr-0.11.0-py2.py3-none-any.whl

funcsigs-1.0.2-py2.py3-none-any.whl

six-1.10.0-py2.py3-none-any.whl

mock-2.0.0-py2.py3-none-any.whl

protobuf-3.1.0.post1-py2.py3-none-any.whl

pydoop-1.2.0.tar.gz

numpy-1.11.1-cp27-cp27mu-manylinux1_x86_64.whl

scipy-0.17.1-cp27-cp27mu-manylinux1_x86_64.whl

wheel-0.29.0-py2.py3-none-any.whl

tensorflow-1.0.0-cp27-none-linux_x86_64.whl

2)编译安装 python 2.7.12,先设置好环境 

[plain] view plain copy
  1. yum install zlib-devel -y  
  2. yum install bzip2-devel -y  
  3. yum install openssl-devel -y   
  4. yum install ncurses-devel -y   
  5. yum install sqlite-devel -y  
  6. yum install readline-devel -y   

解压缩Python-2.7.12.tgz,执行make和make install

[plain] view plain copy
  1. ./configure --prefix="/home/hadoop/Python" --enable-unicode=ucs4  
  2. make & make install  
3) 将相关包安装到Python

按顺序先安装setuptools-23.0.0.tar.gz和pip-8.1.2.tar.gz,其它的包可以用pip install安装,如果版本装错了,用pip uninstall删除,查看用pip list。但是pydoop需要编译安装,目前这个包不支持python3。安装这边包需要设置jvm环境,否则会包找不到jni.h。

安装pydoop

[plain] view plain copy
  1. ln -s /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64/include/jni.h ./jni.h  
  2. ln -s /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91-2.6.2.3.el7.x86_64/include/linux/jni_md.h ./jni_md.h  
  3. tar -xvf pydoop-1.2.0.tar.gz  
  4. cd pydoop-1.2.0  
  5. python setup.py build  
  6. python setup.py install  

完成后的结果


制作Python.zip 并上传到hdfs

[plain] view plain copy
  1. cd ~/Python  
  2. zip Python.zip *  
  3. mv Python.zip ../  
  4. hdfs dfs -put Python.zip /user/hadoop/  
  5. hdfs dfs -ls /user/hadoop/  

4)编译tensorflow-hadoop-1.0-SNAPSHOT.jar

到https://github.com/tensorflow/ecosystem下载源码编译打包,example文件编译不通过,需跳过

[plain] view plain copy
  1. mvn package -Dmaven.test.skip=true  
上传tensorflow-hadoop-1.0-SNAPSHOT.jar到hdfs

[plain] view plain copy
  1. hdfs dfs -put tensorflow-hadoop-1.0-SNAPSHOT.jar  
  2. hdfs dfs -ls /user/hadoop  
5)编译TensorflowOnSaprk安装

到https://github.com/yahoo/TensorFlowOnSpark下载,解压缩到/home/hadoop目录(hadoop用户的home目录)就可以了

制作tfspark.zip

[plain] view plain copy
  1. cd TensorFlowOnSpark/src  
  2. zip -r ../tfspark.zip *  
支持安装基本完成
4. 运行mnist测试程序

1)准备数据

下载mnist数据集 ,拷贝到/home/hadoop目录的MLdata/mnist目录

t10k-images-idx3-ubyte.gz

t10k-images-idx3-ubyte.gz

train-images-idx3-ubyte.gz

train-labels-idx1-ubyte.gz

制作zip文件

[plain] view plain copy
  1. cd MLdata/mnist  
  2. zip -r mnist.zip *  
2)feed_dic方式运行,步骤如下

[plain] view plain copy
  1. # step 1 设置环境变量  
  2. export PYTHON_ROOT=~/Python  
  3. export LD_LIBRARY_PATH=${PATH}  
  4. export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python  
  5. export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=Python/bin/python"  
  6. export PATH=${PYTHON_ROOT}/bin/:$PATH  
  7. export QUEUE=default  
  8.   
  9. # step 2 上传文件到hdfs   
  10. hdfs dfs -rm /user/${USER}/mnist/mnist.zip  
  11. hdfs dfs -put ${HOME}/MLdata/mnist/mnist.zip /user/${USER}/mnist/mnist.zip  
  12.   
  13. # step 3 将图像文件(images)和标签(labels)转换为CSV文件  
  14. hdfs dfs -rm -r /user/${USER}/mnist/csv  
  15. ${SPARK_HOME}/bin/spark-submit \  
  16. --master yarn \  
  17. --deploy-mode cluster \  
  18. --queue ${QUEUE} \  
  19. --num-executors 4 \  
  20. --executor-memory 4G \  
  21. --archives hdfs:///user/${USER}/Python.zip#Python,hdfs:///user/${USER}/mnist/mnist.zip#mnist \  
  22. TensorFlowOnSpark/examples/mnist/mnist_data_setup.py \  
  23. --output mnist/csv \  
  24. --format csv  
  25.   
  26.   
  27. # step 4 训练(train)  
  28. hadoop fs -rm -r mnist_model  
  29. ${SPARK_HOME}/bin/spark-submit \  
  30. --master yarn \  
  31. --deploy-mode cluster \  
  32. --queue ${QUEUE} \  
  33. --num-executors 3 \  
  34. --executor-memory 8G \  
  35. --py-files ${HOME}/TensorFlowOnSpark/tfspark.zip,${HOME}/TensorFlowOnSpark/examples/mnist/spark/mnist_dist.py \  
  36. --conf spark.dynamicAllocation.enabled=false \  
  37. --conf spark.yarn.maxAppAttempts=1 \  
  38. --conf spark.yarn.executor.memoryOverhead=6144 \  
  39. --archives hdfs:///user/${USER}/Python.zip#Python \  
  40. --conf spark.executorEnv.LD_LIBRARY_PATH="$JAVA_HOME/jre/lib/amd64/server" \  
  41. ${HOME}/TensorFlowOnSpark/examples/mnist/spark/mnist_spark.py \  
  42. --images mnist/csv/train/images \  
  43. --labels mnist/csv/train/labels \  
  44. --mode train \  
  45. --model mnist_model  
  46.   
  47.   
  48. # step 5 推断(inference)  
  49. hadoop fs -rm -r predictions  
  50. ${SPARK_HOME}/bin/spark-submit \  
  51. --master yarn \  
  52. --deploy-mode cluster \  
  53. --queue ${QUEUE} \  
  54. --num-executors 3 \  
  55. --executor-memory 8G \  
  56. --py-files ${HOME}/TensorFlowOnSpark/tfspark.zip,${HOME}/TensorFlowOnSpark/examples/mnist/spark/mnist_dist.py \  
  57. --conf spark.dynamicAllocation.enabled=false \  
  58. --conf spark.yarn.maxAppAttempts=1 \  
  59. --conf spark.yarn.executor.memoryOverhead=6144 \  
  60. --archives hdfs:///user/${USER}/Python.zip#Python \  
  61. --conf spark.executorEnv.LD_LIBRARY_PATH="$JAVA_HOME/jre/lib/amd64/server" \  
  62. ${HOME}/TensorFlowOnSpark/examples/mnist/spark/mnist_spark.py \  
  63. --images mnist/csv/test/images \  
  64. --labels mnist/csv/test/labels \  
  65. --mode inference \  
  66. --model mnist_model \  
  67. --output predictions  
  68.   
  69.   
  70. # step 6 查看结果(可能有多个文件)  
  71. hdfs dfs -ls predictions  
  72. hdfs dfs -cat predictions/part-00001  
  73. hdfs dfs -cat predictions/part-00002  
  74. hdfs dfs -cat predictions/part-00003  
  75.   
  76. #网页方式,查看spark作业运行情况  
  77. http://bdml-m01:8088/cluster/apps/  

3) queuerunner方式运行,步骤如下

[plain] view plain copy
  1. # step 1 设置环境变量  
  2. export PYTHON_ROOT=~/Python  
  3. export LD_LIBRARY_PATH=${PATH}  
  4. export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python  
  5. export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=Python/bin/python"  
  6. export PATH=${PYTHON_ROOT}/bin/:$PATH  
  7. export QUEUE=default  
  8.   
  9. # step 2 上传文件到hdfs   
  10. hdfs dfs -rm /user/${USER}/mnist/mnist.zip  
  11. hdfs dfs -rm -r /user/${USER}/mnist/tfr  
  12. hdfs dfs -put ${HOME}/MLdata/mnist/mnist.zip /user/${USER}/mnist/mnist.zip  
  13.   
  14. # step 3 将图像文件(images)和标签(labels)转换为TFRecords  
  15. ${SPARK_HOME}/bin/spark-submit \  
  16. --master yarn \  
  17. --deploy-mode cluster \  
  18. --queue ${QUEUE} \  
  19. --num-executors 4 \  
  20. --executor-memory 4G \  
  21. --archives hdfs:///user/${USER}/Python.zip#Python,hdfs:///user/${USER}/mnist/mnist.zip#mnist \  
  22. --jars hdfs:///user/${USER}/tensorflow-hadoop-1.0-SNAPSHOT.jar \  
  23. ${HOME}/TensorFlowOnSpark/examples/mnist/mnist_data_setup.py \  
  24. --output mnist/tfr \  
  25. --format tfr  
  26.   
  27. # step 4 训练(train)  
  28. hadoop fs -rm -r mnist_model  
  29. ${SPARK_HOME}/bin/spark-submit \  
  30. --master yarn \  
  31. --deploy-mode cluster \  
  32. --queue ${QUEUE} \  
  33. --num-executors 4 \  
  34. --executor-memory 4G \  
  35. --py-files ${HOME}/TensorFlowOnSpark/tfspark.zip,${HOME}/TensorFlowOnSpark/examples/mnist/tf/mnist_dist.py \  
  36. --conf spark.dynamicAllocation.enabled=false \  
  37. --conf spark.yarn.maxAppAttempts=1 \  
  38. --conf spark.yarn.executor.memoryOverhead=4096 \  
  39. --archives hdfs:///user/${USER}/Python.zip#Python \  
  40. --conf spark.executorEnv.LD_LIBRARY_PATH="$JAVA_HOME/jre/lib/amd64/server" \  
  41. ${HOME}/TensorFlowOnSpark/examples/mnist/tf/mnist_spark.py \  
  42. --images mnist/tfr/train \  
  43. --format tfr \  
  44. --mode train \  
  45. --model mnist_model  
  46.   
  47. # step 5 推断(inference)  
  48. hadoop fs -rm -r predictions  
  49. ${SPARK_HOME}/bin/spark-submit \  
  50. --master yarn \  
  51. --deploy-mode cluster \  
  52. --queue ${QUEUE} \  
  53. --num-executors 4 \  
  54. --executor-memory 4G \  
  55. --py-files ${HOME}/TensorFlowOnSpark/tfspark.zip,${HOME}/TensorFlowOnSpark/examples/mnist/tf/mnist_dist.py \  
  56. --conf spark.dynamicAllocation.enabled=false \  
  57. --conf spark.yarn.maxAppAttempts=1 \  
  58. --conf spark.yarn.executor.memoryOverhead=4096 \  
  59. --archives hdfs:///user/${USER}/Python.zip#Python \  
  60. --conf spark.executorEnv.LD_LIBRARY_PATH="$JAVA_HOME/jre/lib/amd64/server" \  
  61. ${HOME}/TensorFlowOnSpark/examples/mnist/tf/mnist_spark.py \  
  62. --images mnist/tfr/test \  
  63. --mode inference \  
  64. --model mnist_model \  
  65. --output predictions  
  66.   
  67. # step 6 查看结果(可能有多个文件)  
  68. hdfs dfs -ls predictions  
  69. hdfs dfs -cat predictions/part-00001  
  70. hdfs dfs -cat predictions/part-00002  
  71. hdfs dfs -cat predictions/part-00003  
  72.   
  73. #网页方式,查看spark作业运行情况  
  74. http://bdml-m01:8088/cluster/apps/  








    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多