diff options
author | acxz | 2020-07-03 16:41:38 -0400 |
---|---|---|
committer | acxz | 2020-07-03 16:41:38 -0400 |
commit | a6584ae6963817ed8b6cf8c416729380df6ce7f4 (patch) | |
tree | ad66515d23534fdabc09d349c10ac95296d16862 | |
download | aur-a6584ae6963817ed8b6cf8c416729380df6ce7f4.tar.gz |
create tensorflow-rocm package
-rw-r--r-- | .SRCINFO | 97 | ||||
-rw-r--r-- | PKGBUILD | 221 | ||||
-rw-r--r-- | build-against-actual-mkl.patch | 37 |
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"], + ) |