Date: Thursday, March 19, 2020 @ 20:56:58 Author: svenstaro Revision: 601196
upgpkg: tensorflow 2.1.0-4: Add MKL support and better optimizations Added: tensorflow/trunk/build-against-actual-mkl.patch tensorflow/trunk/f99aebca5d0b916106d9e17b0c1ee7898d14abc9.patch Modified: tensorflow/trunk/PKGBUILD ------------------------------------------------+ PKGBUILD | 38 ++++-- build-against-actual-mkl.patch | 37 ++++++ f99aebca5d0b916106d9e17b0c1ee7898d14abc9.patch | 128 +++++++++++++++++++++++ 3 files changed, 191 insertions(+), 12 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2020-03-19 20:56:51 UTC (rev 601195) +++ PKGBUILD 2020-03-19 20:56:58 UTC (rev 601196) @@ -7,21 +7,25 @@ pkgname=(tensorflow tensorflow-opt tensorflow-cuda tensorflow-opt-cuda python-tensorflow python-tensorflow-opt python-tensorflow-cuda python-tensorflow-opt-cuda) pkgver=2.1.0 _pkgver=2.1.0 -pkgrel=3 +pkgrel=4 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') +depends=('c-ares' 'intel-mkl' 'intel-dnnl') makedepends=('bazel' 'python-numpy' 'cuda' 'nvidia-utils' 'nccl' 'git' 'gcc' 'cudnn' '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=("https://github.com/tensorflow/tensorflow/archive/v${_pkgver}.tar.gz" - Add-grpc-fix-for-gettid.patch) +source=("$pkgname-$pkgver.tar.gz::https://github.com/tensorflow/tensorflow/archive/v${_pkgver}.tar.gz" + Add-grpc-fix-for-gettid.patch + build-against-actual-mkl.patch + f99aebca5d0b916106d9e17b0c1ee7898d14abc9.patch) sha512sums=('6d09ba3c097e4b3d712e7164d649841572c418d56c207eea6d31e3b1851b84ce57e82801d9887d84cfd8fcf990a3ea4c4b4b05265f8d625509986412c230c3c6' - '64442ef4cf0527cc321b7425273fd998c8e961af0ffbf1bb0a401cdd9237e95cdcebd8c18416e02a5225fabfd53cf0b694a3486791fffbc3e472a8ffaa4b28ff') + '64442ef4cf0527cc321b7425273fd998c8e961af0ffbf1bb0a401cdd9237e95cdcebd8c18416e02a5225fabfd53cf0b694a3486791fffbc3e472a8ffaa4b28ff' + 'e51e3f3dced121db3a09fbdaefd33555536095584b72a5eb6f302fa6fa68ab56ea45e8a847ec90ff4ba076db312c06f91ff672e08e95263c658526582494ce08' + '7738f839ef6d9c875da631312e0e528918539a4111d308b3b04f556d7c074918b78fb863953ec43961074f5fdb896ab1f6954cde68b6260dc15c1972ef640618') get_pyver () { python -c 'import sys; print(str(sys.version_info[0]) + "." + str(sys.version_info[1]))' @@ -37,9 +41,18 @@ } prepare() { + # Allow any bazel version + echo "*" > tensorflow-${_pkgver}/.bazelversion + patch -Np1 -d tensorflow-${_pkgver} -i "$srcdir"/Add-grpc-fix-for-gettid.patch - echo "2.0.0-" > tensorflow-${_pkgver}/.bazelversion + patch -Np1 -d tensorflow-${_pkgver} -i "$srcdir"/f99aebca5d0b916106d9e17b0c1ee7898d14abc9.patch + + # 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 + cp -r tensorflow-${_pkgver} tensorflow-${_pkgver}-opt cp -r tensorflow-${_pkgver} tensorflow-${_pkgver}-cuda cp -r tensorflow-${_pkgver} tensorflow-${_pkgver}-opt-cuda @@ -67,6 +80,7 @@ export TF_DOWNLOAD_CLANG=0 export TF_NCCL_VERSION=2.5 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-8 export HOST_CXX_COMPILER_PATH=/usr/bin/gcc-8 @@ -85,7 +99,7 @@ export TF_NEED_CUDA=0 ./configure bazel \ - build --config=opt \ + build --config=mkl -c opt \ //tensorflow:libtensorflow.so \ //tensorflow:libtensorflow_cc.so \ //tensorflow:install_headers \ @@ -95,11 +109,11 @@ echo "Building without cuda and with non-x86-64 optimizations" cd "${srcdir}"/tensorflow-${_pkgver}-opt - export CC_OPT_FLAGS="-march=haswell" + export CC_OPT_FLAGS="-march=haswell -O3" export TF_NEED_CUDA=0 ./configure bazel \ - build --config=opt \ + build --config=mkl -c opt \ //tensorflow:libtensorflow.so \ //tensorflow:libtensorflow_cc.so \ //tensorflow:install_headers \ @@ -113,7 +127,7 @@ export TF_NEED_CUDA=1 ./configure bazel \ - build --config=opt \ + build --config=mkl -c opt \ //tensorflow:libtensorflow.so \ //tensorflow:libtensorflow_cc.so \ //tensorflow:install_headers \ @@ -123,12 +137,12 @@ echo "Building with cuda and without non-x86-64 optimizations" cd "${srcdir}"/tensorflow-${_pkgver}-opt-cuda - export CC_OPT_FLAGS="-march=haswell" + export CC_OPT_FLAGS="-march=haswell -O3" export TF_NEED_CUDA=1 export TF_CUDA_CLANG=0 ./configure bazel \ - build --config=opt \ + build --config=mkl -c opt \ //tensorflow:libtensorflow.so \ //tensorflow:libtensorflow_cc.so \ //tensorflow:install_headers \ Added: build-against-actual-mkl.patch =================================================================== --- build-against-actual-mkl.patch (rev 0) +++ build-against-actual-mkl.patch 2020-03-19 20:56:58 UTC (rev 601196) @@ -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"], + ) Added: f99aebca5d0b916106d9e17b0c1ee7898d14abc9.patch =================================================================== --- f99aebca5d0b916106d9e17b0c1ee7898d14abc9.patch (rev 0) +++ f99aebca5d0b916106d9e17b0c1ee7898d14abc9.patch 2020-03-19 20:56:58 UTC (rev 601196) @@ -0,0 +1,128 @@ +From f99aebca5d0b916106d9e17b0c1ee7898d14abc9 Mon Sep 17 00:00:00 2001 +From: "A. Unique TensorFlower" <[email protected]> +Date: Wed, 12 Feb 2020 14:07:48 -0800 +Subject: [PATCH] Migrate --incompatible_remap_main_repo for bazel 2.0 + +Bazel 2.0 flipped --incompatible_remap_main_repo. The gist of it is that when referring to a target in the main repository from inside an external repository the target needs to be prefixed by the main repository name. In this case "@org_tensorflow". Else, it's assumed that one is referring to a target inside the external repo. + +PiperOrigin-RevId: 294752795 +Change-Id: Ic23d08f457b966e9a039152c5f8a550ba5a1978e +--- + .bazelrc | 2 -- + tensorflow/opensource_only.files | 1 + + third_party/llvm/BUILD | 2 -- + third_party/mkl/build_defs.bzl | 22 +++++++++++----------- + third_party/mkl_dnn/build_defs.bzl | 4 ++-- + 5 files changed, 14 insertions(+), 17 deletions(-) + +diff --git a/tensorflow/opensource_only.files b/tensorflow/opensource_only.files +index 988b3c9bb0413..5df80351a551c 100644 +--- a/tensorflow/opensource_only.files ++++ b/tensorflow/opensource_only.files +@@ -116,6 +116,7 @@ tensorflow/third_party/mkl/MKL_LICENSE + tensorflow/third_party/mkl/build_defs.bzl + tensorflow/third_party/mkl/mkl.BUILD + tensorflow/third_party/mkl_dnn/LICENSE ++tensorflow/third_party/mkl_dnn/build_defs.bzl + tensorflow/third_party/mkl_dnn/mkldnn.BUILD + tensorflow/third_party/mpi/.gitignore + tensorflow/third_party/nanopb.BUILD +diff --git a/third_party/llvm/BUILD b/third_party/llvm/BUILD +index 563f394b2769e..1a5634a62851c 100644 +--- a/third_party/llvm/BUILD ++++ b/third_party/llvm/BUILD +@@ -1,5 +1,3 @@ +-licenses(["notice"]) +- + py_binary( + name = "expand_cmake_vars", + srcs = ["expand_cmake_vars.py"], +diff --git a/third_party/mkl/build_defs.bzl b/third_party/mkl/build_defs.bzl +index 6f3e7c0b52d48..4b8fb83eb092c 100644 +--- a/third_party/mkl/build_defs.bzl ++++ b/third_party/mkl/build_defs.bzl +@@ -25,7 +25,7 @@ def if_mkl(if_true, if_false = []): + a select evaluating to either if_true or if_false as appropriate. + """ + return select({ +- str(Label("//third_party/mkl:build_with_mkl")): if_true, ++ "@org_tensorflow//third_party/mkl:build_with_mkl": if_true, + "//conditions:default": if_false, + }) + +@@ -41,8 +41,8 @@ def if_mkl_ml(if_true, if_false = []): + a select evaluating to either if_true or if_false as appropriate. + """ + return select({ +- str(Label("//third_party/mkl_dnn:build_with_mkl_dnn_only")): if_false, +- str(Label("//third_party/mkl:build_with_mkl")): if_true, ++ "@org_tensorflow//third_party/mkl_dnn:build_with_mkl_dnn_only": if_false, ++ "@org_tensorflow//third_party/mkl:build_with_mkl": if_true, + "//conditions:default": if_false, + }) + +@@ -57,7 +57,7 @@ def if_mkl_ml_only(if_true, if_false = []): + a select evaluating to either if_true or if_false as appropriate. + """ + return select({ +- str(Label("//third_party/mkl:build_with_mkl_ml_only")): if_true, ++ "@org_tensorflow//third_party/mkl:build_with_mkl_ml_only": if_true, + "//conditions:default": if_false, + }) + +@@ -74,7 +74,7 @@ def if_mkl_lnx_x64(if_true, if_false = []): + a select evaluating to either if_true or if_false as appropriate. + """ + return select({ +- str(Label("//third_party/mkl:build_with_mkl_lnx_x64")): if_true, ++ "@org_tensorflow//third_party/mkl:build_with_mkl_lnx_x64": if_true, + "//conditions:default": if_false, + }) + +@@ -91,7 +91,7 @@ def if_enable_mkl(if_true, if_false = []): + A select evaluating to either if_true or if_false as appropriate. + """ + return select({ +- str(Label("//third_party/mkl:enable_mkl")): if_true, ++ "@org_tensorflow//third_party/mkl:enable_mkl": if_true, + "//conditions:default": if_false, + }) + +@@ -105,11 +105,11 @@ def mkl_deps(): + inclusion in the deps attribute of rules. + """ + return select({ +- str(Label("//third_party/mkl_dnn:build_with_mkl_dnn_only")): ["@mkl_dnn"], +- str(Label("//third_party/mkl_dnn:build_with_mkl_dnn_v1_only")): ["@mkl_dnn_v1//:mkl_dnn"], +- str(Label("//third_party/mkl:build_with_mkl_ml_only")): ["//third_party/mkl:intel_binary_blob"], +- str(Label("//third_party/mkl:build_with_mkl")): [ +- "//third_party/mkl:intel_binary_blob", ++ "@org_tensorflow//third_party/mkl_dnn:build_with_mkl_dnn_only": ["@mkl_dnn"], ++ "@org_tensorflow//third_party/mkl_dnn:build_with_mkl_dnn_v1_only": ["@mkl_dnn_v1//:mkl_dnn"], ++ "@org_tensorflow//third_party/mkl:build_with_mkl_ml_only": ["@org_tensorflow//third_party/mkl:intel_binary_blob"], ++ "@org_tensorflow//third_party/mkl:build_with_mkl": [ ++ "@org_tensorflow//third_party/mkl:intel_binary_blob", + "@mkl_dnn", + ], + "//conditions:default": [], +diff --git a/third_party/mkl_dnn/build_defs.bzl b/third_party/mkl_dnn/build_defs.bzl +index 384b528c2733a..af05333c94700 100644 +--- a/third_party/mkl_dnn/build_defs.bzl ++++ b/third_party/mkl_dnn/build_defs.bzl +@@ -10,7 +10,7 @@ def if_mkl_open_source_only(if_true, if_false = []): + + """ + return select({ +- str(Label("//third_party/mkl_dnn:build_with_mkl_dnn_only")): if_true, ++ "@org_tensorflow//third_party/mkl_dnn:build_with_mkl_dnn_only": if_true, + "//conditions:default": if_false, + }) + +@@ -26,6 +26,6 @@ def if_mkl_v1_open_source_only(if_true, if_false = []): + + """ + return select({ +- str(Label("//third_party/mkl_dnn:build_with_mkl_dnn_v1_only")): if_true, ++ "@org_tensorflow//third_party/mkl_dnn:build_with_mkl_dnn_v1_only": if_true, + "//conditions:default": if_false, + })
