Build TensorFlow v1.13.1 in Docker container #83

This commit is contained in:
Michael Mayer 2019-06-23 03:20:14 +02:00
parent 1b0b41b824
commit ec518628c8
2 changed files with 103 additions and 34 deletions

View file

@ -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 <michael@liquidbytes.net>"
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

View file

@ -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}