日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

雅虎開源的TensorFlowOnSpark環(huán)境配置

 進(jìn)門交錢 2017-04-25

--------"道路是曲折的,前途是光明的。"
此筆記旨在做備份和記錄,也希望為和我一樣迷茫的你偶爾點(diǎn)一下睛。歡迎各位深度君一起交流學(xué)習(xí):)

參考資料
在開始之前,應(yīng)該已經(jīng)熟悉TensorFlow并且可以訪問安裝了Spark的Hadoop集群,其安裝可參考Spark On Yarn集群配置。如果你的集群有GPU節(jié)點(diǎn),那必須在本地安裝cuda。
首先請(qǐng)先修改環(huán)境變量
vim ~/.bashrc
添加如下變量(請(qǐng)自行修改為自己的路徑)
export HADOOP_HOME=/home/ubuntu/workspace/hadoop
export HADOOP_VERSION=2.6.0
export HADOOP_CONF_DIR=/home/ubuntu/workspace/hadoop/etc
可能還需要進(jìn)一步修改nodemanager(即slaves節(jié)點(diǎn)上)的yarn-site.xml。

1. 安裝python

這里我在按照教程安裝python的時(shí)候在之后的執(zhí)行過程中總是會(huì)出現(xiàn)花式錯(cuò)誤,調(diào)bug你懂的!后來嘗試很多方法之后決定換一種方式,采用了Python-Virtualenv,關(guān)于它的奇妙之處,請(qǐng)參考文章Python--Virtualenv簡(jiǎn)明教程。執(zhí)行操作如下:
pip #先檢查你是否有pip
$ sudo apt-get install python-pip python-dev #倘若沒有pip,執(zhí)行此步
$ sudo pip install virtualenv #安裝virtualenv
$ cd ~/workspace/spark
$ virtualenv python #創(chuàng)建一個(gè)名為python的目錄, 并且安裝了python/bin/python, 創(chuàng)建了lib,include,bin目錄,安裝了pip
!我之所以在spark下創(chuàng)建python的目錄的目的是一直不清楚TFoS官網(wǎng)上需要安裝的python與Spark的python詳細(xì)關(guān)系,這么創(chuàng)建之后發(fā)現(xiàn)二者可以共存,所以先如是做以防各種不清不楚的狀況。
$ cd ~/workspace/spark/python
$ source ./bin/activate #進(jìn)行這一步之后你會(huì)發(fā)現(xiàn)命令行前面出現(xiàn)(python),如若需要關(guān)閉使用deactivate,注意運(yùn)行過程中要一直開著這個(gè)
$ pip install pydoop #安裝pydoop,以能用python使用hadoop

2.安裝TensorFlow

cd到python目錄安裝
$ git clone git@github.com:yahoo/tensorflow.git
如若git不可用,請(qǐng)移至git clone git@不可用

3. 安裝和編譯Hadoop InputFormat/OutputFormat for TFRecords

請(qǐng)注意,我把這些都放在了python目錄下,等后期搞明白在看看是否需要如此。
這一步主要是為了生成tensorflow-hadoop-1.0-SNAPSHOT.jar,然后放到集群上,以便之后的數(shù)據(jù)集轉(zhuǎn)換使用。

1) 下載ecosystem

$ git clone https://github.com/tensorflow/ecosystem.git

2) 下載protoc 3.1.0

注意,一定是3..,之前用的2.5.0,發(fā)現(xiàn)在編譯生成時(shí)會(huì)出現(xiàn)版本錯(cuò)誤。
protoc3.1.0下載地址
此處protobuffer安裝注意下載release版本,不然在make時(shí)會(huì)出現(xiàn)花式錯(cuò)誤。
$ tar -zxf ~/Downloads/protobuf-cpp-3.1.0.tar.gz -C ~/workspace/ #將protoc3.1.0解壓至workspace中
$ cd protobuf-3.1.0 #進(jìn)入protobuf目錄下準(zhǔn)備進(jìn)行編譯
$ ./configure #默認(rèn)路徑是/usr/local/lib
$ make
此處虛擬機(jī)中安裝報(bào)錯(cuò)關(guān)鍵詞virtual memory exhausted cannot allocate memory,解決方案:free -m查看內(nèi)存使用情況,確實(shí)占用過多的情況下,可嘗試重啟解決,我的是這樣解決的。若解決不了需自行增加虛擬機(jī)內(nèi)存。
$ make check
$ sudo make install
make install之后總覺得哪里不對(duì)勁,之后protoc -version
發(fā)現(xiàn)如下錯(cuò)誤protoc: error while loading shared libraries: libprotoc.so.11: cannot open shared object file: No such file or directory
這是因?yàn)閜rotobuf的默認(rèn)路徑是/usr/local/lib,而/usr/local/lib不在ubuntu體系默認(rèn)的LD_LIBRARY_PATH 里,所以就找不到該lib。在環(huán)境變量中修改即可。
$ sudo vim ~/.bashrc
增加如下內(nèi)容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
$ source ~/.bashrc

3) 下載maven

Apache Maven,這是一個(gè)軟件(特別是Java軟件)項(xiàng)目管理及自動(dòng)構(gòu)建工具,由Apache軟件基金會(huì)所提供。
a、確保已經(jīng)安裝好jdkb、到maven官網(wǎng)下載apache-maven-3.3.9-bin.tar.gzc、解壓縮到~/workspace中
$ tar -zxf ~/Downloads/apache-maven-3.3.9-bin.tar.gz -C ~/workspace
d、修改環(huán)境變量$ sudo vim ~/.bashrc
在末尾添加
export M2_HOME=/[maven安裝目錄]/apache-maven-3.3.9
export PATH=$M2_HOME/bin:$PATH
$ source ~/.bashrc #使環(huán)境變量生效
e、檢測(cè)是否安裝成功
$ mvn -v
出現(xiàn)如下結(jié)果則表示成功:
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)Maven home: /home/ubuntu/workspace/mavenJava version: 1.7.0_79, vendor: Oracle CorporationJava home: /home/ubuntu/workspace/jdk1.7.0_79/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "4.2.0-42-generic", arch: "amd64", family: "unix"

4) 生成tensorflow-hadoop-1.0-SNAPSHOT.jar

一定要注意你的路徑,官網(wǎng)給出如下protoc --proto_path=$TF_SRC_ROOT --java_out=src/main/java/ $TF_SRC_ROOT/tensorflow/core/example/{example,feature}.proto
--proto_path是你下載的tensorflow的路徑,--java_out是ecosystem下的/hadoop/src/main/java。以下是我的路徑。
a.$ protoc --proto_path=/home/ubuntu/workspace/spark/python/tensorflow --java_out=/home/ubuntu/workspace/spark/python/ecosystem/hadoop/src/main/java/ /home/ubuntu/workspace/spark/python/tensorflow/tensorflow/core/example/{example,feature}.proto
b.編譯
請(qǐng)cd 到你的[ecosystem路徑]/hadoop下執(zhí)行
$ mvn clean package
這樣就生成了 tensorflow-hadoop-1.0-SNAPSHOT.jar,位于[ecosystem路徑]/hadoop/target下。

5) 將 tensorflow-hadoop-1.0-SNAPSHOT.jar放到集群上

hadoop fs -put [ecpsystem路徑]/hadoop/target/tensorflow-hadoop-1.0-SNAPSHOT.jar

4. 為Spark創(chuàng)建Python壓縮包,并上傳到集群上

$ cd [python路徑]
$ zip -r Python.zip *
$ hadoop fs -put ./Python.zip

5. 安裝TensorFlowOnSpark

將TFoS安裝在workspace下
$ git clone git@github.com:yahoo/TensorFlowOnSpark.git
$ cd /TensorFlowOnSpark/src
$ zip -r ../tfspark.zip *
$ cd .. #在此目錄下查看可以看到tfspark.zip文件夾

6. 下載mnist

將mnist下載到~/workspace/mnist文件夾下,并進(jìn)行壓縮。
注意:這個(gè)需要在網(wǎng)絡(luò)情況比較好的情況下下載。
$ mkdir ~/workspace/spark/mnist #mnist的位置自己定義即可
$ cd ~/workspace/spark/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"
$ popd >/dev/null

7. 轉(zhuǎn)換MNIST zip文件成為HDFS文件

1)設(shè)置環(huán)境變量
export PYTHON_ROOT=/home/ubuntu/workspace/spark/python export LD_LIBRARY_PATH=${PATH} export PYSPARK_PYTHON=${PYTHON_ROOT}/bin/python export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=/home/ubuntu/workspace/spark/python/bin/python2.7" export PATH=$PATH:${PYTHON_ROOT}/bin/ export QUEUE=gpu
CPU模式下的修改請(qǐng)參考官網(wǎng)。
2)進(jìn)入python目錄,安裝numpy和tensrflow
a.安裝numpy
$ pip install python-numpy #這一步是否需要還有待進(jìn)一步確定
下載numpy-..*-tar.gz,并解壓縮到python目錄下,之后

$ mv numpy-*.*.* numpy
$ cd numpy
$ python setup.py install #此處可能會(huì)出現(xiàn)一些紅色字體的東西,我是忽略掉了的
$ python
>>>import numpy
b.安裝tensorflow
依舊是在python目錄下
$ pip install tensorflow #默認(rèn)安裝的是tensorflow1.0.0版本
$ python
>>>import tensorflow as tf
3) 把image和labels轉(zhuǎn)化為CSV文件
注意所需文件存放的位置
cd ~/workspace/spark
./bin/spark-submit \ --master yarn --deploy-mode cluster --num-executors 4 --executor-memory 2G --archives hdfs:///user/ubuntu/Python.zip#Python,mnist/mnist.zip#mnist --conf spark.executorEnv.LD_LIBRARY_PATH="/usr/local/cuda-7.5/lib64" --driver-library-path="/usr/local/cuda-7.5/lib64" /home/ubuntu/workspace/TensorFlowOnSpark/examples/mnist/mnist_data_setup.py --output mnist/csv --format csv
(每次帶--queue gpu會(huì)報(bào)錯(cuò),待了解中……)

4) 把images和labels轉(zhuǎn)化為TFRecords
./bin/spark-submit --master yarn --deploy-mode cluster --num-executors 4 --executor-memory 2G --archives hdfs:///user/ubuntu/Python.zip#Python,mnist/mnist.zip#mnist --jars hdfs:///user/ubuntu/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" /home/ubuntu/workspace/TensorFlowOnSpark/examples/mnist/mnist_data_setup.py --output mnist/tfr --format tfr
如果3)、4)出現(xiàn)錯(cuò)誤且非import numpy/tensorflow錯(cuò)誤,可嘗試修改num-executors或者executor-memory或者重啟。

8. 運(yùn)行分布式MNIST training

./bin/spark-submit --master yarn --deploy-mode client --conf spark.yarn.executor.memoryOverhead=2048 --conf spark.scheduler.minRegisteredResourcesRatio=1.0 --conf spark.executor.instances=2 --num-executors 2 --executor-memory 512M --py-files /home/ubuntu/workspace/TensorFlowOnSpark/tfspark.zip,/home/ubuntu/workspace/TensorFlowOnSpark/examples/mnist/spark/mnist_dist.py --conf spark.dynamicAllocation.enabled=false --conf spark.yarn.maxAppAttempts=1 --archives hdfs:///user/ubuntu/Python.zip#Python --conf spark.executorEnv.LD_LIBRARY_PATH="/usr/local/cuda-7.5/lib64:$JAVA_HOME/jre/lib/amd64/server" --driver-library-path="/usr/local/cuda-7.5/lib64" /home/ubuntu/workspace/TensorFlowOnSpark/examples/mnist/spark/mnist_spark.py --images mnist/csv/train/images --labels mnist/csv/train/labels --mode train --model mnist_model

9.Run distributed MNIST inference (using feed_dict)

./bin/spark-submit --master yarn --deploy-mode client --conf spark.yarn.executor.memoryOverhead=2048 --conf spark.scheduler.minRegisteredResourcesRatio=1.0 --conf spark.executor.instances=2 --num-executors 2 --executor-memory 512M --py-files /home/ubuntu/workspace/TensorFlowOnSpark/tfspark.zip,/home/ubuntu/workspace/TensorFlowOnSpark/examples/mnist/spark/mnist_dist.py --conf spark.dynamicAllocation.enabled=false --conf spark.yarn.maxAppAttempts=1 --archives hdfs:///user/ubuntu/Python.zip#Python --conf spark.executorEnv.LD_LIBRARY_PATH="/usr/local/cuda-7.5/lib64:$JAVA_HOME/jre/lib/amd64/server" --driver-library-path="/usr/local/cuda-7.5/lib64" /home/ubuntu/workspace/TensorFlowOnSpark/examples/mnist/spark/mnist_spark.py --images mnist/csv/test/images --labels mnist/csv/test/labels --mode inference --model mnist_model --output predictions

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多