本文分享在在Docker中運行Tensorflow和進行源碼編譯的方法和步驟,包括:編譯、構建docker鏡像、建立和運行Docker容器。部署完的容器能夠經過Jupyter Notebook進行訪問。java
docker run --name tensorflow -it -p 9888:8888 gcr.io/tensorflow/tensorflow
而後,打開瀏覽器,按照提示將URL地址輸入瀏覽器便可訪問。python
若是讓其做爲服務方式運行,能夠加上參數--restart always讓其自動重啓。git
docker run --name tensorflow --restart always -it -p 9888:8888 gcr.io/tensorflow/tensorflow
有的地方訪問不到gcr.io的鏡像,可使用 hub.docker.com 的鏡像。github
docker run --name tensorflow --restart always -it -p 9888:8888 tensorflow/tensorflow
基於GPU的Docker運行須要使用專用的Docker engine版本,安裝參考:【https://github.com/NVIDIA/nvidia-docker 】,而後使用下面的方法啓動:web
nvidia-docker run --name tensorflow --restart always -it -p 9888:8888 gcr.io/tensorflow/tensorflow:latest-gpu
如何本身構建Docker鏡像呢? Docker的構建代碼位於項目子目錄中:tensorflow/tools/docker 按照以下方法構建:docker
docker build --pull -t $openthings/tensorflow -f Dockerfile .
其餘版本參考上面的方法構建。ubuntu
詳細構建方法參考:https://github.com/openthings/tensorflow/tree/master/tensorflow/tools/dockerapi
Tensorflow支持多種系統,所以須要編譯相應的版本,包括:瀏覽器
主版本採用Bazel進行build,Android版本和iOS版本須要使用tensorflow/contrib/makefile或tensorflow/contrib/cmake中的方法使用make或cmake進行構建。性能優化
https://github.com/openthings/tensorflow/tree/master/tensorflow/tools/ci_build
目前Tesnorflow的編譯在Linux上比較順利,在macOS和Windows上會遇到各類小問題。這裏我經過運行於macOS上的Docker來編譯。
FROM ubuntu:14.04 MAINTAINER openthings@163.com RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ cmake \ curl \ git \ wget \ libatlas-base-dev \ libboost-all-dev \ libgflags-dev \ libgoogle-glog-dev \ libhdf5-serial-dev \ libleveldb-dev \ liblmdb-dev \ libopencv-dev \ libprotobuf-dev \ libsnappy-dev \ protobuf-compiler \ python-pip \ python-wheel \ python-dev \ python-numpy \ python-scipy \ software-properties-common # =========Install JDK8.==================================================== # Define commonly used JAVA_HOME variable ENV JAVA_HOME /usr/lib/jvm/java-8-oracle RUN echo ">>>>>> Install JDK8,PWD: "$PWD &&\ echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections &&\ add-apt-repository -y ppa:webupd8team/java &&\ apt-get update &&\ apt-get install -y oracle-java8-installer # =========Install bazel.=================================================== RUN echo ">>>>>> Install bazel,PWD: "$PWD &&\ echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | \ tee /etc/apt/sources.list.d/bazel.list &&\ curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add - &&\ apt-get update && \ apt-get install -y bazel &&\ echo ">>>>>> Success install bazel,PWD: "$PWD #apt-get upgrade bazel #wget https://github.com/bazelbuild/bazel/releases/tag/0.4.3 -O bazel WORKDIR /workspace ENTRYPOINT ["/bin/bash"] #CMD ["/bin/bash"]
docker build -t openthings/bazel -f Dockerfile-bazel .
建立構建腳本:
echo ">>> First, please run ./confgiure to config. " echo "Run bazel build......" docker run -ti -v $PWD:/workspace openthings/bazel build-tf.sh
echo ">>> First, please run ./confgiure to config. " echo "Run bazel build......" docker run -ti -v $PWD:/workspace openthings/bazel