From 5ac2e2636fe192c282376fcc4b00e073f10b3446 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 13 Jul 2026 13:05:46 -0400 Subject: [PATCH 1/4] Adding initial scripts for hydragnn --- benchmarks/matbench_v0.1_hydragnn/compile.py | 49 +++ benchmarks/matbench_v0.1_hydragnn/compile.sh | 1 + benchmarks/matbench_v0.1_hydragnn/evaluate.py | 32 ++ .../evaluate_our_finetune.sh | 3 + .../evaluate_your_finetune.sh | 3 + benchmarks/matbench_v0.1_hydragnn/finetune.py | 33 ++ benchmarks/matbench_v0.1_hydragnn/finetune.sh | 3 + .../finetuning_config.json | 63 ++++ .../finetuning_config_bce.json | 63 ++++ benchmarks/matbench_v0.1_hydragnn/info.json | 17 + .../matbench_v0.1_hydragnn/preprocess_data.py | 333 ++++++++++++++++++ .../preprocess_matbench.sh | 5 + .../matbench_v0.1_hydragnn/run_evaluate.sh | 10 + benchmarks/matbench_v0.1_hydragnn/run_full.sh | 14 + 14 files changed, 629 insertions(+) create mode 100644 benchmarks/matbench_v0.1_hydragnn/compile.py create mode 100644 benchmarks/matbench_v0.1_hydragnn/compile.sh create mode 100644 benchmarks/matbench_v0.1_hydragnn/evaluate.py create mode 100644 benchmarks/matbench_v0.1_hydragnn/evaluate_our_finetune.sh create mode 100644 benchmarks/matbench_v0.1_hydragnn/evaluate_your_finetune.sh create mode 100755 benchmarks/matbench_v0.1_hydragnn/finetune.py create mode 100644 benchmarks/matbench_v0.1_hydragnn/finetune.sh create mode 100644 benchmarks/matbench_v0.1_hydragnn/finetuning_config.json create mode 100644 benchmarks/matbench_v0.1_hydragnn/finetuning_config_bce.json create mode 100644 benchmarks/matbench_v0.1_hydragnn/info.json create mode 100644 benchmarks/matbench_v0.1_hydragnn/preprocess_data.py create mode 100644 benchmarks/matbench_v0.1_hydragnn/preprocess_matbench.sh create mode 100644 benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh create mode 100644 benchmarks/matbench_v0.1_hydragnn/run_full.sh diff --git a/benchmarks/matbench_v0.1_hydragnn/compile.py b/benchmarks/matbench_v0.1_hydragnn/compile.py new file mode 100644 index 00000000..f8a48e58 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/compile.py @@ -0,0 +1,49 @@ +import os +import glob +import json +from matbench.bench import MatbenchBenchmark +from hydragnn_gfm_finetuning.utils.ensemble_utils import build_arg_parser + +def run_compile(args): + mb = MatbenchBenchmark(autoload=False, subset=args.task_names) + for task_obj in mb.tasks: + task_obj.load() + + for task_obj in mb.tasks: + task_name = task_obj.dataset_name + first_underscore_index = task_name.find('_') + name = task_name[first_underscore_index:] + pattern = os.path.join(args.output_dir+name, f"{task_name}_fold*_predictions.json") + pred_files = sorted(glob.glob(pattern)) + if not pred_files: + raise FileNotFoundError( + f"No prediction files found for {task_name} matching:\n {pattern}\n" + "Run `evaluate --matbench` for each fold first." + ) + + fold_predictions = {} + for path in pred_files: + with open(path) as f: + data = json.load(f) + fold_predictions[data["fold_idx"]] = data["predictions"] + print(f" [{task_name}] Loaded fold {data['fold_idx']} " + f"({len(data['predictions'])} predictions): {path}") + + missing = set(task_obj.folds) - set(fold_predictions.keys()) + if missing: + raise ValueError( + f"[{task_name}] Missing predictions for folds {sorted(missing)}. " + "Run `evaluate --matbench` for those folds before compiling." + ) + + for fold_idx in sorted(task_obj.folds): + task_obj.record(fold_idx, fold_predictions[fold_idx]) + print(f" [{task_name}] Recorded fold {fold_idx}") + + mb.add_metadata({"algorithm": "HydraGNN_GFM_FineTuning"}) + mb.to_file(args.output_file) + +if __name__ == "__main__": + parser = build_arg_parser() + args = parser.parse_args() + run_compile(args) diff --git a/benchmarks/matbench_v0.1_hydragnn/compile.sh b/benchmarks/matbench_v0.1_hydragnn/compile.sh new file mode 100644 index 00000000..899212ec --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/compile.sh @@ -0,0 +1 @@ +python -u compile.py --task_names $@ --output_dir results --output_file results.json.gz diff --git a/benchmarks/matbench_v0.1_hydragnn/evaluate.py b/benchmarks/matbench_v0.1_hydragnn/evaluate.py new file mode 100644 index 00000000..bf4dfffe --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/evaluate.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 + +""" Run HydraGNN's main train/test/validate loop on the given dataset / model combination, + refactored so the main flow is a callable function that accepts an `args` object. +""" + +from hydragnn_gfm_finetuning.utils.ensemble_utils import build_arg_parser, evaluate_finetuned_checkpoint + +if __name__ == "__main__": + parser = build_arg_parser() + args = parser.parse_args() + args.pretrained_model_ensemble_path = './pretrained_models' + + last_underscore_index = args.datasetname.rfind('_') + task = args.datasetname[:last_underscore_index] + if task in ["matbench_mp_is_metal"]: + args.finetuning_config = './finetuning_config_bce.json' + elif task in ["matbench_jdft2d"]: + args.finetuning_config = './finetuning_config.json' + + # ---- feature schema (explicit override) ---- + graph_feature_names = ["energy"] + graph_feature_dims = [1] + node_feature_names = ["atomic_number", "cartesian_coordinates"] + node_feature_dims = [1, 3] + dictionary_variables = {} + dictionary_variables['graph_feature_names'] = graph_feature_names + dictionary_variables['graph_feature_dims'] = graph_feature_dims + dictionary_variables['node_feature_names'] = node_feature_names + dictionary_variables['node_feature_dims'] = node_feature_dims + + evaluate_finetuned_checkpoint(dictionary_variables, args) diff --git a/benchmarks/matbench_v0.1_hydragnn/evaluate_our_finetune.sh b/benchmarks/matbench_v0.1_hydragnn/evaluate_our_finetune.sh new file mode 100644 index 00000000..a9ebe371 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/evaluate_our_finetune.sh @@ -0,0 +1,3 @@ +for i in {0..4}; do + python -u evaluate.py --datasetname matbench_"$1"_"$i" --modelname matbench_"$1"_"$i" --checkpoint_root "$PWD"/finetuned_models/matbench_"$1"_"$i" --output_dir results_"$1" --matbench +done diff --git a/benchmarks/matbench_v0.1_hydragnn/evaluate_your_finetune.sh b/benchmarks/matbench_v0.1_hydragnn/evaluate_your_finetune.sh new file mode 100644 index 00000000..ccfacfd4 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/evaluate_your_finetune.sh @@ -0,0 +1,3 @@ +for i in {0..4}; do + python -u evaluate.py --datasetname matbench_"$1"_"$i" --modelname matbench_"$1"_"$i" --checkpoint_root "$PWD"/logs/matbench_"$1"_"$i" --output_dir results_"$1" --matbench +done diff --git a/benchmarks/matbench_v0.1_hydragnn/finetune.py b/benchmarks/matbench_v0.1_hydragnn/finetune.py new file mode 100755 index 00000000..24df86ad --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/finetune.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 + +""" Run HydraGNN's main train/test/validate loop on the given dataset / model combination, + refactored so the main flow is a callable function that accepts an `args` object. +""" + +from hydragnn_gfm_finetuning.utils.ensemble_utils import build_arg_parser, run_finetune + +if __name__ == "__main__": + parser = build_arg_parser() + args = parser.parse_args() + + # The paths below assume that you are running this script from the root directory. + args.pretrained_model_ensemble_path = './pretrained_models' + last_underscore_index = args.datasetname.rfind('_') + task = args.datasetname[:last_underscore_index] + if task in ["matbench_mp_is_metal"]: + args.finetuning_config = './finetuning_config_bce.json' + elif task in ["matbench_jdft2d"]: + args.finetuning_config = './finetuning_config.json' + + # ---- feature schema (explicit override) ---- + graph_feature_names = ["energy"] + graph_feature_dims = [1] + node_feature_names = ["atomic_number", "cartesian_coordinates"] + node_feature_dims = [1, 3] + dictionary_variables = {} + dictionary_variables['graph_feature_names'] = graph_feature_names + dictionary_variables['graph_feature_dims'] = graph_feature_dims + dictionary_variables['node_feature_names'] = node_feature_names + dictionary_variables['node_feature_dims'] = node_feature_dims + + run_finetune(dictionary_variables, args) diff --git a/benchmarks/matbench_v0.1_hydragnn/finetune.sh b/benchmarks/matbench_v0.1_hydragnn/finetune.sh new file mode 100644 index 00000000..50507b11 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/finetune.sh @@ -0,0 +1,3 @@ +for i in {0..4}; do + python -u finetune.py --datasetname matbench_"$1"_"$i" --modelname matbench_"$1"_"$i" --num_epochs $2 --checkpoint_dir --matbench +done diff --git a/benchmarks/matbench_v0.1_hydragnn/finetuning_config.json b/benchmarks/matbench_v0.1_hydragnn/finetuning_config.json new file mode 100644 index 00000000..d6ec78c8 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/finetuning_config.json @@ -0,0 +1,63 @@ +{ + "Verbosity": { + "level": 2 + }, + "NeuralNetwork": { + "Profile": {"enable": 1}, + "Architecture": { + "freeze_conv_layers": false, + "output_heads": { + "graph": [ + { + "type": "branch-0", + "architecture": { + "dim_pretrained": 50, + "num_sharedlayers": 2, + "dim_sharedlayers": 5, + "num_headlayers": 2, + "dim_headlayers": [ + 50, + 25 + ] + } + } + ] + }, + "task_weights": [1.0], + "output_dim": [ + 1 + ], + "output_type": [ + "graph" + ] + }, + "Variables_of_interest": { + "input_node_features": [0, 1, 2, 3], + "output_names": ["pred"], + "output_index": [0], + "output_dim": [1], + "type": ["graph"], + "denormalize_output": false + }, + "Training": { + "Checkpoint" : true, + "num_epoch": 10, + "perc_train": 0.7, + "loss_function_types": ["mae"], + "batch_size": 32, + "precision": "fp64", + "energy_target_mode": "total", + "continue": 1, + "startfrom": "existing_model", + "Optimizer": { + "type": "AdamW", + "learning_rate": 1e-4 + } + } + }, + "Visualization": { + "plot_init_solution": true, + "plot_hist_solution": false, + "create_plots": true + } +} diff --git a/benchmarks/matbench_v0.1_hydragnn/finetuning_config_bce.json b/benchmarks/matbench_v0.1_hydragnn/finetuning_config_bce.json new file mode 100644 index 00000000..aa6ea5c0 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/finetuning_config_bce.json @@ -0,0 +1,63 @@ +{ + "Verbosity": { + "level": 2 + }, + "NeuralNetwork": { + "Profile": {"enable": 1}, + "Architecture": { + "freeze_conv_layers": false, + "output_heads": { + "graph": [ + { + "type": "branch-0", + "architecture": { + "dim_pretrained": 50, + "num_sharedlayers": 2, + "dim_sharedlayers": 5, + "num_headlayers": 2, + "dim_headlayers": [ + 50, + 25 + ] + } + } + ] + }, + "task_weights": [1.0], + "output_dim": [ + 1 + ], + "output_type": [ + "graph" + ] + }, + "Variables_of_interest": { + "input_node_features": [0, 1, 2, 3], + "output_names": ["pred"], + "output_index": [0], + "output_dim": [1], + "type": ["graph"], + "denormalize_output": false + }, + "Training": { + "Checkpoint" : true, + "num_epoch": 10, + "perc_train": 0.7, + "loss_function_types": ["binary"], + "batch_size": 32, + "precision": "fp64", + "energy_target_mode": "not_energy", + "continue": 0, + "startfrom": "existing_model", + "Optimizer": { + "type": "AdamW", + "learning_rate": 1e-4 + } + } + }, + "Visualization": { + "plot_init_solution": true, + "plot_hist_solution": false, + "create_plots": true + } +} diff --git a/benchmarks/matbench_v0.1_hydragnn/info.json b/benchmarks/matbench_v0.1_hydragnn/info.json new file mode 100644 index 00000000..02abd8ef --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/info.json @@ -0,0 +1,17 @@ +{ + "authors": "Isaac Lyngaas and Massimiliano Lupo Pasini and Benjamin Stump and Linda Ungerboeck", + "algorithm": "Hydragnn", + "algorithm_long": "", + "bibtex_refs": [ + "@article{pasini2026exascale,\n title={Exascale Multi-Task Graph Foundation Models for Imbalanced, Multi-Fidelity Atomistic Data},\n author={Pasini, Massimiliano Lupo and Choi, Jong Youl and Mehta, Kshitij and Messerly, Richard and Weaver, Rylie and Ungerboeck, Linda and Lyngaas, Isaac and Stump, Benajmin and Aji, Ashwin M and Schulz, Karl W and others},\n journal={arXiv preprint arXiv:2604.15380},\n year={2026}\n}", + "@techreport{lupo2026hydragnn_predictive_gfm_2026,\n title={HydraGNN\_Predictive\_GFM\_2026-Ensemble of predictive graph foundation models for atomistic materials modeling},\n author={Lupo Pasini, Massimiliano and Choi, Jong Youl and Mehta, Kshitij and Messerly, Richard and Weaver, Rylie and Aji, Ashwin M and Schulz, Karl W and Polo, Jorda},\n year={2026},\n institution={Oak Ridge National Laboratory (ORNL), Oak Ridge, TN (United States)}" +} + ], + "notes": "The original version is not capable to train on the official matbench. The data needs to be preprocessed in order to finetune with pre-trained Hydragnn models. Finetuning is performed using code from the HydraGNN and HydraGNN_GFM_FineTuning4Materials repositories which are both pip installable and used within the local scripts preprocess_data.py, finetune.py, evaluate.py, and compile.py . We provide two bash scripts one that evaluates finetuned models that we have trained ourselves and one that goes through the entire workflow of preprocessing, finetuning, evaluating and compiling. Only two matbench tasks are finetuned matbench_jdft2d and matbench_mp_is_metal.", + "requirements": { + "python": [ + "git+https://github.com/ORNL/HydraGNN.git", + "git+https://github.com/ORNL/HydraGNN_GFM_FineTuning4Materials.git" + ] + } +} diff --git a/benchmarks/matbench_v0.1_hydragnn/preprocess_data.py b/benchmarks/matbench_v0.1_hydragnn/preprocess_data.py new file mode 100644 index 00000000..8374925d --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/preprocess_data.py @@ -0,0 +1,333 @@ +import os +import pdb +import json +import torch +import torch_geometric +from torch_geometric.transforms import RadiusGraph, Distance, Spherical, LocalCartesian +from torch_geometric.transforms import AddLaplacianEigenvectorPE +import argparse + +import os, json +import pickle, csv +from pathlib import Path + +import logging +import sys +from mpi4py import MPI + +info = logging.info + +# deprecated in torch_geometric 2.0 +try: + from torch_geometric.loader import DataLoader +except ImportError: + from torch_geometric.data import DataLoader + +import hydragnn +import hydragnn.utils.profiling_and_tracing.tracer as tr + +from hydragnn.utils.datasets.distdataset import DistDataset +from hydragnn.utils.datasets.pickledataset import ( + SimplePickleWriter, + SimplePickleDataset, +) +from hydragnn.preprocess.graph_samples_checks_and_updates import gather_deg + +try: + from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset +except ImportError: + pass + +from matbench.bench import MatbenchBenchmark +from pymatgen.core import Structure + +from hydragnn.utils.datasets.abstractbasedataset import AbstractBaseDataset +from torch_geometric.data import Data +import random + +transform_coordinates = Distance(norm=False, cat=False) + +class MatbenchDataset(AbstractBaseDataset): + """MatbenchDataset datasets class""" + def __init__( + self, + task, + fold, + radius = 5.0, + max_neighbours = 50, + dist=False, + test=False, + ): + super().__init__() + + self.task = task + self.fold = fold + self.radius = radius + self.max_neighbours = max_neighbours + self.test = test + + self.radius_graph = RadiusGraph( + self.radius, loop=False, max_num_neighbors=self.max_neighbours + ) + + self.dist = dist + if self.dist: + assert torch.distributed.is_initialized() + self.world_size = torch.distributed.get_world_size() + self.rank = torch.distributed.get_rank() + + self.read_ids() + + def read_ids(self): + mb = MatbenchBenchmark(autoload=False, subset=[self.task]) + for task in mb.tasks: + task.load() + if self.test: + inputs, outputs = task.get_test_data(self.fold, include_target=True) + else: + inputs, outputs = task.get_train_and_val_data(self.fold) + dataset_len = len(inputs) + + mol_list = [] + if self.dist: + dataset_len = dataset_len // self.world_size + + for i in range(dataset_len): + if self.dist: + ii = (dataset_len // self.world_size)*self.rank + i + else: + ii = i + mol_list.append(self.pmg_to_graph(inputs[ii], outputs[ii])) + if not self.test: + random.shuffle(mol_list) + self.dataset.extend(mol_list) + + def pmg_to_graph(self, molecule, pred): + + atomic_numbers = torch.tensor(molecule.atomic_numbers).unsqueeze(1).to(torch.float64) + pos = torch.tensor(molecule.cart_coords).to(torch.float64) + natoms = torch.IntTensor([pos.shape[0]]) + if self.task in ["matbench_mp_is_metal"]: + pred = torch.tensor(pred, dtype=torch.bool).unsqueeze(0) + else: + if self.task in ["matbench_jdft2d"]: + pred = pred / 1000 # convert to mev/atom to ev/atom + pred = torch.tensor(pred, dtype=torch.float64).unsqueeze(0) + + charge = 0.0 # neutral + spin = 1.0 # singlet + graph_attr = torch.tensor([charge, spin], dtype=torch.float64) + + try: + x = torch.cat((atomic_numbers, pos), dim=1) + + data_object = Data( + #dataset_name="matbench", + natoms=natoms, + pos=pos, + atomic_numbers=atomic_numbers, # Reshaping atomic_numbers to Nx1 tensor + x=x, + pred=pred, + graph_attr=graph_attr, + ) + + data_object.y = data_object.pred + + data_object = self.radius_graph(data_object) + + data_object = transform_coordinates(data_object) + + except AssertionError as e: + print(f"Assertion error occurred: {e}") + + return data_object + + def len(self): + return len(self.dataset) + + def get(self, idx): + return self.dataset[idx] + + + +def main(): + # FIX random seed + random_state = 0 + torch.manual_seed(random_state) + + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + + parser.add_argument("--shmem", action="store_true", help="shmem") + parser.add_argument( + "--pretrained_model_ensemble_path", help="directory for ensemble of models", type=str, default="pretrained_model_ensemble" + ) + + parser.add_argument( + "--finetuning_config", help="path to JSON file with configuration for fine-tunable architecture", type=str, + default="./finetuning_config.json" + ) + parser.add_argument("--log", help="log name") + parser.add_argument("--modelname", help="model name") + + group = parser.add_mutually_exclusive_group() + group.add_argument( + "--adios", + help="Adios dataset", + action="store_const", + dest="format", + const="adios", + ) + group.add_argument( + "--pickle", + help="Pickle dataset", + action="store_const", + dest="format", + const="pickle", + ) + parser.set_defaults(format="pickle") + + parser.add_argument("--task_name", help="matbench taskname") + parser.add_argument("--fold", help="dataset fold") + + args = parser.parse_args() + + # Set this path for output. + try: + os.environ["SERIALIZED_DATA_PATH"] + except KeyError: + os.environ["SERIALIZED_DATA_PATH"] = os.getcwd() + + ################################################################################################################## + # Always initialize for multi-rank training. + comm_size, rank = hydragnn.utils.distributed.setup_ddp() + ################################################################################################################## + + comm = MPI.COMM_WORLD + + # Always initialize for multi-rank training. + world_size, world_rank = hydragnn.utils.distributed.setup_ddp() + modelname = "FineTuning" if args.modelname is None else args.modelname + + # Configurable run choices (JSON file that accompanies this example script). + filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "finetuning_config.json") + with open(filename, "r") as f: + ft_config = json.load(f) + + graph_feature_names = ["energy"] + graph_feature_dims = [1] + node_feature_names = ["atomic_number", "cartesian_coordinates"] + node_feature_dims = [1, 3] + + verbosity = ft_config["Verbosity"]["level"] + var_config = ft_config["NeuralNetwork"]["Variables_of_interest"] + var_config["graph_feature_names"] = graph_feature_names + var_config["graph_feature_dims"] = graph_feature_dims + var_config["node_feature_names"] = node_feature_names + var_config["node_feature_dims"] = node_feature_dims + + log_name = "matbench_finetuning" + # Enable print to log file. + hydragnn.utils.print.print_utils.setup_log(log_name) + + trainset = MatbenchDataset( + args.task_name, + int(args.fold), + ) + valset = MatbenchDataset( + args.task_name, + int(args.fold), + ) + testset = MatbenchDataset( + args.task_name, + int(args.fold), + test = True, + ) + + +# # Use built-in torch_geometric datasets. +# # Filter function above used to run quick example. +# # NOTE: data is moved to the device in the pre-transform. +# # NOTE: transforms/filters will NOT be re-run unless the qm9/processed/ directory is removed. +# mb = MatbenchBenchmark(autoload=False, subset=[args.task_name]) +# for task in mb.tasks: +# print(mb.tasks) +# print(task) +# task.load() +# print(task.folds) +# for fold in task.folds: +# train_inputs, train_outputs = task.get_train_and_val_data(fold) +# print(train_inputs[0].cart_coords) +# print(train_inputs[0].atomic_numbers) +# print(train_outputs[0]) +# cart_torch = torch.tensor(train_inputs[0].cart_coords) +# print(cart_torch) + + print(rank, "Local splitting: ", len(trainset), len(valset), len(testset)) + + print("Before COMM.Barrier()", flush=True) + comm.Barrier() + print("After COMM.Barrier()", flush=True) + + deg = gather_deg(trainset) + ft_config["pna_deg"] = deg + + setnames = ["trainset", "valset", "testset"] + + ## adios + if args.format == "adios": + fname = os.path.join( + os.path.dirname(__file__), "./dataset/%s.bp" % modelname + ) + adwriter = AdiosWriter(fname, comm) + adwriter.add("trainset", trainset) + adwriter.add("valset", valset) + adwriter.add("testset", testset) + # adwriter.add_global("minmax_node_feature", total.minmax_node_feature) + # adwriter.add_global("minmax_graph_feature", total.minmax_graph_feature) + adwriter.add_global("pna_deg", deg) + adwriter.save() + + ## pickle + elif args.format == "pickle": + basedir = os.path.join( + os.path.dirname(__file__), "./dataset", "%s.pickle" % modelname + ) + attrs = dict() + attrs["pna_deg"] = deg + SimplePickleWriter( + trainset, + basedir, + "trainset", + # minmax_node_feature=total.minmax_node_feature, + # minmax_graph_feature=total.minmax_graph_feature, + use_subdir=True, + attrs=attrs, + ) + SimplePickleWriter( + valset, + basedir, + "valset", + # minmax_node_feature=total.minmax_node_feature, + # minmax_graph_feature=total.minmax_graph_feature, + use_subdir=True, + ) + SimplePickleWriter( + testset, + basedir, + "testset", + # minmax_node_feature=total.minmax_node_feature, + # minmax_graph_feature=total.minmax_graph_feature, + use_subdir=True, + ) + sys.exit(0) + + + + + +if __name__ == "__main__": + + main() + diff --git a/benchmarks/matbench_v0.1_hydragnn/preprocess_matbench.sh b/benchmarks/matbench_v0.1_hydragnn/preprocess_matbench.sh new file mode 100644 index 00000000..70449a18 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/preprocess_matbench.sh @@ -0,0 +1,5 @@ +echo "Processing matbench_$1" +for fold in {0..4}; do + echo "Processing fold $fold" + python preprocess_data.py --task_name matbench_$1 --fold $fold --modelname matbench_$1_${fold} +done diff --git a/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh b/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh new file mode 100644 index 00000000..988165b6 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh @@ -0,0 +1,10 @@ +tasks="" +#for task in "mp_is_metal"; do +#for task in "jdft2d" "mp_is_metal"; do +for task in "jdft2d"; do + #bash preprocess_matbench.sh $task + bash evaluate_our_finetune.sh $task + tasks+=" matbench_$task" +done + +bash compile.sh $tasks diff --git a/benchmarks/matbench_v0.1_hydragnn/run_full.sh b/benchmarks/matbench_v0.1_hydragnn/run_full.sh new file mode 100644 index 00000000..2997ed0a --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/run_full.sh @@ -0,0 +1,14 @@ +epochs=(100 10) + +num=0 +tasks="" +#for task in "jdft2d" "mp_is_metal"; do +for task in "jdft2d"; do + bash preprocess_matbench.sh $task + bash finetune.sh $task ${epochs[num]} + let num++ + bash evaluate_your_finetune.sh $task + tasks+=" matbench_$task" +done + +bash compile.sh $tasks From 93460da3e266e1f147cafcf90155f244f60c52b0 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 13 Jul 2026 13:07:44 -0400 Subject: [PATCH 2/4] Modify run script to add both tasks --- benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh | 6 ++---- benchmarks/matbench_v0.1_hydragnn/run_full.sh | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh b/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh index 988165b6..c89e622e 100644 --- a/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh +++ b/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh @@ -1,8 +1,6 @@ tasks="" -#for task in "mp_is_metal"; do -#for task in "jdft2d" "mp_is_metal"; do -for task in "jdft2d"; do - #bash preprocess_matbench.sh $task +for task in "jdft2d" "mp_is_metal"; do + bash preprocess_matbench.sh $task bash evaluate_our_finetune.sh $task tasks+=" matbench_$task" done diff --git a/benchmarks/matbench_v0.1_hydragnn/run_full.sh b/benchmarks/matbench_v0.1_hydragnn/run_full.sh index 2997ed0a..9dc9a76b 100644 --- a/benchmarks/matbench_v0.1_hydragnn/run_full.sh +++ b/benchmarks/matbench_v0.1_hydragnn/run_full.sh @@ -2,8 +2,7 @@ epochs=(100 10) num=0 tasks="" -#for task in "jdft2d" "mp_is_metal"; do -for task in "jdft2d"; do +for task in "jdft2d" "mp_is_metal"; do bash preprocess_matbench.sh $task bash finetune.sh $task ${epochs[num]} let num++ From 71857e906f3333f978a6954328d674620a95e416 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 24 Aug 2026 10:14:12 -0400 Subject: [PATCH 3/4] Adding installation instructions and pretrained/finetuned data install code --- benchmarks/matbench_v0.1_hydragnn/installation | 12 ++++++++++++ benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh | 5 +++++ benchmarks/matbench_v0.1_hydragnn/run_full.sh | 3 +++ 3 files changed, 20 insertions(+) create mode 100644 benchmarks/matbench_v0.1_hydragnn/installation diff --git a/benchmarks/matbench_v0.1_hydragnn/installation b/benchmarks/matbench_v0.1_hydragnn/installation new file mode 100644 index 00000000..6fb77868 --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/installation @@ -0,0 +1,12 @@ +conda create -n matbench_hydragnn python=3.11 -y +conda activate matbench_hydragnn +git clone https://github.com/ORNL/HydraGNN.git +cd HydraGNN +git checkout 704d03afd11513b3467831feabf404c04992e4ae +sed -i '140,142s/^/#/' hydragnn/utils/datasets/pickledataset.py +python -m pip install . +cd .. +git clone https://github.com/irlyngaas/HydraGNN_GFM_FineTuning4Materials.git +cd HydraGNN_GFM_FineTuning4Materials +git checkout matbench +bash install.sh diff --git a/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh b/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh index c89e622e..e73ac00d 100644 --- a/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh +++ b/benchmarks/matbench_v0.1_hydragnn/run_evaluate.sh @@ -1,3 +1,8 @@ + +python get_data.py +tar -zxvf pretrained_models.tar.gz +tar -zxvf finetuned_models.tar.gz + tasks="" for task in "jdft2d" "mp_is_metal"; do bash preprocess_matbench.sh $task diff --git a/benchmarks/matbench_v0.1_hydragnn/run_full.sh b/benchmarks/matbench_v0.1_hydragnn/run_full.sh index 9dc9a76b..973ea5e0 100644 --- a/benchmarks/matbench_v0.1_hydragnn/run_full.sh +++ b/benchmarks/matbench_v0.1_hydragnn/run_full.sh @@ -1,5 +1,8 @@ epochs=(100 10) +python get_data.py +tar -zxvf pretrained_models.tar.gz + num=0 tasks="" for task in "jdft2d" "mp_is_metal"; do From a883660f3105c4440e7650d40af01347debaf02b Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 24 Aug 2026 10:15:26 -0400 Subject: [PATCH 4/4] Adding results.json.gz --- benchmarks/matbench_v0.1_hydragnn/results.json.gz | 1 + 1 file changed, 1 insertion(+) create mode 100644 benchmarks/matbench_v0.1_hydragnn/results.json.gz diff --git a/benchmarks/matbench_v0.1_hydragnn/results.json.gz b/benchmarks/matbench_v0.1_hydragnn/results.json.gz new file mode 100644 index 00000000..24ced31f --- /dev/null +++ b/benchmarks/matbench_v0.1_hydragnn/results.json.gz @@ -0,0 +1 @@ +{"@module": "matbench.bench", "@class": "MatbenchBenchmark", "version": "0.6", "tasks": {"matbench_jdft2d": {"@class": "MatbenchTask", "@module": "matbench.task", "benchmark_name": "matbench_v0.1", "dataset_name": "matbench_jdft2d", "results": {"fold_0": {"data": {"mb-jdft2d-012": 54.97999859837415, "mb-jdft2d-014": 100.17920780382686, "mb-jdft2d-027": 40.68255540003405, "mb-jdft2d-031": 46.53769357095739, "mb-jdft2d-032": 80.71778457474049, "mb-jdft2d-040": 79.25362242024529, "mb-jdft2d-050": 58.343492095670314, "mb-jdft2d-052": 77.02623708392672, "mb-jdft2d-063": 90.76838711119913, "mb-jdft2d-067": 103.20509558919352, "mb-jdft2d-069": 75.63950210944178, "mb-jdft2d-075": 38.53581418432115, "mb-jdft2d-076": 43.07328101576169, "mb-jdft2d-077": 67.94556281486173, "mb-jdft2d-082": 81.52428857359651, "mb-jdft2d-094": 95.80471395166813, "mb-jdft2d-098": 49.02909203384746, "mb-jdft2d-106": 116.86128748875987, "mb-jdft2d-108": 89.0978909466764, "mb-jdft2d-109": 62.57538099516409, "mb-jdft2d-112": 161.1478155736987, "mb-jdft2d-113": 101.74967804868264, "mb-jdft2d-124": 59.163823215695686, "mb-jdft2d-132": 57.075154674724125, "mb-jdft2d-134": 64.85715728056094, "mb-jdft2d-141": 67.84263944990222, "mb-jdft2d-148": 75.43632604796689, "mb-jdft2d-151": 182.13322335389705, "mb-jdft2d-155": 78.47903649979358, "mb-jdft2d-160": 85.78862805525056, "mb-jdft2d-161": 89.93363747008523, "mb-jdft2d-162": 112.02042163312588, "mb-jdft2d-165": 89.19331319437387, "mb-jdft2d-168": 74.07865945980065, "mb-jdft2d-169": 64.12422638012522, "mb-jdft2d-171": 106.81857017230409, "mb-jdft2d-176": 66.10593189150386, "mb-jdft2d-179": 116.62847976641534, "mb-jdft2d-191": 140.08663191184837, "mb-jdft2d-194": 114.86878704482614, "mb-jdft2d-204": 55.20492980407828, "mb-jdft2d-217": 102.67887634467921, "mb-jdft2d-220": 58.14098284173136, "mb-jdft2d-222": 121.89216600596212, "mb-jdft2d-231": 68.79163908219536, "mb-jdft2d-236": 94.19886073909656, "mb-jdft2d-244": 72.29236239193538, "mb-jdft2d-245": 52.98745211893151, "mb-jdft2d-250": 254.81692606721595, "mb-jdft2d-256": 76.8245647692316, "mb-jdft2d-257": 69.08312480565162, "mb-jdft2d-259": 99.71020817213663, "mb-jdft2d-267": 98.30253978722467, "mb-jdft2d-269": 77.42028253758852, "mb-jdft2d-272": 79.89471220562383, "mb-jdft2d-273": 87.22196040060656, "mb-jdft2d-275": 149.9550014777245, "mb-jdft2d-278": 92.96139333507978, "mb-jdft2d-287": 97.68078932488682, "mb-jdft2d-288": 70.28704696934112, "mb-jdft2d-295": 93.27182469799828, "mb-jdft2d-301": 178.20330072433902, "mb-jdft2d-303": 139.5402555063843, "mb-jdft2d-309": 72.00575191435347, "mb-jdft2d-310": 91.82822642947085, "mb-jdft2d-316": 477.7180652712785, "mb-jdft2d-320": 70.65063924201156, "mb-jdft2d-328": 70.14367407552703, "mb-jdft2d-334": 93.26328689141411, "mb-jdft2d-340": 84.13695302716677, "mb-jdft2d-341": 95.40638192229011, "mb-jdft2d-345": 72.16259770563843, "mb-jdft2d-352": 85.08498040425464, "mb-jdft2d-355": 66.8273391434788, "mb-jdft2d-356": 49.59670851132942, "mb-jdft2d-357": 66.15797080791972, "mb-jdft2d-364": 203.53771501254866, "mb-jdft2d-367": 51.32916521063964, "mb-jdft2d-370": 61.63163519297577, "mb-jdft2d-373": 70.19673284345433, "mb-jdft2d-374": 108.82857081265745, "mb-jdft2d-376": 38.238770055715705, "mb-jdft2d-382": 56.10399101250528, "mb-jdft2d-385": 98.71316594824032, "mb-jdft2d-392": 85.7325678122886, "mb-jdft2d-395": 63.536219615356806, "mb-jdft2d-398": 102.92824214114646, "mb-jdft2d-399": 77.02446992725756, "mb-jdft2d-402": 51.488439781101334, "mb-jdft2d-403": 212.4897736519265, "mb-jdft2d-407": 104.33186247916035, "mb-jdft2d-419": 71.17215417914797, "mb-jdft2d-420": 66.01376256114031, "mb-jdft2d-422": 65.45891159296762, "mb-jdft2d-427": 61.604035878028306, "mb-jdft2d-428": 394.71587390246526, "mb-jdft2d-431": 67.44547383560325, "mb-jdft2d-438": 111.10345215980887, "mb-jdft2d-441": 62.60689591956487, "mb-jdft2d-448": 63.720240236556236, "mb-jdft2d-449": 62.608445788060976, "mb-jdft2d-452": 47.40564941509337, "mb-jdft2d-456": 67.60473083354368, "mb-jdft2d-457": 65.78217896717165, "mb-jdft2d-465": 94.78980937617742, "mb-jdft2d-492": 72.52303013128953, "mb-jdft2d-498": 56.08163444195758, "mb-jdft2d-500": 75.44960585763305, "mb-jdft2d-507": 197.94682301031386, "mb-jdft2d-510": 87.4866838411307, "mb-jdft2d-512": 77.71999522027251, "mb-jdft2d-518": 28.94649360245176, "mb-jdft2d-522": 78.97400606535639, "mb-jdft2d-527": 70.14060764321353, "mb-jdft2d-543": 103.74054324072604, "mb-jdft2d-545": 74.42063330848737, "mb-jdft2d-553": 75.12819182787892, "mb-jdft2d-554": 63.24543105581002, "mb-jdft2d-556": 57.27620999349801, "mb-jdft2d-565": 50.296433303224184, "mb-jdft2d-566": 78.89781605801906, "mb-jdft2d-568": 73.83699497989032, "mb-jdft2d-570": 71.5839655478216, "mb-jdft2d-586": 129.2294453752119, "mb-jdft2d-590": 95.70736242323264, "mb-jdft2d-604": 42.566787274995605, "mb-jdft2d-618": 58.55554127519432, "mb-jdft2d-631": 71.41819875086371}, "parameters": {}, "scores": {"mae": 33.77703639678481, "mape": 22.49530267459152, "max_error": 215.9848089940379, "rmse": 54.31937618206001}, "uncertainty": null}, "fold_1": {"data": {"mb-jdft2d-003": 46.61489763093078, "mb-jdft2d-005": 121.91374118142329, "mb-jdft2d-007": 155.1341005904998, "mb-jdft2d-019": 68.55366027095191, "mb-jdft2d-020": 83.23459219183889, "mb-jdft2d-023": 60.20224651087406, "mb-jdft2d-024": 84.67172715433843, "mb-jdft2d-026": 109.71356704556526, "mb-jdft2d-030": 96.83474431989276, "mb-jdft2d-048": 80.6940910930486, "mb-jdft2d-053": 48.05319582748937, "mb-jdft2d-059": 49.069554765754084, "mb-jdft2d-061": 39.1934614922874, "mb-jdft2d-074": 61.6076044825472, "mb-jdft2d-086": 102.93102077881511, "mb-jdft2d-089": 77.1655982658709, "mb-jdft2d-093": 80.7047258985064, "mb-jdft2d-104": 58.03275066332939, "mb-jdft2d-110": 75.33233504979923, "mb-jdft2d-111": 115.20764367406, "mb-jdft2d-120": 108.46394784253451, "mb-jdft2d-128": 47.001310794131705, "mb-jdft2d-133": 68.29670703601016, "mb-jdft2d-137": 117.39815958393017, "mb-jdft2d-144": 152.03344879365275, "mb-jdft2d-146": 57.54103952915889, "mb-jdft2d-159": 78.47248426739594, "mb-jdft2d-163": 81.08117128811595, "mb-jdft2d-174": 67.00729146725894, "mb-jdft2d-175": 106.06523077993944, "mb-jdft2d-190": 65.32185488271203, "mb-jdft2d-196": 81.13964722391226, "mb-jdft2d-207": 156.55245345188354, "mb-jdft2d-210": 79.50965233098742, "mb-jdft2d-216": 69.60481108113429, "mb-jdft2d-232": 94.6812930704171, "mb-jdft2d-234": 80.64338281583771, "mb-jdft2d-248": 75.67404353021695, "mb-jdft2d-249": 76.94940196226258, "mb-jdft2d-261": 64.62980474077101, "mb-jdft2d-271": 81.93629321668828, "mb-jdft2d-276": 104.46557355493319, "mb-jdft2d-283": 170.9420354908342, "mb-jdft2d-290": 101.12582775254265, "mb-jdft2d-292": 89.90982011909904, "mb-jdft2d-297": 59.95930343647157, "mb-jdft2d-299": 78.66252533947566, "mb-jdft2d-302": 57.924385972006874, "mb-jdft2d-311": 92.05787285966278, "mb-jdft2d-317": 90.58416243729363, "mb-jdft2d-322": 73.20280057783201, "mb-jdft2d-332": 67.62464342531042, "mb-jdft2d-333": 94.00706739776795, "mb-jdft2d-338": 344.88297434826796, "mb-jdft2d-346": 76.17252128230227, "mb-jdft2d-350": 66.0423402397918, "mb-jdft2d-353": 83.2849894801932, "mb-jdft2d-354": 79.67984120871361, "mb-jdft2d-360": 109.13387746257872, "mb-jdft2d-362": 146.6460460648357, "mb-jdft2d-371": 46.98089569027723, "mb-jdft2d-372": 51.94406114618033, "mb-jdft2d-377": 68.92009751731281, "mb-jdft2d-378": 72.25283800305701, "mb-jdft2d-380": 90.14563168844155, "mb-jdft2d-388": 110.02260507260611, "mb-jdft2d-393": 145.08879249465033, "mb-jdft2d-400": 75.00513161760426, "mb-jdft2d-401": 63.5625526610251, "mb-jdft2d-417": 80.89648055182754, "mb-jdft2d-418": 90.62649839872186, "mb-jdft2d-421": 115.02719421696726, "mb-jdft2d-425": 146.2067618762599, "mb-jdft2d-436": 78.8064311323874, "mb-jdft2d-440": 159.01820219187562, "mb-jdft2d-445": 110.69803573934158, "mb-jdft2d-453": 50.94705205393089, "mb-jdft2d-455": 120.3321712218586, "mb-jdft2d-464": 60.567245632637245, "mb-jdft2d-467": 69.6027728959094, "mb-jdft2d-469": 100.25630384725942, "mb-jdft2d-471": 121.59033606908568, "mb-jdft2d-473": 134.04744075872773, "mb-jdft2d-477": 95.01559554543502, "mb-jdft2d-480": 77.4270176158592, "mb-jdft2d-483": 77.73044430936591, "mb-jdft2d-484": 74.30091448818287, "mb-jdft2d-490": 241.06899091156424, "mb-jdft2d-491": 68.13578807286771, "mb-jdft2d-493": 101.14898406837268, "mb-jdft2d-495": 113.53328910397217, "mb-jdft2d-496": 160.04648408077966, "mb-jdft2d-497": 75.09885665900767, "mb-jdft2d-503": 139.25064557122707, "mb-jdft2d-504": 58.069515159441806, "mb-jdft2d-509": 135.73248787244202, "mb-jdft2d-513": 67.66227756193383, "mb-jdft2d-514": 135.11651035076892, "mb-jdft2d-517": 25.31293820900097, "mb-jdft2d-529": 69.84683708367244, "mb-jdft2d-536": 120.61330151413205, "mb-jdft2d-539": 41.10164845531131, "mb-jdft2d-540": 68.42682722104519, "mb-jdft2d-542": 87.2386934026682, "mb-jdft2d-544": 67.91911103935921, "mb-jdft2d-549": 138.79876421941358, "mb-jdft2d-550": 64.7373449429147, "mb-jdft2d-558": 58.320508433267385, "mb-jdft2d-560": 81.67325213838875, "mb-jdft2d-561": 143.8673009939049, "mb-jdft2d-562": 44.33575089582781, "mb-jdft2d-563": 100.21135289515475, "mb-jdft2d-564": 96.54291947749572, "mb-jdft2d-575": 88.13100450972101, "mb-jdft2d-581": 76.95068601254039, "mb-jdft2d-582": 95.50189436104682, "mb-jdft2d-583": 72.25527577694113, "mb-jdft2d-588": 84.70584730306287, "mb-jdft2d-593": 54.69842797238292, "mb-jdft2d-600": 92.37949398207108, "mb-jdft2d-605": 50.65245460683767, "mb-jdft2d-609": 42.46141339171077, "mb-jdft2d-614": 35.24720680230804, "mb-jdft2d-621": 51.92955513245186, "mb-jdft2d-622": 36.29808652053082, "mb-jdft2d-625": 82.60109925559921, "mb-jdft2d-633": 46.85280417141613}, "parameters": {}, "scores": {"mae": 49.364246927840554, "mape": 0.37334005524490826, "max_error": 635.0422734858682, "rmse": 105.04543932242404}, "uncertainty": null}, "fold_2": {"data": {"mb-jdft2d-004": 83.90857310340277, "mb-jdft2d-008": 103.75745020249246, "mb-jdft2d-018": 71.12477150595689, "mb-jdft2d-035": 121.60180689912276, "mb-jdft2d-036": 151.39818486703646, "mb-jdft2d-041": 62.64161499951016, "mb-jdft2d-042": 82.43615099457165, "mb-jdft2d-045": 117.25139375748597, "mb-jdft2d-054": 75.35992597606747, "mb-jdft2d-062": 117.30134804230072, "mb-jdft2d-066": 88.3430890039749, "mb-jdft2d-068": 118.0653177362716, "mb-jdft2d-071": 167.1542175017402, "mb-jdft2d-072": 90.86585723510211, "mb-jdft2d-073": 75.96651127280758, "mb-jdft2d-083": 76.39624804952585, "mb-jdft2d-088": 84.19158188564633, "mb-jdft2d-090": 83.37651259056871, "mb-jdft2d-092": 52.640275859467195, "mb-jdft2d-095": 213.01560934298013, "mb-jdft2d-117": 58.96130608118993, "mb-jdft2d-122": 233.37945783744223, "mb-jdft2d-126": 163.00597661188496, "mb-jdft2d-138": 86.15188079645343, "mb-jdft2d-142": 108.57679889446865, "mb-jdft2d-143": 54.880274330954876, "mb-jdft2d-145": 107.83116207433588, "mb-jdft2d-152": 89.83008581487145, "mb-jdft2d-158": 122.29711838448843, "mb-jdft2d-173": 69.17708637701125, "mb-jdft2d-180": 80.45798719064582, "mb-jdft2d-181": 96.56937253278551, "mb-jdft2d-182": 80.0625963611265, "mb-jdft2d-184": 168.7397006837385, "mb-jdft2d-186": 86.27827052219457, "mb-jdft2d-192": 108.18794242725623, "mb-jdft2d-197": 97.74893103345664, "mb-jdft2d-201": 168.05882076234158, "mb-jdft2d-206": 83.8955235165543, "mb-jdft2d-209": 46.502118750813885, "mb-jdft2d-212": 106.93231795260013, "mb-jdft2d-213": 166.24274861060385, "mb-jdft2d-215": 158.44044244835507, "mb-jdft2d-218": 18.351642323093735, "mb-jdft2d-221": 87.68947154909284, "mb-jdft2d-223": 62.05198573104838, "mb-jdft2d-225": 61.531893168267295, "mb-jdft2d-228": 108.03058621230558, "mb-jdft2d-235": 44.144267068120485, "mb-jdft2d-237": 169.6273168756109, "mb-jdft2d-239": 112.7512793139888, "mb-jdft2d-241": 59.3467884048041, "mb-jdft2d-242": 99.66343303779658, "mb-jdft2d-243": 64.12865123367526, "mb-jdft2d-246": 71.0968234961817, "mb-jdft2d-251": 229.72067597711109, "mb-jdft2d-252": 97.11126266432068, "mb-jdft2d-263": 68.85200503697008, "mb-jdft2d-265": 85.16563249327326, "mb-jdft2d-266": 120.73980938545563, "mb-jdft2d-277": 76.48823724382206, "mb-jdft2d-280": 79.47056368076186, "mb-jdft2d-281": 131.00985792192967, "mb-jdft2d-282": 19.587327070461505, "mb-jdft2d-284": 70.28745291083405, "mb-jdft2d-285": 78.16669711065292, "mb-jdft2d-286": 69.53816226299372, "mb-jdft2d-291": 69.67493384504444, "mb-jdft2d-293": 97.7376634985781, "mb-jdft2d-294": 97.26166659302187, "mb-jdft2d-296": 41.76273014578559, "mb-jdft2d-305": 73.49259019887221, "mb-jdft2d-323": 84.83509385275693, "mb-jdft2d-324": 100.59850264164798, "mb-jdft2d-337": 91.79917745838617, "mb-jdft2d-349": 181.83572223977336, "mb-jdft2d-368": 64.42353754029774, "mb-jdft2d-379": 113.5101095502371, "mb-jdft2d-387": 86.21601736074639, "mb-jdft2d-389": 148.5764987770698, "mb-jdft2d-390": 93.81186322115843, "mb-jdft2d-391": 57.91164079832756, "mb-jdft2d-409": 97.19983196004887, "mb-jdft2d-411": 67.78779400777672, "mb-jdft2d-412": 55.355942118014916, "mb-jdft2d-430": 88.09586617675922, "mb-jdft2d-439": 58.54320758017979, "mb-jdft2d-442": 57.10000149488878, "mb-jdft2d-443": 39.59057044601435, "mb-jdft2d-444": 89.55118068252548, "mb-jdft2d-451": 220.42689475435748, "mb-jdft2d-459": 80.74757410015617, "mb-jdft2d-462": 83.64031955878698, "mb-jdft2d-466": 147.8340726382406, "mb-jdft2d-468": 124.34367806569267, "mb-jdft2d-470": 56.23317108473426, "mb-jdft2d-479": 52.07023160647005, "mb-jdft2d-488": 109.17092020764925, "mb-jdft2d-494": 346.15196603424056, "mb-jdft2d-499": 128.5243751770924, "mb-jdft2d-508": 73.88560913707501, "mb-jdft2d-515": 96.98041681698315, "mb-jdft2d-521": 154.79802096667416, "mb-jdft2d-528": 40.52090145731703, "mb-jdft2d-533": 80.85460914347775, "mb-jdft2d-535": 313.8918488513769, "mb-jdft2d-537": 63.0582632551394, "mb-jdft2d-538": 69.45496500703857, "mb-jdft2d-552": 59.378059794755096, "mb-jdft2d-559": 50.44163772915451, "mb-jdft2d-569": 148.91092790967755, "mb-jdft2d-571": 84.90657472568256, "mb-jdft2d-572": 121.59339970367006, "mb-jdft2d-574": 43.30324545902328, "mb-jdft2d-576": 85.27542844986517, "mb-jdft2d-579": 80.37045093347679, "mb-jdft2d-585": 117.41409437354648, "mb-jdft2d-591": 48.44967320612208, "mb-jdft2d-598": 91.45969741736154, "mb-jdft2d-602": 138.2321146935964, "mb-jdft2d-603": 65.64475862385002, "mb-jdft2d-607": 53.29417224940138, "mb-jdft2d-608": 30.166598022703056, "mb-jdft2d-616": 27.906162749660716, "mb-jdft2d-630": 122.27722716983872, "mb-jdft2d-634": 108.05753744180441, "mb-jdft2d-635": 89.24798267304834}, "parameters": {}, "scores": {"mae": 70.41816067200224, "mape": 0.793397851025742, "max_error": 894.1695879256638, "rmse": 176.27172757985082}, "uncertainty": null}, "fold_3": {"data": {"mb-jdft2d-009": 43.391109219434775, "mb-jdft2d-010": 101.18402405862656, "mb-jdft2d-011": 40.75534774257877, "mb-jdft2d-017": 47.61304970390779, "mb-jdft2d-021": 82.21408163956406, "mb-jdft2d-033": 78.4505467515943, "mb-jdft2d-043": 86.01080628399681, "mb-jdft2d-044": 85.61750141643303, "mb-jdft2d-046": 95.09231747077479, "mb-jdft2d-047": 70.02717414839903, "mb-jdft2d-049": 136.86265573717841, "mb-jdft2d-058": 70.70103462166175, "mb-jdft2d-060": 99.57485441490833, "mb-jdft2d-064": 78.18516490239784, "mb-jdft2d-080": 58.82112495894888, "mb-jdft2d-084": 108.63162497322466, "mb-jdft2d-087": 149.41017678432286, "mb-jdft2d-096": 75.29532572259215, "mb-jdft2d-097": 105.25869334721516, "mb-jdft2d-099": 168.81287103878574, "mb-jdft2d-100": 106.11618157069312, "mb-jdft2d-102": 223.34644605832028, "mb-jdft2d-105": 98.60214484974392, "mb-jdft2d-114": 70.06832706674459, "mb-jdft2d-115": 84.04133804194278, "mb-jdft2d-118": 63.97500773533125, "mb-jdft2d-119": 62.32241869735267, "mb-jdft2d-125": 81.01960022031065, "mb-jdft2d-130": 77.96489443477171, "mb-jdft2d-131": 35.94002287635724, "mb-jdft2d-135": 73.79034048990876, "mb-jdft2d-139": 169.16965568928876, "mb-jdft2d-149": 80.27072062657038, "mb-jdft2d-156": 46.49476661840205, "mb-jdft2d-157": 86.59267359376031, "mb-jdft2d-164": 87.91922498094384, "mb-jdft2d-172": 100.22414349614274, "mb-jdft2d-177": 78.93270318726304, "mb-jdft2d-185": 108.109897324031, "mb-jdft2d-188": 91.76814655928064, "mb-jdft2d-189": 87.3719773728829, "mb-jdft2d-193": 83.87625142935666, "mb-jdft2d-195": 117.05134632384586, "mb-jdft2d-200": 39.533042338741474, "mb-jdft2d-202": 65.71020537187421, "mb-jdft2d-205": 75.34186910230521, "mb-jdft2d-208": 80.67067351472949, "mb-jdft2d-214": 84.8951678751816, "mb-jdft2d-226": 86.21879480017908, "mb-jdft2d-227": 85.64262661461979, "mb-jdft2d-230": 76.8400048480608, "mb-jdft2d-238": 57.495254882632615, "mb-jdft2d-240": 90.19845605830012, "mb-jdft2d-247": 94.78352609731834, "mb-jdft2d-254": 61.91448609389307, "mb-jdft2d-255": 44.59948706926303, "mb-jdft2d-260": 65.39640622258057, "mb-jdft2d-270": 60.80909109479791, "mb-jdft2d-307": 63.633942455341895, "mb-jdft2d-308": 90.31337832863498, "mb-jdft2d-318": 79.03414514926195, "mb-jdft2d-321": 72.62203820350553, "mb-jdft2d-325": 92.30305085986264, "mb-jdft2d-326": 49.00824170631073, "mb-jdft2d-335": 230.07723897702462, "mb-jdft2d-339": 56.64022443049224, "mb-jdft2d-347": 79.7339298460791, "mb-jdft2d-366": 55.322495879610095, "mb-jdft2d-369": 117.88711070364873, "mb-jdft2d-383": 120.36390033775496, "mb-jdft2d-384": 108.07504003168594, "mb-jdft2d-394": 54.069897032291, "mb-jdft2d-396": 94.73316051402534, "mb-jdft2d-404": 39.4957367415626, "mb-jdft2d-408": 99.12064733325037, "mb-jdft2d-413": 83.35941059109307, "mb-jdft2d-414": 63.254377774655964, "mb-jdft2d-426": 58.09800999295234, "mb-jdft2d-433": 307.39659691794174, "mb-jdft2d-434": 66.28337714972939, "mb-jdft2d-435": 173.99392536625894, "mb-jdft2d-437": 100.71645067077559, "mb-jdft2d-446": 38.51115892040327, "mb-jdft2d-450": 178.3025538639142, "mb-jdft2d-454": 41.87490446725024, "mb-jdft2d-458": 41.900208478721616, "mb-jdft2d-461": 302.9420537497399, "mb-jdft2d-463": 79.91940216490761, "mb-jdft2d-472": 105.50875077876753, "mb-jdft2d-476": 86.77706301970989, "mb-jdft2d-478": 75.48500268965451, "mb-jdft2d-481": 97.94628977456337, "mb-jdft2d-482": 64.71254112296685, "mb-jdft2d-485": 89.31742723415975, "mb-jdft2d-489": 59.07218086903932, "mb-jdft2d-501": 59.04623103880703, "mb-jdft2d-502": 69.69938361461188, "mb-jdft2d-505": 153.31597052270473, "mb-jdft2d-506": 101.32382506358168, "mb-jdft2d-511": 78.83544078869463, "mb-jdft2d-516": 15.888121925256758, "mb-jdft2d-524": 88.47208477238176, "mb-jdft2d-531": 82.3425957932962, "mb-jdft2d-532": 55.23617483100011, "mb-jdft2d-534": 66.4927359822059, "mb-jdft2d-541": 76.7289488444206, "mb-jdft2d-547": 61.969284690645594, "mb-jdft2d-551": 95.83986210380256, "mb-jdft2d-567": 36.836170984475245, "mb-jdft2d-578": 49.38898186247718, "mb-jdft2d-580": 89.54595412407087, "mb-jdft2d-584": 72.30370493239751, "mb-jdft2d-589": 54.724011697241274, "mb-jdft2d-595": 59.32137255827897, "mb-jdft2d-597": 45.381698423910485, "mb-jdft2d-599": 88.2716873450542, "mb-jdft2d-606": 46.40034981036076, "mb-jdft2d-610": 55.352901289129825, "mb-jdft2d-611": 63.785136103247524, "mb-jdft2d-612": 34.30055180115173, "mb-jdft2d-615": 42.54605010515995, "mb-jdft2d-620": 38.92648586122484, "mb-jdft2d-623": 164.47482060466382, "mb-jdft2d-624": 80.49844237600061, "mb-jdft2d-626": 140.17116202134136, "mb-jdft2d-632": 50.12583867964217, "mb-jdft2d-636": 61.33394814559123}, "parameters": {}, "scores": {"mae": 38.64377126029512, "mape": 0.30402780948341834, "max_error": 474.2527250267751, "rmse": 75.40774433732548}, "uncertainty": null}, "fold_4": {"data": {"mb-jdft2d-001": 61.562358842224825, "mb-jdft2d-002": 70.77203512678403, "mb-jdft2d-006": 140.16200688699328, "mb-jdft2d-013": 65.95563860089784, "mb-jdft2d-015": 87.53704547006414, "mb-jdft2d-016": 92.03920090616273, "mb-jdft2d-022": 81.89260634996161, "mb-jdft2d-025": 104.41915977009788, "mb-jdft2d-028": 187.67534894222365, "mb-jdft2d-029": 58.03428534486827, "mb-jdft2d-034": 73.58663484706801, "mb-jdft2d-037": 68.72471412209649, "mb-jdft2d-038": 108.97203825405775, "mb-jdft2d-039": 55.813578100771856, "mb-jdft2d-051": 42.17413546101539, "mb-jdft2d-055": 42.09728237626616, "mb-jdft2d-056": 189.79276660996769, "mb-jdft2d-057": 86.99175020913214, "mb-jdft2d-065": 268.25333616243137, "mb-jdft2d-070": 49.839679889063284, "mb-jdft2d-078": 70.59925381771502, "mb-jdft2d-079": 209.76857918174923, "mb-jdft2d-081": 60.2643409121557, "mb-jdft2d-085": 81.63360378596003, "mb-jdft2d-091": 55.61870342427731, "mb-jdft2d-101": 105.10832001790617, "mb-jdft2d-103": 68.82876111790637, "mb-jdft2d-107": 93.55899482023395, "mb-jdft2d-116": 48.55963892438381, "mb-jdft2d-121": 106.3949694547544, "mb-jdft2d-123": 30.010170780619223, "mb-jdft2d-127": 58.64181389437515, "mb-jdft2d-129": 93.34850577350997, "mb-jdft2d-136": 83.78244273440829, "mb-jdft2d-140": 129.7130382396878, "mb-jdft2d-147": 649.489244757885, "mb-jdft2d-150": 82.08844241563718, "mb-jdft2d-153": 55.403288222017835, "mb-jdft2d-154": 79.747803898257, "mb-jdft2d-166": 114.55306833949784, "mb-jdft2d-167": 120.28454105797002, "mb-jdft2d-170": 107.33003821689273, "mb-jdft2d-178": 82.24681248739975, "mb-jdft2d-183": 100.02940362073463, "mb-jdft2d-187": 106.05467881938587, "mb-jdft2d-198": 99.05590722521701, "mb-jdft2d-199": 98.26861073509012, "mb-jdft2d-203": 96.05914341753362, "mb-jdft2d-211": 95.55820961229531, "mb-jdft2d-219": 94.75583220880382, "mb-jdft2d-224": 116.69876863004669, "mb-jdft2d-229": 132.02131682016253, "mb-jdft2d-233": 60.73351454698607, "mb-jdft2d-253": 161.78880073982924, "mb-jdft2d-258": 76.90721876570306, "mb-jdft2d-262": 215.06065312460342, "mb-jdft2d-264": 90.50892808673166, "mb-jdft2d-268": 125.5802153993447, "mb-jdft2d-274": 107.94237687796752, "mb-jdft2d-279": 148.0420790660279, "mb-jdft2d-289": 45.7569193130673, "mb-jdft2d-298": 104.29400598348538, "mb-jdft2d-300": 119.44712410517403, "mb-jdft2d-304": 85.96756916369212, "mb-jdft2d-306": 64.95059703808256, "mb-jdft2d-312": 78.08392909082583, "mb-jdft2d-313": 86.59735230485065, "mb-jdft2d-314": 83.44337992038253, "mb-jdft2d-315": 110.91056835895935, "mb-jdft2d-319": 82.42137883929952, "mb-jdft2d-327": 92.94278979453993, "mb-jdft2d-329": 83.40424083402807, "mb-jdft2d-330": 85.55862390117142, "mb-jdft2d-331": 130.20147298570933, "mb-jdft2d-336": 87.38591831173146, "mb-jdft2d-342": 137.57336632996893, "mb-jdft2d-343": 78.56103831527062, "mb-jdft2d-344": 59.82185442921334, "mb-jdft2d-348": 87.64329765576423, "mb-jdft2d-351": 88.59298155555567, "mb-jdft2d-358": 106.82315827041975, "mb-jdft2d-359": 75.35156133757134, "mb-jdft2d-361": 114.89591412470888, "mb-jdft2d-363": 79.98885404670368, "mb-jdft2d-365": 130.3964958035506, "mb-jdft2d-375": 130.9124407829826, "mb-jdft2d-381": 37.026866967103125, "mb-jdft2d-386": 80.2961706259133, "mb-jdft2d-397": 66.95014102753301, "mb-jdft2d-405": 123.69968920033332, "mb-jdft2d-406": 63.590022568131346, "mb-jdft2d-410": 57.34997468156231, "mb-jdft2d-415": 79.83428165048095, "mb-jdft2d-416": 75.01881061951228, "mb-jdft2d-423": 52.99229160682797, "mb-jdft2d-424": 178.67824647511097, "mb-jdft2d-429": 67.01193230964866, "mb-jdft2d-432": 89.6008238557747, "mb-jdft2d-447": 110.20836424261897, "mb-jdft2d-460": 106.09040467688966, "mb-jdft2d-474": 107.39958263270249, "mb-jdft2d-475": 110.55847832809273, "mb-jdft2d-486": 42.692131820121176, "mb-jdft2d-487": 32.08574841309828, "mb-jdft2d-519": 113.55739107267833, "mb-jdft2d-520": 72.40180897051675, "mb-jdft2d-523": 91.87767665744279, "mb-jdft2d-525": 91.0477604255124, "mb-jdft2d-526": 69.0150298320902, "mb-jdft2d-530": 114.7923700966597, "mb-jdft2d-546": 111.14119342399707, "mb-jdft2d-548": 74.07739058146832, "mb-jdft2d-555": 40.24854328247568, "mb-jdft2d-557": 90.10883678970724, "mb-jdft2d-573": 63.42495267798591, "mb-jdft2d-577": 82.4250761334526, "mb-jdft2d-587": 57.388140460083676, "mb-jdft2d-592": 98.86430383582427, "mb-jdft2d-594": 41.97088117702727, "mb-jdft2d-596": 155.7222042421986, "mb-jdft2d-601": 66.51259956796757, "mb-jdft2d-613": 57.34193524527933, "mb-jdft2d-617": 64.34607884474053, "mb-jdft2d-619": 94.41510726364051, "mb-jdft2d-627": 140.40244266723823, "mb-jdft2d-628": 89.97567748253269, "mb-jdft2d-629": 45.015930844802874}, "parameters": {}, "scores": {"mae": 47.974002995346915, "mape": 0.6040254409837277, "max_error": 1535.2095245963792, "rmse": 156.74877702824162}, "uncertainty": null}}}}, "user_metadata": {"algorithm": "HydraGNN_GFM_FineTuning"}, "benchmark_name": "matbench_v0.1", "datestamp": "2026.07.13 15:06.47", "hash": "e0a68bf85fba90e0df805f96768fca9b45e5b664979ebf14e4c94845d455d19f"} \ No newline at end of file