From f4af8b8913966fc940ce432725b625f1aafeb073 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 2 Jun 2025 13:05:34 +0200 Subject: [PATCH 1/3] Set $HOME to temporary folder for TensorFlow build and tests Avoid it using the users HOME folder. --- easybuild/easyblocks/t/tensorflow.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/easybuild/easyblocks/t/tensorflow.py b/easybuild/easyblocks/t/tensorflow.py index 433d72aba1f..09070903de6 100644 --- a/easybuild/easyblocks/t/tensorflow.py +++ b/easybuild/easyblocks/t/tensorflow.py @@ -446,6 +446,8 @@ def setup_build_dirs(self): parent_dir = os.path.dirname(self.start_dir) # Path where Bazel will store its output, build artefacts etc. self.output_user_root_dir = os.path.join(parent_dir, 'bazel-root') + # Replace $HOME with a temporary folder to avoid using the user's home directory + self.home_dir = tempfile.mkdtemp(suffix='-tf-home') # Folder where wrapper binaries can be placed, where required. TODO: Replace by --action_env cmds self.wrapper_dir = os.path.join(parent_dir, 'wrapper_bin') mkdir(self.wrapper_dir) @@ -849,6 +851,8 @@ def build_step(self): # A value of None is interpreted as using the invoking environments value INHERIT = None # For better readability + action_env['HOME'] = self.home_dir + jvm_max_memory = self.cfg['jvm_max_memory'] if jvm_max_memory: jvm_startup_memory = min(512, int(jvm_max_memory)) From f14505bfff66700d2a75f7d60b3f86c2fc5c36fb Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 2 Jun 2025 13:07:13 +0200 Subject: [PATCH 2/3] Use dict/set literals --- easybuild/easyblocks/t/tensorflow.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/easybuild/easyblocks/t/tensorflow.py b/easybuild/easyblocks/t/tensorflow.py index 09070903de6..179649ed211 100644 --- a/easybuild/easyblocks/t/tensorflow.py +++ b/easybuild/easyblocks/t/tensorflow.py @@ -197,12 +197,12 @@ def is_version_ok(version_range): ('wrapt', '2.0.0:'): 'wrapt', } - dependency_mapping = dict((dep_name, tf_name) - for (dep_name, version_range), tf_name in available_system_libs.items() - if is_version_ok(version_range)) - python_mapping = dict((pkg_name, tf_name) - for (pkg_name, version_range), tf_name in python_system_libs.items() - if is_version_ok(version_range)) + dependency_mapping = {dep_name: tf_name + for (dep_name, version_range), tf_name in available_system_libs.items() + if is_version_ok(version_range)} + python_mapping = {pkg_name: tf_name + for (pkg_name, version_range), tf_name in python_system_libs.items() + if is_version_ok(version_range)} if as_valid_libs: tf_names = [tf_name for tf_name, version_range in unused_system_libs.items() @@ -356,8 +356,8 @@ def get_system_libs(self): """ dependency_mapping, python_mapping = get_system_libs_for_version(self.version) # Some TF dependencies require both a (usually C++) dependency and a Python package - deps_with_python_pkg = set(tf_name for tf_name in dependency_mapping.values() - if tf_name in python_mapping.values()) + deps_with_python_pkg = {tf_name for tf_name in dependency_mapping.values() + if tf_name in python_mapping.values()} system_libs = [] cpaths = [] @@ -365,7 +365,7 @@ def get_system_libs(self): ignored_system_deps = [] # Check direct dependencies - dep_names = set(dep['name'] for dep in self.cfg.dependencies()) + dep_names = {dep['name'] for dep in self.cfg.dependencies()} for dep_name, tf_name in sorted(dependency_mapping.items(), key=lambda i: i[0].lower()): if dep_name in dep_names: if tf_name in deps_with_python_pkg: @@ -1120,7 +1120,7 @@ def test_step(self): self.log.warning(fail_msg) # Try to enhance error message failed_tests = [] - failed_test_logs = dict() + failed_test_logs = {} # Bazel outputs failed tests like "//tensorflow/c:kernels_test FAILED in[...]" for match in re.finditer(r'^(//[a-zA-Z_/:]+)\s+FAILED', res.output, re.MULTILINE): test_name = match.group(1) From 2810fbd96526193a3bafd9f61ad72718664ed84e Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Mon, 2 Jun 2025 13:07:25 +0200 Subject: [PATCH 3/3] Mark unused variable --- easybuild/easyblocks/t/tensorflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/easybuild/easyblocks/t/tensorflow.py b/easybuild/easyblocks/t/tensorflow.py index 179649ed211..2865ea76d2d 100644 --- a/easybuild/easyblocks/t/tensorflow.py +++ b/easybuild/easyblocks/t/tensorflow.py @@ -819,7 +819,7 @@ def patch_crosstool_files(self): regex_subs.extend([('-fPIE', '-fPIC'), ('"-pie"', '"-fPIC"')]) # patch all CROSSTOOL* scripts to fix hardcoding of locations of binutils/GCC binaries - for path, dirnames, filenames in os.walk(os.getcwd()): + for path, _dirnames, filenames in os.walk(os.getcwd()): for filename in filenames: if filename.startswith('CROSSTOOL'): full_path = os.path.join(path, filename)