TensorFlowOnSpark를 Docker run 해 보았습니다.
8052 단어 우분투TensorFlowJupyter스파크도커
TensorFlowOnSpark를 Docker run 해 보았습니다.
TensorFlowOnSpark의 독립형 버전을 Docker 이미지로 사용해 보았습니다.
TensorFlowOnSpark는 TensorFlow를 Spark에서 실행할 수 있도록 한 것으로, Yahoo가 지난 주 정도 발표했습니다 (2017/02/13).
htps : // 기주 b. 코 m / 야호오 / 텐소 rF ぉ 룬 S park / uki
나온 당일에 독립형 버전을 구축해 보았습니다.
ぃ tp // 이 m/cゔsk/있어 ms/39아 1861715에 21b1dc191
드디어 Dockerfile로 한 것이 이번입니다.
연습이 있어.
TensorFlowOnSpark on Docker
호스트 OS는 CentOS7.3을 사용합니다.
Docker 설치, 시작 이외는 다음과 같습니다.
sudo yum -y install docker
sudo systemctl start docker
sudo systemctl enable docker
Dockerfile을 만들 디렉토리를 준비합니다.
sudo su -
mkdir -p /opt/tfos
cd /opt/tfos
이번에는 우분투 이미지를 사용합니다.
htps : // 후 b. 도 c r. 코 m/_/우분츠/
미리 pull 해 둡니다.
docker pull ubuntu
Dockerfile 만들기
/opt/tfos/아래에 Dockerfile을 만들고 다음을 작성하고 저장합니다.
(2017/02/23 수정했습니다.)
FROM ubuntu
MAINTAINER cvusk
# insert hostname on environmental variable
ENV HOSTNAME tensorflow.spark
# install prerequisites
RUN apt-get -y update
RUN apt-get -y upgrade
RUN apt-get -y install apt-utils
RUN apt-get -y install software-properties-common python-software-properties
RUN add-apt-repository ppa:openjdk-r/ppa
RUN apt-get -y update
RUN apt-get -y install wget curl zip unzip vim openjdk-7-jre openjdk-7-jdk git python-pip python-dev python-virtualenv
ENV JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
# git clone tensorflowonspark.git
WORKDIR /opt/
RUN git clone --recurse-submodules https://github.com/yahoo/TensorFlowOnSpark.git
WORKDIR /opt/TensorFlowOnSpark/
RUN git submodule init
RUN git submodule update --force
RUN git submodule foreach --recursive git clean -dfx
# environmental variable for tensorflowonspark home
ENV TFoS_HOME=/opt/TensorFlowOnSpark
WORKDIR /opt/TensorFlowOnSpark/src/
RUN zip -r /opt/TensorFlowOnSpark/tfspark.zip /opt/TensorFlowOnSpark/src/*
WORKDIR /opt/TensorFlowOnSpark/
# setup spark
RUN sh /opt/TensorFlowOnSpark/scripts/local-setup-spark.sh
ENV SPARK_HOME=/opt/TensorFlowOnSpark/spark-1.6.0-bin-hadoop2.6
ENV PATH=/opt/TensorFlowOnSpark/src:${PATH}
ENV PATH=${SPARK_HOME}/bin:${PATH}
ENV PYTHONPATH=/opt/TensorFlowOnSpark/src
# install tensorflow, jupyter and py4j
RUN pip install pip --upgrade
RUN python -m pip install tensorflow
RUN pip install jupyter jupyter[notebook]
RUN pip install py4j
# download mnist data
RUN mkdir /opt/TensorFlowOnSpark/mnist
WORKDIR /opt/TensorFlowOnSpark/mnist/
RUN curl -O "http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz"
RUN curl -O "http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz"
RUN curl -O "http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz"
RUN curl -O "http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz"
# create shellscript for starting spark standalone cluster
RUN echo '${SPARK_HOME}/sbin/start-master.sh' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'MASTER=spark://${HOSTNAME}:7077' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'SPARK_WORKER_INSTANCES=2' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'CORES_PER_WORKER=1' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'TOTAL_CORES=$((${CORES_PER_WORKER}*${SPARK_WORKER_INSTANCES}))' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo '${SPARK_HOME}/sbin/start-slave.sh -c $CORES_PER_WORKER -m 3G ${MASTER}' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo '${SPARK_HOME}/sbin/start-slave.sh -c $CORES_PER_WORKER -m 3G ${MASTER}' >> ${TFoS_HOME}/spark_cluster.sh
ENV MASTER=spark://${HOSTNAME}:7077
ENV SPARK_WORKER_INSTANCES=2
ENV CORES_PER_WORKER=1
ENV TOTAL_CORES=2
# create shellscript for pyspark on jupyter and mnist data
WORKDIR /opt/TensorFlowOnSpark/
RUN echo "PYSPARK_DRIVER_PYTHON=\"jupyter\" PYSPARK_DRIVER_PYTHON_OPTS=\"notebook --no-browser --ip=* --NotebookApp.token=''\" pyspark --master ${MASTER} --conf spark.cores.max=${TOTAL_CORES} --conf spark.task.cpus=${CORES_PER_WORKER} --py-files ${TFoS_HOME}/tfspark.zip,${TFoS_HOME}/examples/mnist/spark/mnist_dist.py --conf spark.executorEnv.JAVA_HOME=\"$JAVA_HOME\"" > ${TFoS_HOME}/pyspark_notebook.sh
RUN echo "${SPARK_HOME}/bin/spark-submit --master ${MASTER} ${TFoS_HOME}/examples/mnist/mnist_data_setup.py --output examples/mnist/csv --format csv" > ${TFoS_HOME}/mnist_data_setup.sh
내가하고있는 일로, TensorFlowOnSpark 독립 실행 형 버전의 구축 절차를 Docker 용으로 다시 작성하고 있습니다.
htps : // 기주 b. 코 m / 야호오 / 텐소 rF ぉ ん S park / うぃき / 게 tS ta d_s 탄다
spark master, slave의 기동을 쉘 스크립트로 해 두고 싶었으므로, 그 변수를 위해서 환경 변수에 HOSTNAME=tensorflow.spark를 정의하고 있습니다.
좀 더 멋진 방법으로 호스트명을 사용하고 싶습니다만・・・.
이것을 빌드합니다.
cd /opt/tfos
docker build -t tfos/tfos .
이런 느낌으로 완성됩니다.
docker images
움직여 보겠습니다.
Docker 이미지가 완성되면 아래에서 실행합니다.
docker run -it -p 8889:8888 -h tensorflow.spark 5db5add35c10 /bin/bash
포트 번호는 8889:8888(호스트 OS의 포트: 컨테이너의 포트)에서 공개합니다. 이것은 pyspark (Jupyter Notebook) 용입니다.
호스트 이름에 tensorflow.spark를 지정하지만 Dockerfile에 작성한 것을 사용합니다.
네, 시작했습니다.
/opt/TensorFlowOnSpark 아래의 spark_cluster.sh를 실행하면 이 Docker 컨테이너가 spark master 겸 slave가 됩니다.
또한 slave는 2 인스턴스 시작하고 있습니다.
cd /opt/TensorFlowOnSpark
sh ./spark_cluster.sh
/opt/TensorFlowOnSpark/하위에 MNIST 데이터 설정용 쉘 스크립트를 제공합니다.
이를 수행하여 MNIST 교육 및 테스트 데이터를 생성합니다.
cd /opt/TensorFlowOnSpark/
sh ./mnist_data_setup.sh
/opt/TensorFlowOnSpark/하위에 pyspark의 시작 쉘 스크립트로 pyspark_notebook.sh를 배치하고 있습니다.
이렇게하면 pyspark가 Jupyter Notebook에서 시작됩니다.
cd /opt/TensorFlowOnSpark/
sh ./pyspark_notebook.sh
시작할 수 있었습니다.
브라우저에서 http://<호스트 OS의 IP 주소>:8889에 액세스합니다.
이 방법으로 Jupyter Notebook에 액세스할 수 있습니다.
마지막으로···할 수 없었던 것(누군가 가르쳐 주세요 m(_ _)m) → 해결했습니다.
여기서 MNIST 데모용으로 준비되어 있는 TFOS_spark_demo.ipynb를 실행하고 싶습니다만, com.yahoo.ml.tf를 가져올 수 없어 에러가 됩니다.
(T_T)
구구라고 해도 정보가 나오지 않고, 누군가 해결책을 알지 않겠습니까···?
어쩐지 반 익숙한 끝 방법입니다만, 일단 TensorFlowOnSparkOnDocker를 구축할 수 있었습니다(?).
해결되었습니다.
PYTHONPATH의 지정이 부족한 것 같습니다.
Dockerfile에 ENV PYTHONPATH=/opt/TensorFlowOnSpark/src를 추가했습니다.
이제 MNIST 데모 @ Jupyter Notebook도 성공합니다.
Reference
이 문제에 관하여(TensorFlowOnSpark를 Docker run 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cvusk/items/aa631ff5e1a3b7d93ac1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
sudo yum -y install docker
sudo systemctl start docker
sudo systemctl enable docker
sudo su -
mkdir -p /opt/tfos
cd /opt/tfos
docker pull ubuntu
FROM ubuntu
MAINTAINER cvusk
# insert hostname on environmental variable
ENV HOSTNAME tensorflow.spark
# install prerequisites
RUN apt-get -y update
RUN apt-get -y upgrade
RUN apt-get -y install apt-utils
RUN apt-get -y install software-properties-common python-software-properties
RUN add-apt-repository ppa:openjdk-r/ppa
RUN apt-get -y update
RUN apt-get -y install wget curl zip unzip vim openjdk-7-jre openjdk-7-jdk git python-pip python-dev python-virtualenv
ENV JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
# git clone tensorflowonspark.git
WORKDIR /opt/
RUN git clone --recurse-submodules https://github.com/yahoo/TensorFlowOnSpark.git
WORKDIR /opt/TensorFlowOnSpark/
RUN git submodule init
RUN git submodule update --force
RUN git submodule foreach --recursive git clean -dfx
# environmental variable for tensorflowonspark home
ENV TFoS_HOME=/opt/TensorFlowOnSpark
WORKDIR /opt/TensorFlowOnSpark/src/
RUN zip -r /opt/TensorFlowOnSpark/tfspark.zip /opt/TensorFlowOnSpark/src/*
WORKDIR /opt/TensorFlowOnSpark/
# setup spark
RUN sh /opt/TensorFlowOnSpark/scripts/local-setup-spark.sh
ENV SPARK_HOME=/opt/TensorFlowOnSpark/spark-1.6.0-bin-hadoop2.6
ENV PATH=/opt/TensorFlowOnSpark/src:${PATH}
ENV PATH=${SPARK_HOME}/bin:${PATH}
ENV PYTHONPATH=/opt/TensorFlowOnSpark/src
# install tensorflow, jupyter and py4j
RUN pip install pip --upgrade
RUN python -m pip install tensorflow
RUN pip install jupyter jupyter[notebook]
RUN pip install py4j
# download mnist data
RUN mkdir /opt/TensorFlowOnSpark/mnist
WORKDIR /opt/TensorFlowOnSpark/mnist/
RUN curl -O "http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz"
RUN curl -O "http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz"
RUN curl -O "http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz"
RUN curl -O "http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz"
# create shellscript for starting spark standalone cluster
RUN echo '${SPARK_HOME}/sbin/start-master.sh' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'MASTER=spark://${HOSTNAME}:7077' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'SPARK_WORKER_INSTANCES=2' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'CORES_PER_WORKER=1' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo 'TOTAL_CORES=$((${CORES_PER_WORKER}*${SPARK_WORKER_INSTANCES}))' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo '${SPARK_HOME}/sbin/start-slave.sh -c $CORES_PER_WORKER -m 3G ${MASTER}' >> ${TFoS_HOME}/spark_cluster.sh
RUN echo '${SPARK_HOME}/sbin/start-slave.sh -c $CORES_PER_WORKER -m 3G ${MASTER}' >> ${TFoS_HOME}/spark_cluster.sh
ENV MASTER=spark://${HOSTNAME}:7077
ENV SPARK_WORKER_INSTANCES=2
ENV CORES_PER_WORKER=1
ENV TOTAL_CORES=2
# create shellscript for pyspark on jupyter and mnist data
WORKDIR /opt/TensorFlowOnSpark/
RUN echo "PYSPARK_DRIVER_PYTHON=\"jupyter\" PYSPARK_DRIVER_PYTHON_OPTS=\"notebook --no-browser --ip=* --NotebookApp.token=''\" pyspark --master ${MASTER} --conf spark.cores.max=${TOTAL_CORES} --conf spark.task.cpus=${CORES_PER_WORKER} --py-files ${TFoS_HOME}/tfspark.zip,${TFoS_HOME}/examples/mnist/spark/mnist_dist.py --conf spark.executorEnv.JAVA_HOME=\"$JAVA_HOME\"" > ${TFoS_HOME}/pyspark_notebook.sh
RUN echo "${SPARK_HOME}/bin/spark-submit --master ${MASTER} ${TFoS_HOME}/examples/mnist/mnist_data_setup.py --output examples/mnist/csv --format csv" > ${TFoS_HOME}/mnist_data_setup.sh
cd /opt/tfos
docker build -t tfos/tfos .
docker images
docker run -it -p 8889:8888 -h tensorflow.spark 5db5add35c10 /bin/bash
cd /opt/TensorFlowOnSpark
sh ./spark_cluster.sh
cd /opt/TensorFlowOnSpark/
sh ./mnist_data_setup.sh
cd /opt/TensorFlowOnSpark/
sh ./pyspark_notebook.sh
Reference
이 문제에 관하여(TensorFlowOnSpark를 Docker run 해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cvusk/items/aa631ff5e1a3b7d93ac1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)