summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authoracxz2020-07-03 16:41:38 -0400
committeracxz2020-07-03 16:41:38 -0400
commita6584ae6963817ed8b6cf8c416729380df6ce7f4 (patch)
treead66515d23534fdabc09d349c10ac95296d16862
downloadaur-a6584ae6963817ed8b6cf8c416729380df6ce7f4.tar.gz
create tensorflow-rocm package
-rw-r--r--.SRCINFO97
-rw-r--r--PKGBUILD221
-rw-r--r--build-against-actual-mkl.patch37
3 files changed, 355 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..8799a545e425
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,97 @@
+pkgbase = tensorflow-rocm
+ pkgdesc = Library for computation using data flow graphs for scalable machine learning
+ pkgver = 2.2.0
+ pkgrel = 1
+ url = https://www.tensorflow.org/
+ arch = x86_64
+ license = APACHE
+ makedepends = bazel
+ makedepends = python-numpy
+ makedepends = rocm
+ makedepends = rccl
+ makedepends = git
+ makedepends = gcc9
+ makedepends = python-pip
+ makedepends = python-wheel
+ makedepends = python-setuptools
+ makedepends = python-h5py
+ makedepends = python-keras-applications
+ makedepends = python-keras-preprocessing
+ depends = c-ares
+ depends = intel-mkl
+ depends = onednn
+ optdepends = tensorboard: Tensorflow visualization toolkit
+ optdepends = python-pasta: tf_upgrade_v2 tool
+ source = tensorflow-rocm-2.2.0.tar.gz::https://github.com/tensorflow/tensorflow/archive/v2.2.0.tar.gz
+ source = build-against-actual-mkl.patch
+ sha512sums = 94a2663497d333d543f363e9fea94fbcfdcdbbc0dfbaf009ba9181a808713aeb78f9b8805f56bea5fd3925a36f105427b3996795750589f378d8afbdadc2b86d
+ sha512sums = e51e3f3dced121db3a09fbdaefd33555536095584b72a5eb6f302fa6fa68ab56ea45e8a847ec90ff4ba076db312c06f91ff672e08e95263c658526582494ce08
+
+pkgname = tensorflow-rocm
+ pkgdesc = Library for computation using data flow graphs for scalable machine learning (with ROCM)
+ depends = c-ares
+ depends = intel-mkl
+ depends = onednn
+ depends = rocm
+ depends = rccl
+ provides = tensorflow
+ conflicts = tensorflow
+
+pkgname = tensorflow-opt-rocm
+ pkgdesc = Library for computation using data flow graphs for scalable machine learning (with ROCM and CPU optimizations)
+ depends = c-ares
+ depends = intel-mkl
+ depends = onednn
+ depends = rocm
+ depends = rccl
+ provides = tensorflow
+ provides = tensorflow-rocm
+ conflicts = tensorflow
+
+pkgname = python-tensorflow-rocm
+ pkgdesc = Library for computation using data flow graphs for scalable machine learning (with ROCM)
+ depends = c-ares
+ depends = intel-mkl
+ depends = onednn
+ depends = tensorflow-rocm
+ depends = python-termcolor
+ depends = python-astor
+ depends = python-gast
+ depends = python-numpy
+ depends = rocm
+ depends = python-protobuf
+ depends = absl-py
+ depends = rccl
+ depends = python-h5py
+ depends = python-keras-applications
+ depends = python-keras-preprocessing
+ depends = python-tensorflow-estimator
+ depends = python-opt_einsum
+ depends = python-astunparse
+ provides = python-tensorflow
+ conflicts = python-tensorflow
+
+pkgname = python-tensorflow-opt-rocm
+ pkgdesc = Library for computation using data flow graphs for scalable machine learning (with ROCM and CPU optimizations)
+ depends = c-ares
+ depends = intel-mkl
+ depends = onednn
+ depends = tensorflow-opt-rocm
+ depends = python-termcolor
+ depends = python-astor
+ depends = python-gast
+ depends = python-numpy
+ depends = rocm
+ depends = python-protobuf
+ depends = absl-py
+ depends = rccl
+ depends = python-h5py
+ depends = python-keras-applications
+ depends = python-keras-preprocessing
+ depends = python-tensorflow-estimator
+ depends = python-opt_einsum
+ depends = python-astunparse
+ provides = python-tensorflow
+ provides = python-tensorflow-rocm
+ conflicts = python-tensorflow
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..18786b069028
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,221 @@
+# Maintainer: acxz <akashpatel2008 at yahoo dot com>
+# Contributor: Sven-Hendrik Haase <svenstaro@gmail.com>
+# Contributor: Konstantin Gizdov (kgizdov) <arch@kge.pw>
+# Contributor: Adria Arrufat (archdria) <adria.arrufat+AUR@protonmail.ch>
+# Contributor: Thibault Lorrain (fredszaq) <fredszaq@gmail.com>
+
+pkgbase=tensorflow-rocm
+pkgname=(tensorflow-rocm tensorflow-opt-rocm python-tensorflow-rocm python-tensorflow-opt-rocm)
+pkgver=2.2.0
+_pkgver=2.2.0
+pkgrel=1
+pkgdesc="Library for computation using data flow graphs for scalable machine learning"
+url="https://www.tensorflow.org/"
+license=('APACHE')
+arch=('x86_64')
+depends=('c-ares' 'intel-mkl' 'onednn')
+makedepends=('bazel' 'python-numpy' 'rocm' 'rccl' 'git' 'gcc9'
+ 'python-pip' 'python-wheel' 'python-setuptools' 'python-h5py'
+ 'python-keras-applications' 'python-keras-preprocessing')
+optdepends=('tensorboard: Tensorflow visualization toolkit'
+ 'python-pasta: tf_upgrade_v2 tool')
+source=("$pkgname-$pkgver.tar.gz::https://github.com/tensorflow/tensorflow/archive/v${_pkgver}.tar.gz"
+ build-against-actual-mkl.patch)
+sha512sums=('94a2663497d333d543f363e9fea94fbcfdcdbbc0dfbaf009ba9181a808713aeb78f9b8805f56bea5fd3925a36f105427b3996795750589f378d8afbdadc2b86d'
+ 'e51e3f3dced121db3a09fbdaefd33555536095584b72a5eb6f302fa6fa68ab56ea45e8a847ec90ff4ba076db312c06f91ff672e08e95263c658526582494ce08')
+
+get_pyver () {
+ python -c 'import sys; print(str(sys.version_info[0]) + "." + str(sys.version_info[1]))'
+}
+
+check_dir() {
+ if [ -d "${1}" ]; then
+ return 0
+ else
+ >&2 echo Directory "${1}" does not exist or is a file! Exiting...
+ exit 1
+ fi
+}
+
+prepare() {
+ # Allow any bazel version
+ echo "*" > tensorflow-${_pkgver}/.bazelversion
+
+ # Tensorflow actually wants to build against a slimmed down version of Intel MKL called MKLML
+ # See https://github.com/intel/mkl-dnn/issues/102
+ # MKLML version that Tensorflow wants to use is https://github.com/intel/mkl-dnn/releases/tag/v0.21
+ patch -Np1 -d tensorflow-${_pkgver} -i "$srcdir"/build-against-actual-mkl.patch
+
+ # Compile with C++17 by default (FS#65953)
+ #sed -i "s/c++14/c++17/g" tensorflow-${_pkgver}/.bazelrc
+
+ cp -r tensorflow-${_pkgver} tensorflow-${_pkgver}-rocm
+ cp -r tensorflow-${_pkgver} tensorflow-${_pkgver}-opt-rocm
+
+ # These environment variables influence the behavior of the configure call below.
+ export PYTHON_BIN_PATH=/usr/bin/python
+ export USE_DEFAULT_PYTHON_LIB_PATH=1
+ export TF_NEED_JEMALLOC=1
+ export TF_NEED_KAFKA=0
+ export TF_NEED_OPENCL_SYCL=0
+ export TF_NEED_AWS=0
+ export TF_NEED_GCP=0
+ export TF_NEED_HDFS=0
+ export TF_NEED_S3=0
+ export TF_ENABLE_XLA=1
+ export TF_NEED_GDR=0
+ export TF_NEED_VERBS=0
+ export TF_NEED_OPENCL=0
+ export TF_NEED_MPI=0
+ export TF_NEED_TENSORRT=0
+ export TF_NEED_NGRAPH=0
+ export TF_NEED_IGNITE=0
+ export TF_NEED_ROCM=1
+ export TF_SET_ANDROID_WORKSPACE=0
+ export TF_DOWNLOAD_CLANG=0
+ export TF_NCCL_VERSION=2.6
+ export TF_IGNORE_MAX_BAZEL_VERSION=1
+ export TF_MKL_ROOT=/opt/intel/mkl
+ export NCCL_INSTALL_PATH=/usr
+ export GCC_HOST_COMPILER_PATH=/usr/bin/gcc-9
+ export HOST_C_COMPILER=/usr/bin/gcc-9
+ export HOST_CXX_COMPILER=/usr/bin/g++-9
+ export TF_CUDA_CLANG=0 # Clang currently disabled because it's not compatible at the moment.
+ export CLANG_CUDA_COMPILER_PATH=/usr/bin/clang
+ export TF_CUDA_PATHS=/opt/cuda,/usr/lib,/usr
+ export TF_CUDA_VERSION=$(/opt/cuda/bin/nvcc --version | sed -n 's/^.*release \(.*\),.*/\1/p')
+ export TF_CUDNN_VERSION=$(sed -n 's/^#define CUDNN_MAJOR\s*\(.*\).*/\1/p' /usr/include/cudnn.h)
+ export TF_CUDA_COMPUTE_CAPABILITIES=5.2,5.3,6.0,6.1,6.2,7.0,7.2,7.5,8.0
+
+ # Required until https://github.com/tensorflow/tensorflow/issues/39467 is fixed.
+ export CC=gcc-9
+ export CXX=g++-9
+}
+
+build() {
+ echo "Building with rocm and without non-x86-64 optimizations"
+ cd "${srcdir}"/tensorflow-${_pkgver}-rocm
+ export CC_OPT_FLAGS="-march=x86-64"
+ export TF_NEED_ROCM=1
+ ./configure
+ bazel \
+ build --config=mkl -c opt \
+ //tensorflow:libtensorflow.so \
+ //tensorflow:libtensorflow_cc.so \
+ //tensorflow:install_headers \
+ //tensorflow/tools/pip_package:build_pip_package
+ bazel-bin/tensorflow/tools/pip_package/build_pip_package --gpu "${srcdir}"/tmprocm
+
+
+ echo "Building with rocm and with non-x86-64 optimizations"
+ cd "${srcdir}"/tensorflow-${_pkgver}-opt-rocm
+ export CC_OPT_FLAGS="-march=haswell -O3"
+ export TF_NEED_ROCM=1
+ ./configure
+ bazel \
+ build --config=mkl --config=avx2_linux -c opt \
+ //tensorflow:libtensorflow.so \
+ //tensorflow:libtensorflow_cc.so \
+ //tensorflow:install_headers \
+ //tensorflow/tools/pip_package:build_pip_package
+ bazel-bin/tensorflow/tools/pip_package/build_pip_package --gpu "${srcdir}"/tmpoptrocm
+}
+
+_package() {
+ # install headers first
+ install -d "${pkgdir}"/usr/include/tensorflow
+ cp -r bazel-bin/tensorflow/include/* "${pkgdir}"/usr/include/tensorflow/
+ # install python-version to get all extra headers
+ WHEEL_PACKAGE=$(find "${srcdir}"/$1 -name "tensor*.whl")
+ pip install --ignore-installed --upgrade --root "${pkgdir}"/ $WHEEL_PACKAGE --no-dependencies
+ # move extra headers to correct location
+ local _srch_path="${pkgdir}/usr/lib/python$(get_pyver)"/site-packages/tensorflow/include
+ check_dir "${_srch_path}" # we need to quit on broken search paths
+ find "${_srch_path}" -maxdepth 1 -mindepth 1 -type d -print0 | while read -rd $'\0' _folder; do
+ cp -nr "${_folder}" "${pkgdir}"/usr/include/tensorflow/
+ done
+ # clean up unneeded files
+ rm -rf "${pkgdir}"/usr/bin
+ rm -rf "${pkgdir}"/usr/lib
+ rm -rf "${pkgdir}"/usr/share
+
+ # install the rest of tensorflow
+ tensorflow/c/generate-pc.sh --prefix=/usr --version=${pkgver}
+ sed -e 's@/include$@/include/tensorflow@' -i tensorflow.pc -i tensorflow_cc.pc
+ install -Dm644 tensorflow.pc "${pkgdir}"/usr/lib/pkgconfig/tensorflow.pc
+ install -Dm644 tensorflow_cc.pc "${pkgdir}"/usr/lib/pkgconfig/tensorflow_cc.pc
+ install -Dm755 bazel-bin/tensorflow/libtensorflow.so "${pkgdir}"/usr/lib/libtensorflow.so.${pkgver}
+ ln -s libtensorflow.so.${pkgver} "${pkgdir}"/usr/lib/libtensorflow.so.${pkgver:0:1}
+ ln -s libtensorflow.so.${pkgver:0:1} "${pkgdir}"/usr/lib/libtensorflow.so
+ install -Dm755 bazel-bin/tensorflow/libtensorflow_cc.so "${pkgdir}"/usr/lib/libtensorflow_cc.so.${pkgver}
+ ln -s libtensorflow_cc.so.${pkgver} "${pkgdir}"/usr/lib/libtensorflow_cc.so.${pkgver:0:1}
+ ln -s libtensorflow_cc.so.${pkgver:0:1} "${pkgdir}"/usr/lib/libtensorflow_cc.so
+ install -Dm755 bazel-bin/tensorflow/libtensorflow_framework.so "${pkgdir}"/usr/lib/libtensorflow_framework.so.${pkgver}
+ ln -s libtensorflow_framework.so.${pkgver} "${pkgdir}"/usr/lib/libtensorflow_framework.so.${pkgver:0:1}
+ ln -s libtensorflow_framework.so.${pkgver:0:1} "${pkgdir}"/usr/lib/libtensorflow_framework.so
+ install -Dm644 tensorflow/c/c_api.h "${pkgdir}"/usr/include/tensorflow/tensorflow/c/c_api.h
+ install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE
+}
+
+_python_package() {
+ WHEEL_PACKAGE=$(find "${srcdir}"/$1 -name "tensor*.whl")
+ pip install --ignore-installed --upgrade --root "${pkgdir}"/ $WHEEL_PACKAGE --no-dependencies
+
+ # create symlinks to headers
+ local _srch_path="${pkgdir}/usr/lib/python$(get_pyver)"/site-packages/tensorflow/include/
+ check_dir "${_srch_path}" # we need to quit on broken search paths
+ find "${_srch_path}" -maxdepth 1 -mindepth 1 -type d -print0 | while read -rd $'\0' _folder; do
+ rm -rf "${_folder}"
+ _smlink="$(basename "${_folder}")"
+ ln -s /usr/include/tensorflow/"${_smlink}" "${_srch_path}"
+ done
+
+ # tensorboard has been separated from upstream but they still install it with
+ # tensorflow. I don't know what kind of sense that makes but we have to clean
+ # it out from this pacakge.
+ rm -rf "${pkgdir}"/usr/bin/tensorboard
+
+ install -Dm644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE
+}
+
+package_tensorflow-rocm() {
+ pkgdesc="Library for computation using data flow graphs for scalable machine learning (with ROCM)"
+ depends+=(rocm rccl)
+ conflicts=(tensorflow)
+ provides=(tensorflow)
+
+ cd "${srcdir}"/tensorflow-${_pkgver}-rocm
+ _package tmprocm
+}
+
+package_tensorflow-opt-rocm() {
+ pkgdesc="Library for computation using data flow graphs for scalable machine learning (with ROCM and CPU optimizations)"
+ depends+=(rocm rccl)
+ conflicts=(tensorflow)
+ provides=(tensorflow tensorflow-rocm)
+
+ cd "${srcdir}"/tensorflow-${_pkgver}-opt-rocm
+ _package tmpoptrocm
+}
+
+package_python-tensorflow-rocm() {
+ pkgdesc="Library for computation using data flow graphs for scalable machine learning (with ROCM)"
+ depends+=(tensorflow-rocm python-termcolor python-astor python-gast python-numpy rocm python-protobuf absl-py rccl python-h5py python-keras-applications python-keras-preprocessing python-tensorflow-estimator python-opt_einsum python-astunparse)
+ conflicts=(python-tensorflow)
+ provides=(python-tensorflow)
+
+ cd "${srcdir}"/tensorflow-${_pkgver}-rocm
+ _python_package tmprocm
+}
+
+package_python-tensorflow-opt-rocm() {
+ pkgdesc="Library for computation using data flow graphs for scalable machine learning (with ROCM and CPU optimizations)"
+ depends+=(tensorflow-opt-rocm python-termcolor python-astor python-gast python-numpy rocm python-protobuf absl-py rccl python-h5py python-keras-applications python-keras-preprocessing python-tensorflow-estimator python-opt_einsum python-astunparse)
+ conflicts=(python-tensorflow)
+ provides=(python-tensorflow python-tensorflow-rocm)
+
+ cd "${srcdir}"/tensorflow-${_pkgver}-opt-rocm
+ _python_package tmpoptrocm
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/build-against-actual-mkl.patch b/build-against-actual-mkl.patch
new file mode 100644
index 000000000000..c1589b568751
--- /dev/null
+++ b/build-against-actual-mkl.patch
@@ -0,0 +1,37 @@
+diff --git a/third_party/mkl/build_defs.bzl b/third_party/mkl/build_defs.bzl
+index 4b8fb83eb0..f4e1adfb22 100644
+--- a/third_party/mkl/build_defs.bzl
++++ b/third_party/mkl/build_defs.bzl
+@@ -124,7 +124,7 @@ def _mkl_autoconf_impl(repository_ctx):
+ if _enable_local_mkl(repository_ctx):
+ # Symlink lib and include local folders.
+ mkl_root = repository_ctx.os.environ[_TF_MKL_ROOT]
+- mkl_lib_path = "%s/lib" % mkl_root
++ mkl_lib_path = "%s/lib/intel64" % mkl_root
+ repository_ctx.symlink(mkl_lib_path, "lib")
+ mkl_include_path = "%s/include" % mkl_root
+ repository_ctx.symlink(mkl_include_path, "include")
+diff --git a/third_party/mkl/mkl.BUILD b/third_party/mkl/mkl.BUILD
+index 72370182c4..4972bb005e 100644
+--- a/third_party/mkl/mkl.BUILD
++++ b/third_party/mkl/mkl.BUILD
+@@ -5,7 +5,6 @@ exports_files(["license.txt"])
+ filegroup(
+ name = "LICENSE",
+ srcs = [
+- "license.txt",
+ ],
+ visibility = ["//visibility:public"],
+ )
+@@ -21,7 +20,10 @@ cc_library(
+ name = "mkl_libs_linux",
+ srcs = [
+ "lib/libiomp5.so",
+- "lib/libmklml_intel.so",
++ "lib/libmkl_core.so",
++ "lib/libmkl_rt.so",
++ "lib/libmkl_intel_thread.so",
++ "lib/libmkl_intel_lp64.so",
+ ],
+ visibility = ["//visibility:public"],
+ )