Skip to content

Instantly share code, notes, and snippets.

@muendelezaji
Forked from PatWie/update-tensorflow.sh
Last active December 1, 2021 19:27
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save muendelezaji/5a0b7d343f8656021f0ab96e50dc5c65 to your computer and use it in GitHub Desktop.
Save muendelezaji/5a0b7d343f8656021f0ab96e50dc5c65 to your computer and use it in GitHub Desktop.
Script to build TensorFlow from source. Platform is ARM64 (aka aarch64) with OpenCL support via Codeplay SYCL SDK
#!/bin/bash
# =============================================================
# UPDATE SOURCE
# =============================================================
# git clone https://github.com/tensorflow/tensorflow
# git checkout -- .
# git pull origin master
# TF_BRANCH=r1.8
TF_ROOT=/home/tensorflow
cd $TF_ROOT
for python_version in python2; do
echo "Build TensorFlow for Python version: ${python_version}"
# =============================================================
# CONFIGURATION
# =============================================================
export PYTHON_BIN_PATH=$(which ${python_version})
export PYTHON_LIB_PATH="$($PYTHON_BIN_PATH -c 'import site; print(site.getsitepackages()[0])')"
export PYTHONPATH=${TF_ROOT}/lib
export PYTHON_ARG=${TF_ROOT}/lib
export USE_DEFAULT_PYTHON_LIB_PATH=1
export TF_NEED_MKL=0
export TF_NEED_JEMALLOC=1
export TF_NEED_GCP=0
export TF_NEED_HDFS=0
export TF_ENABLE_XLA=0
export TF_NEED_OPENCL_SYCL=1
export TF_NEED_COMPUTECPP=1
export TF_USE_DOUBLE_SYCL=0
export TF_USE_HALF_SYCL=0
export COMPUTECPP_TOOLKIT_PATH=/home/compute-cpp/ComputeCpp-CE-0.9.0-Ubuntu-16.04-ARM_64
export TF_NEED_CUDA=0
export TF_NEED_VERBS=0
export TF_NEED_MPI=0
export TF_NEED_GDR=0
export TF_NEED_S3=0
export TF_NEED_KAFKA=0
export TF_DOWNLOAD_CLANG=0
export TF_SET_ANDROID_WORKSPACE=0
# export TF_SYCL_CROSS_TOOLCHAIN=$HOME/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
# export TF_SYCL_CROSS_TOOLCHAIN_NAME=aarch64-linux-gnu
export TF_SYCL_BITCODE_TARGET=spirv64
export GCC_HOST_COMPILER_PATH=$(which gcc)
export HOST_C_COMPILER=$(which gcc)
export HOST_CXX_COMPILER=$(which g++)
export CC_OPT_FLAGS="-march=native"
# export CC_OPT_FLAGS="-march=armv8-a"
# =============================================================
# BUILD NEW VERSION
# =============================================================
# bazel clean
./configure
# Build TensorFlow (add -s to see executed commands)
# "--copt=" can be "-mavx -mavx2 -mfma -msse4.2 -mfpmath=both"
# Build python package (includes C library)
bazel build --config=sycl_arm -c opt --jobs=4 --verbose_failures --copt=-DNO_LOCAL_MEM--copt=-DEIGEN_DONT_VECTORIZE_SYCL --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" //tensorflow/tools/pip_package:build_pip_package
# Build C++ library
bazel build --config=sycl_arm -c opt --jobs=4 --verbose_failures --copt=-DNO_LOCAL_MEM--copt=-DEIGEN_DONT_VECTORIZE_SYCL --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" //tensorflow:libtensorflow_cc.so
# bazel build -c opt --copt="-funsafe-math-optimizations" --copt="-ftree-vectorize" --copt="-fomit-frame-pointer" --verbose_failures --jobs=4 //tensorflow:libtensorflow_cc.so
# Build TF pip package
bazel-bin/tensorflow/tools/pip_package/build_pip_package ${TF_ROOT}/pip/tensorflow_pkg
done
@openedev
Copy link

Thanks for the detailed steps.

any idea how to build ComputeCPP support?

I'm trying to cross-compile tensorflow for arm64, I think we need to build computecpp for host isn't it? let me share the details about it.

Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment