Tensorflow在Docker中運行和源碼編譯

本文分享在在Docker中運行Tensorflow和進行源碼編譯的方法和步驟,包括:編譯、構建docker鏡像、建立和運行Docker容器。部署完的容器能夠經過Jupyter Notebook進行訪問。java

一、運行Tensorflow容器

快速運行

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

使用DockerHub

有的地方訪問不到gcr.io的鏡像,可使用 hub.docker.com 的鏡像。github

docker run --name tensorflow --restart always -it -p 9888:8888 tensorflow/tensorflow

基於GPU的Docker

基於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鏡像呢? 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源碼編譯

Tensorflow支持多種系統,所以須要編譯相應的版本,包括:瀏覽器

  • CPU版本
  • GPU版本
  • Android版本
  • iOS版本

主版本採用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來編譯。

建立bazel的docker容器

建立Dockerfile-bazel,內容以下:

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"]

建立bazel容器的構建腳本:

docker build -t openthings/bazel -f Dockerfile-bazel .

使用bazel容器編譯tensorflow

建立構建腳本:

echo ">>> First, please run ./confgiure to config. "
echo "Run bazel build......"

docker run -ti -v $PWD:/workspace openthings/bazel build-tf.sh
  • 因爲使用bazel須要預先運行./configure進行配置,第一次編譯時,使用下面的腳本直接進入容器中進行配置和編譯操做:
echo ">>> First, please run ./confgiure to config. "
echo "Run bazel build......"

docker run -ti -v $PWD:/workspace openthings/bazel
相關文章
相關標籤/搜索