From ec518628c8815fd29f8e9e7787a993f5402325df Mon Sep 17 00:00:00 2001 From: Michael Mayer Date: Sun, 23 Jun 2019 03:20:14 +0200 Subject: [PATCH] Build TensorFlow v1.13.1 in Docker container #83 --- docker/tensorflow/Dockerfile | 82 +++++++++++++---------- docker/tensorflow/build_all_linux_arch.sh | 55 +++++++++++++++ 2 files changed, 103 insertions(+), 34 deletions(-) create mode 100755 docker/tensorflow/build_all_linux_arch.sh diff --git a/docker/tensorflow/Dockerfile b/docker/tensorflow/Dockerfile index 082002dc5..9c8230a27 100644 --- a/docker/tensorflow/Dockerfile +++ b/docker/tensorflow/Dockerfile @@ -1,41 +1,55 @@ -FROM photoprism/development:20190617 +FROM ubuntu:18.04 -# Install Python and TensorFlow -RUN apt-get update && apt-get install -y --no-install-recommends \ - python3 \ - python-setuptools \ - python3-dev \ - && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* +LABEL maintainer="Michael Mayer " -RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ - python get-pip.py && \ - rm get-pip.py +ENV DEBIAN_FRONTEND noninteractive -RUN pip --no-cache-dir install --upgrade \ - tensorflow \ - requests \ - Pillow \ - h5py \ - ipykernel \ - jupyter \ - keras_applications \ - keras_preprocessing \ - matplotlib \ - numpy \ - pandas \ - scipy \ - sklearn \ - && \ - python -m ipykernel.kernelspec +# Configure apt-get +RUN echo 'Acquire::Retries "10";' > /etc/apt/apt.conf.d/80retry +RUN echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf.d/80recommends +RUN echo 'APT::Install-Suggests "false";' > /etc/apt/apt.conf.d/80suggests +RUN echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/80forceyes +RUN echo 'APT::Get::Fix-Missing "true";' > /etc/apt/apt.conf.d/80fixmissin + +# Install dev / build dependencies +RUN apt-get update && apt-get upgrade && \ + apt-get install \ + ca-certificates \ + build-essential \ + autoconf \ + automake \ + libtool \ + g++-4.8 \ + gcc-4.8 \ + libc6-dev \ + zlib1g-dev \ + libssl-dev \ + curl \ + chrpath \ + pkg-config \ + unzip \ + zip \ + make \ + nano \ + wget \ + git + +# Use GCC 4.8 as default compiler +# See https://www.tensorflow.org/install/source#tested_build_configurations +RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10 && \ + update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 10 # Set up project directory -WORKDIR "/go/src/github.com/photoprism/photoprism" -COPY . . +WORKDIR "/home/tensorflow" -# Build PhotoPrism -RUN make all install +# Download TensorFlow +RUN wget https://github.com/tensorflow/tensorflow/archive/v1.13.1.tar.gz +RUN tar -xzf v1.13.1.tar.gz -# Start PhotoPrism server -CMD photoprism start +# Build TensorFlow +WORKDIR "/home/tensorflow/tensorflow-1.13.1" +COPY /docker/tensorflow/build_all_linux_arch.sh tensorflow/contrib/makefile/build_all_linux_arch.sh +RUN env JOB_COUNT=1 ARCH=core-avx-i tensorflow/contrib/makefile/build_all_linux_arch.sh + +# Keep container running +CMD tail -f /dev/null diff --git a/docker/tensorflow/build_all_linux_arch.sh b/docker/tensorflow/build_all_linux_arch.sh new file mode 100755 index 000000000..de9b33c8d --- /dev/null +++ b/docker/tensorflow/build_all_linux_arch.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# Copyright 2016 The TensorFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +# Downloads and builds all of TensorFlow's dependencies for Linux, and compiles +# the TensorFlow library itself. Supported on Ubuntu 14.04 and 16.04. + +set -e + +# Make sure we're in the correct directory, at the root of the source tree. +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd ${SCRIPT_DIR}/../../../ + +source "${SCRIPT_DIR}/build_helper.subr" + +# Note: Limit the number of jobs to 1 on ARM64 to prevent the build from being killed +JOB_COUNT="${JOB_COUNT:-$(get_job_count)}" + +# Set CPU architecture e.g. core-avx-i, haswell or armv8-a +# See https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html +# and https://gcc.gnu.org/onlinedocs/gcc/AArch64-Options.html +ARCH=${ARCH:-core-avx-i} + +# Remove any old files first. +make -f tensorflow/contrib/makefile/Makefile clean +rm -rf tensorflow/contrib/makefile/downloads + +# Pull down the required versions of the frameworks we need. +tensorflow/contrib/makefile/download_dependencies.sh + +# Compile nsync. +# Don't use export var=`something` syntax; it swallows the exit status. +HOST_NSYNC_LIB=`tensorflow/contrib/makefile/compile_nsync.sh` +TARGET_NSYNC_LIB="$HOST_NSYNC_LIB" +export HOST_NSYNC_LIB TARGET_NSYNC_LIB + +# Compile protobuf. +tensorflow/contrib/makefile/compile_linux_protobuf.sh + +# Build TensorFlow for ARCH. +make -j"${JOB_COUNT}" -f tensorflow/contrib/makefile/Makefile \ + OPTFLAGS="-O3 -march=${ARCH}" \ + HOST_CXXFLAGS="--std=c++11 -march=${ARCH}" \ + MAKEFILE_DIR=${SCRIPT_DIR}