From 7b56afd50cf2b696da8f96b4cfe166a7dc717f91 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 15:35:28 +0000 Subject: [PATCH 01/37] Energy and Force Prediction changes (loss function in base, and option in train_val_test) --- hydragnn/models/Base.py | 29 +++++++++++++++++++++++++++ hydragnn/train/train_validate_test.py | 10 +++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/hydragnn/models/Base.py b/hydragnn/models/Base.py index 254461b76..eb86e86af 100644 --- a/hydragnn/models/Base.py +++ b/hydragnn/models/Base.py @@ -354,6 +354,35 @@ def loss(self, pred, value, head_index): return self.loss_nll(pred, value, head_index, var=var) elif self.ilossweights_hyperp == 1: return self.loss_hpweighted(pred, value, head_index, var=var) + + def energy_force_loss(self, pred, data): + # Initialize loss + tot_loss = 0 + tasks_loss = [] + # Energies + node_energy_pred = pred[0] + energy_pred = torch_scatter.scatter_add(node_energy_pred, data.batch, dim=0).float() + energy_true = data.energy + tot_loss += ( + self.loss_function(energy_pred, energy_true) * self.loss_weights[0] # There should only be one loss-weight for energy + ) + tasks_loss.append(self.loss_function(energy_pred, energy_true)) + # Forces + forces_true = data.forces + forces_pred = (torch.autograd.grad( + energy_pred, + data.pos, + grad_outputs=torch.ones_like(energy_pred), + retain_graph=True, create_graph=True + )[0]).float() + forces_pred = -forces_pred + tot_loss += ( + self.loss_function(forces_pred, forces_true) * (1-self.loss_weights[0]) # Have force-weight be the complement to energy-weight + ) + tasks_loss.append(self.loss_function(forces_pred, forces_true)) + ## FixMe: current loss functions require the number of heads to be the number of things being predicted + ## so, we need to do this manually without calling the other functions. + def loss_nll(self, pred, value, head_index, var=None): # negative log likelihood loss diff --git a/hydragnn/train/train_validate_test.py b/hydragnn/train/train_validate_test.py index fee6e7ea2..3ea43f1a3 100644 --- a/hydragnn/train/train_validate_test.py +++ b/hydragnn/train/train_validate_test.py @@ -66,6 +66,7 @@ def train_validate_test( plot_hist_solution=False, create_plots=False, use_deepspeed=False, + compute_grad_energy=False, ): num_epoch = config["Training"]["num_epoch"] EarlyStop = ( @@ -492,8 +493,13 @@ def train(loader, model, opt, verbosity, profiler=None, use_deepspeed=False): data = data.to(get_device()) if trace_level > 0: tr.stop("h2d", **syncopt) - pred = model(data) - loss, tasks_loss = model.module.loss(pred, data.y, head_index) + if compute_grad_energy: + data.pos.requires_grad = True + pred = model(data) + loss, tasks_loss = model.module.energy_force_loss(pred, data) + else: + pred = model(data) + loss, tasks_loss = model.module.loss(pred, data.y, head_index) if trace_level > 0: tr.start("forward_sync", **syncopt) MPI.COMM_WORLD.Barrier() From a277ee50e47bcf49eee9432d3581ca65283e692f Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 15:47:00 +0000 Subject: [PATCH 02/37] comments and renamings --- hydragnn/models/Base.py | 10 +++++----- hydragnn/run_training.py | 1 + hydragnn/train/train_validate_test.py | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/hydragnn/models/Base.py b/hydragnn/models/Base.py index eb86e86af..3c5f6ec1e 100644 --- a/hydragnn/models/Base.py +++ b/hydragnn/models/Base.py @@ -361,18 +361,18 @@ def energy_force_loss(self, pred, data): tasks_loss = [] # Energies node_energy_pred = pred[0] - energy_pred = torch_scatter.scatter_add(node_energy_pred, data.batch, dim=0).float() - energy_true = data.energy + graph_energy_pred = torch_scatter.scatter_add(node_energy_pred, data.batch, dim=0).float() + graph_energy_true = data.energy tot_loss += ( - self.loss_function(energy_pred, energy_true) * self.loss_weights[0] # There should only be one loss-weight for energy + self.loss_function(graph_energy_pred, graph_energy_true) * self.loss_weights[0] # There should only be one loss-weight for energy ) - tasks_loss.append(self.loss_function(energy_pred, energy_true)) + tasks_loss.append(self.loss_function(graph_energy_pred, graph_energy_true)) # Forces forces_true = data.forces forces_pred = (torch.autograd.grad( energy_pred, data.pos, - grad_outputs=torch.ones_like(energy_pred), + grad_outputs=torch.ones_like(graph_energy_pred), retain_graph=True, create_graph=True )[0]).float() forces_pred = -forces_pred diff --git a/hydragnn/run_training.py b/hydragnn/run_training.py index c702074f9..d1187c89f 100644 --- a/hydragnn/run_training.py +++ b/hydragnn/run_training.py @@ -170,6 +170,7 @@ def _(config: dict, use_deepspeed=False): scheduler, config["NeuralNetwork"], log_name, + compute_grad_energy=config["NeuralNetwork"]["Training"]["compute_grad_energy"], config["Verbosity"]["level"], plot_init_solution, plot_hist_solution, diff --git a/hydragnn/train/train_validate_test.py b/hydragnn/train/train_validate_test.py index 3ea43f1a3..1d187d87a 100644 --- a/hydragnn/train/train_validate_test.py +++ b/hydragnn/train/train_validate_test.py @@ -61,12 +61,12 @@ def train_validate_test( scheduler, config, model_with_config_name, + compute_grad_energy=False, verbosity=0, plot_init_solution=True, plot_hist_solution=False, create_plots=False, use_deepspeed=False, - compute_grad_energy=False, ): num_epoch = config["Training"]["num_epoch"] EarlyStop = ( @@ -493,7 +493,7 @@ def train(loader, model, opt, verbosity, profiler=None, use_deepspeed=False): data = data.to(get_device()) if trace_level > 0: tr.stop("h2d", **syncopt) - if compute_grad_energy: + if compute_grad_energy: # for force and energy prediction data.pos.requires_grad = True pred = model(data) loss, tasks_loss = model.module.energy_force_loss(pred, data) From fd248b5ed92be21f0eb96a567e849a048a68b9f5 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 17:00:00 +0000 Subject: [PATCH 03/37] Black formatting and mak computational graph fixes --- hydragnn/models/Base.py | 52 ++++++++++++++++-------- hydragnn/run_training.py | 2 +- hydragnn/train/train_validate_test.py | 57 +++++++++++++++++++++------ 3 files changed, 81 insertions(+), 30 deletions(-) diff --git a/hydragnn/models/Base.py b/hydragnn/models/Base.py index 3c5f6ec1e..29157a85e 100644 --- a/hydragnn/models/Base.py +++ b/hydragnn/models/Base.py @@ -15,6 +15,7 @@ from torch_geometric.nn import global_mean_pool, BatchNorm from torch.nn import GaussianNLLLoss from torch.utils.checkpoint import checkpoint +import torch_scatter from hydragnn.utils.model import activation_function_selection, loss_function_selection import sys from hydragnn.utils.distributed import get_device @@ -354,35 +355,52 @@ def loss(self, pred, value, head_index): return self.loss_nll(pred, value, head_index, var=var) elif self.ilossweights_hyperp == 1: return self.loss_hpweighted(pred, value, head_index, var=var) - + def energy_force_loss(self, pred, data): + # Asserts + assert ( + data.pos is not None and data.energy is not None and data.forces is not None + ), "data.pos, data.energy, data.forces must be provided for energy-force loss. Check your dataset creation and naming." + assert ( + data.pos.requires_grad + ), "data.pos does not have grad, so force predictions cannot be computed. Check that data.pos has grad set to true before prediction." + assert ( + self.num_heads == 1 and self.head_type[0] == "node" + ), "Force predictions are only supported for models with one head that predict nodal energy. Check your num_heads and head_types." # Initialize loss tot_loss = 0 tasks_loss = [] # Energies node_energy_pred = pred[0] - graph_energy_pred = torch_scatter.scatter_add(node_energy_pred, data.batch, dim=0).float() + graph_energy_pred = torch_scatter.scatter_add( + node_energy_pred, data.batch, dim=0 + ).float() graph_energy_true = data.energy tot_loss += ( - self.loss_function(graph_energy_pred, graph_energy_true) * self.loss_weights[0] # There should only be one loss-weight for energy - ) + self.loss_function(graph_energy_pred, graph_energy_true) + * self.loss_weights[0] + ) # There should only be one loss-weight for energy tasks_loss.append(self.loss_function(graph_energy_pred, graph_energy_true)) # Forces - forces_true = data.forces - forces_pred = (torch.autograd.grad( - energy_pred, - data.pos, - grad_outputs=torch.ones_like(graph_energy_pred), - retain_graph=True, create_graph=True - )[0]).float() + forces_true = data.forces.float() + forces_pred = torch.autograd.grad( + graph_energy_pred, + data.pos, + grad_outputs=torch.ones_like(graph_energy_pred), + retain_graph=graph_energy_pred.requires_grad, # Retain graph only if needed (it will be needed during training, but not during validation/testing) + create_graph=True, + )[0].float() + assert ( + forces_pred is not None + ), "No gradients were found for data.pos. Does your model use positions for prediction?" forces_pred = -forces_pred - tot_loss += ( - self.loss_function(forces_pred, forces_true) * (1-self.loss_weights[0]) # Have force-weight be the complement to energy-weight - ) - tasks_loss.append(self.loss_function(forces_pred, forces_true)) + tot_loss += self.loss_function(forces_pred, forces_true) * ( + 1 - self.loss_weights[0] + ) # Have force-weight be the complement to energy-weight ## FixMe: current loss functions require the number of heads to be the number of things being predicted - ## so, we need to do this manually without calling the other functions. - + ## so, we need to do loss calculation manually without calling the other functions. + + return tot_loss, tasks_loss def loss_nll(self, pred, value, head_index, var=None): # negative log likelihood loss diff --git a/hydragnn/run_training.py b/hydragnn/run_training.py index d1187c89f..035693380 100644 --- a/hydragnn/run_training.py +++ b/hydragnn/run_training.py @@ -170,12 +170,12 @@ def _(config: dict, use_deepspeed=False): scheduler, config["NeuralNetwork"], log_name, - compute_grad_energy=config["NeuralNetwork"]["Training"]["compute_grad_energy"], config["Verbosity"]["level"], plot_init_solution, plot_hist_solution, create_plots, use_deepspeed=use_deepspeed, + compute_grad_energy=config["NeuralNetwork"]["Training"]["compute_grad_energy"], ) save_model(model, optimizer, log_name, use_deepspeed=use_deepspeed) diff --git a/hydragnn/train/train_validate_test.py b/hydragnn/train/train_validate_test.py index 1d187d87a..d33e99d21 100644 --- a/hydragnn/train/train_validate_test.py +++ b/hydragnn/train/train_validate_test.py @@ -61,12 +61,12 @@ def train_validate_test( scheduler, config, model_with_config_name, - compute_grad_energy=False, verbosity=0, plot_init_solution=True, plot_hist_solution=False, create_plots=False, use_deepspeed=False, + compute_grad_energy=False, ): num_epoch = config["Training"]["num_epoch"] EarlyStop = ( @@ -163,6 +163,7 @@ def train_validate_test( verbosity, profiler=prof, use_deepspeed=use_deepspeed, + compute_grad_energy=compute_grad_energy, ) tr.stop("train") tr.disable() @@ -173,7 +174,11 @@ def train_validate_test( continue val_loss, val_taskserr = validate( - val_loader, model, verbosity, reduce_ranks=True + val_loader, + model, + verbosity, + reduce_ranks=True, + compute_grad_energy=compute_grad_energy, ) test_loss, test_taskserr, true_values, predicted_values = test( test_loader, @@ -181,6 +186,7 @@ def train_validate_test( verbosity, reduce_ranks=True, return_samples=plot_hist_solution, + compute_grad_energy=compute_grad_energy, ) scheduler.step(val_loss) if writer is not None: @@ -428,14 +434,22 @@ def gather_tensor_ranks(head_values): start_idx = i * max_size end_idx = start_idx + size.item() if end_idx > start_idx: - head_values[ - size_all[:i].sum() : size_all[:i].sum() + size.item() - ] = tensor_list[start_idx:end_idx] + head_values[size_all[:i].sum() : size_all[:i].sum() + size.item()] = ( + tensor_list[start_idx:end_idx] + ) return head_values -def train(loader, model, opt, verbosity, profiler=None, use_deepspeed=False): +def train( + loader, + model, + opt, + verbosity, + profiler=None, + use_deepspeed=False, + compute_grad_energy=False, +): if profiler is None: profiler = Profiler() @@ -547,7 +561,7 @@ def train(loader, model, opt, verbosity, profiler=None, use_deepspeed=False): @torch.no_grad() -def validate(loader, model, verbosity, reduce_ranks=True): +def validate(loader, model, verbosity, reduce_ranks=True, compute_grad_energy=False): total_error = torch.tensor(0.0, device=get_device()) tasks_error = torch.zeros(model.module.num_heads, device=get_device()) @@ -571,8 +585,14 @@ def validate(loader, model, verbosity, reduce_ranks=True): loader.dataset.ddstore.epoch_end() head_index = get_head_indices(model, data) data = data.to(get_device()) - pred = model(data) - error, tasks_loss = model.module.loss(pred, data.y, head_index) + if compute_grad_energy: # for force and energy prediction + with torch.enable_grad(): + data.pos.requires_grad = True + pred = model(data) + error, tasks_loss = model.module.energy_force_loss(pred, data) + else: + pred = model(data) + error, tasks_loss = model.module.loss(pred, data.y, head_index) total_error += error * data.num_graphs num_samples_local += data.num_graphs for itask in range(len(tasks_loss)): @@ -591,7 +611,14 @@ def validate(loader, model, verbosity, reduce_ranks=True): @torch.no_grad() -def test(loader, model, verbosity, reduce_ranks=True, return_samples=True): +def test( + loader, + model, + verbosity, + reduce_ranks=True, + return_samples=True, + compute_grad_energy=False, +): total_error = torch.tensor(0.0, device=get_device()) tasks_error = torch.zeros(model.module.num_heads, device=get_device()) @@ -618,8 +645,14 @@ def test(loader, model, verbosity, reduce_ranks=True, return_samples=True): loader.dataset.ddstore.epoch_end() head_index = get_head_indices(model, data) data = data.to(get_device()) - pred = model(data) - error, tasks_loss = model.module.loss(pred, data.y, head_index) + if compute_grad_energy: # for force and energy prediction + with torch.enable_grad(): + data.pos.requires_grad = True + pred = model(data) + error, tasks_loss = model.module.energy_force_loss(pred, data) + else: + pred = model(data) + error, tasks_loss = model.module.loss(pred, data.y, head_index) ## FIXME: temporary if int(os.getenv("HYDRAGNN_DUMP_TESTDATA", "0")) == 1: if model.module.var_output: From c3eaedcff00c490d9638bc05f10ba6aa2c3ed44c Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 17:53:32 +0000 Subject: [PATCH 04/37] fix loss weighting --- hydragnn/models/Base.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/hydragnn/models/Base.py b/hydragnn/models/Base.py index 29157a85e..3ae4cddff 100644 --- a/hydragnn/models/Base.py +++ b/hydragnn/models/Base.py @@ -376,10 +376,11 @@ def energy_force_loss(self, pred, data): node_energy_pred, data.batch, dim=0 ).float() graph_energy_true = data.energy + energy_loss_weight = self.loss_weights[0] # There should only be one loss-weight for energy tot_loss += ( self.loss_function(graph_energy_pred, graph_energy_true) - * self.loss_weights[0] - ) # There should only be one loss-weight for energy + * energy_loss_weight + ) tasks_loss.append(self.loss_function(graph_energy_pred, graph_energy_true)) # Forces forces_true = data.forces.float() @@ -394,8 +395,10 @@ def energy_force_loss(self, pred, data): forces_pred is not None ), "No gradients were found for data.pos. Does your model use positions for prediction?" forces_pred = -forces_pred - tot_loss += self.loss_function(forces_pred, forces_true) * ( - 1 - self.loss_weights[0] + force_loss_weight = energy_loss_weight * torch.mean(torch.abs(graph_energy_true)) / (torch.mean(torch.abs(forces_true)) + 1e-8) # Weight force loss and graph energy equally + tot_loss += ( + self.loss_function(forces_pred, forces_true) + * force_loss_weight ) # Have force-weight be the complement to energy-weight ## FixMe: current loss functions require the number of heads to be the number of things being predicted ## so, we need to do loss calculation manually without calling the other functions. From 5136b896311acaaab06f20586fff4812192a118a Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 18:08:34 +0000 Subject: [PATCH 05/37] black formatting --- hydragnn/models/Base.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hydragnn/models/Base.py b/hydragnn/models/Base.py index 3ae4cddff..2bcb791ba 100644 --- a/hydragnn/models/Base.py +++ b/hydragnn/models/Base.py @@ -376,7 +376,9 @@ def energy_force_loss(self, pred, data): node_energy_pred, data.batch, dim=0 ).float() graph_energy_true = data.energy - energy_loss_weight = self.loss_weights[0] # There should only be one loss-weight for energy + energy_loss_weight = self.loss_weights[ + 0 + ] # There should only be one loss-weight for energy tot_loss += ( self.loss_function(graph_energy_pred, graph_energy_true) * energy_loss_weight @@ -395,10 +397,13 @@ def energy_force_loss(self, pred, data): forces_pred is not None ), "No gradients were found for data.pos. Does your model use positions for prediction?" forces_pred = -forces_pred - force_loss_weight = energy_loss_weight * torch.mean(torch.abs(graph_energy_true)) / (torch.mean(torch.abs(forces_true)) + 1e-8) # Weight force loss and graph energy equally + force_loss_weight = ( + energy_loss_weight + * torch.mean(torch.abs(graph_energy_true)) + / (torch.mean(torch.abs(forces_true)) + 1e-8) + ) # Weight force loss and graph energy equally tot_loss += ( - self.loss_function(forces_pred, forces_true) - * force_loss_weight + self.loss_function(forces_pred, forces_true) * force_loss_weight ) # Have force-weight be the complement to energy-weight ## FixMe: current loss functions require the number of heads to be the number of things being predicted ## so, we need to do loss calculation manually without calling the other functions. From 65f6f1dd29fd2a299dc33bfb066b80fdecd3411a Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 18:12:57 +0000 Subject: [PATCH 06/37] black formatting --- hydragnn/train/train_validate_test.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hydragnn/train/train_validate_test.py b/hydragnn/train/train_validate_test.py index d33e99d21..c0d89bcc3 100644 --- a/hydragnn/train/train_validate_test.py +++ b/hydragnn/train/train_validate_test.py @@ -437,6 +437,9 @@ def gather_tensor_ranks(head_values): head_values[size_all[:i].sum() : size_all[:i].sum() + size.item()] = ( tensor_list[start_idx:end_idx] ) + head_values[ + size_all[:i].sum() : size_all[:i].sum() + size.item() + ] = tensor_list[start_idx:end_idx] return head_values From 3395484489c1b1776c566bee644bc1e29e29b23c Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 18:13:15 +0000 Subject: [PATCH 07/37] black formatting --- hydragnn/train/train_validate_test.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/hydragnn/train/train_validate_test.py b/hydragnn/train/train_validate_test.py index c0d89bcc3..a4fc9c635 100644 --- a/hydragnn/train/train_validate_test.py +++ b/hydragnn/train/train_validate_test.py @@ -434,9 +434,6 @@ def gather_tensor_ranks(head_values): start_idx = i * max_size end_idx = start_idx + size.item() if end_idx > start_idx: - head_values[size_all[:i].sum() : size_all[:i].sum() + size.item()] = ( - tensor_list[start_idx:end_idx] - ) head_values[ size_all[:i].sum() : size_all[:i].sum() + size.item() ] = tensor_list[start_idx:end_idx] From c5d0c7b397fce36814886da0ed3d28cccd221226 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Fri, 6 Sep 2024 21:47:19 +0000 Subject: [PATCH 08/37] Fix DIMEStack testing issues, and compute_grad_energy default in config_utils --- hydragnn/models/DIMEStack.py | 4 ++-- hydragnn/utils/config_utils.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/hydragnn/models/DIMEStack.py b/hydragnn/models/DIMEStack.py index 1949d3406..da52955dc 100644 --- a/hydragnn/models/DIMEStack.py +++ b/hydragnn/models/DIMEStack.py @@ -14,7 +14,7 @@ import torch from torch import Tensor -from torch.nn import Identity, SiLU +from torch.nn import Identity, SiLU, Sigmoid from torch_geometric.nn import Linear, Sequential from torch_geometric.nn.models.dimenet import ( @@ -101,7 +101,7 @@ def get_conv(self, input_dim, output_dim): out_emb_channels=self.out_emb_size, out_channels=output_dim, num_layers=1, - act=SiLU(), + act=Sigmoid(), # Sigmoid instead of SiLU here promotes stability when we have a linear decoder at the start of convolution (especially for random data examples in test_graphs.py) output_initializer="glorot_orthogonal", ) return Sequential( diff --git a/hydragnn/utils/config_utils.py b/hydragnn/utils/config_utils.py index 3331952c8..7b71ab6b2 100644 --- a/hydragnn/utils/config_utils.py +++ b/hydragnn/utils/config_utils.py @@ -106,6 +106,9 @@ def update_config(config, train_loader, val_loader, test_loader): if "conv_checkpointing" not in config["NeuralNetwork"]["Training"]: config["NeuralNetwork"]["Training"]["conv_checkpointing"] = False + + if "compute_grad_energy" not in config["NeuralNetwork"]["Training"]: + config["NeuralNetwork"]["Training"]["compute_grad_energy"] = False return config @@ -260,9 +263,11 @@ def get_log_name_config(config): + str(config["NeuralNetwork"]["Training"]["batch_size"]) + "-data-" + config["Dataset"]["name"][ - : config["Dataset"]["name"].rfind("_") - if config["Dataset"]["name"].rfind("_") > 0 - else None + : ( + config["Dataset"]["name"].rfind("_") + if config["Dataset"]["name"].rfind("_") > 0 + else None + ) ] + "-node_ft-" + "".join( From fc5a55446e10badfbbc902602c88d895b7036a44 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 13:41:40 -0400 Subject: [PATCH 09/37] LJ example added first draft --- examples/LennardJones/AtomicStructure.py | 81 ++++ examples/LennardJones/Forces_Scatterplot.png | Bin 0 -> 291536 bytes examples/LennardJones/LJ.json | 75 +++ examples/LennardJones/LJ_multitask.json | 75 +++ .../LennardJones/LJ_vlad_atomic_forces.json | 61 +++ .../LennardJones/LJ_vlad_total_energy.json | 71 +++ examples/LennardJones/LJpotential.py | 31 ++ examples/LennardJones/LennardJones.py | 450 ++++++++++++++++++ examples/LennardJones/README.md | 92 ++++ examples/LennardJones/__init__.py | 1 + examples/LennardJones/configurational_data.py | 214 +++++++++ examples/LennardJones/distributed_utils.py | 3 + examples/LennardJones/energy_Scatterplot.png | Bin 0 -> 180440 bytes examples/LennardJones/graph_utils.py | 55 +++ examples/LennardJones/inference.py | 208 ++++++++ .../inference_derivative_energy.py | 229 +++++++++ .../LennardJones/train_vlad_atomic_forces.py | 412 ++++++++++++++++ .../LennardJones/train_vlad_total_energy.py | 408 ++++++++++++++++ tests/test_examples.py | 2 +- 19 files changed, 2467 insertions(+), 1 deletion(-) create mode 100644 examples/LennardJones/AtomicStructure.py create mode 100644 examples/LennardJones/Forces_Scatterplot.png create mode 100644 examples/LennardJones/LJ.json create mode 100644 examples/LennardJones/LJ_multitask.json create mode 100644 examples/LennardJones/LJ_vlad_atomic_forces.json create mode 100644 examples/LennardJones/LJ_vlad_total_energy.json create mode 100644 examples/LennardJones/LJpotential.py create mode 100644 examples/LennardJones/LennardJones.py create mode 100644 examples/LennardJones/README.md create mode 100644 examples/LennardJones/__init__.py create mode 100644 examples/LennardJones/configurational_data.py create mode 100644 examples/LennardJones/distributed_utils.py create mode 100644 examples/LennardJones/energy_Scatterplot.png create mode 100644 examples/LennardJones/graph_utils.py create mode 100644 examples/LennardJones/inference.py create mode 100644 examples/LennardJones/inference_derivative_energy.py create mode 100644 examples/LennardJones/train_vlad_atomic_forces.py create mode 100644 examples/LennardJones/train_vlad_total_energy.py diff --git a/examples/LennardJones/AtomicStructure.py b/examples/LennardJones/AtomicStructure.py new file mode 100644 index 000000000..bc738dd36 --- /dev/null +++ b/examples/LennardJones/AtomicStructure.py @@ -0,0 +1,81 @@ +import torch + +class AtomicStructureHandler(): + + def __init__(self, list_atom_types, bravais_lattice_constants, radius_cutoff, formula): + + self.bravais_lattice_constants = bravais_lattice_constants + self.radius_cutoff = radius_cutoff + self.formula = formula + + def compute(self, data): + + assert (data.pos.shape[0] == data.x.shape[0]) + + interatomic_potential = torch.zeros([data.pos.shape[0], 1]) + interatomic_forces = torch.zeros([data.pos.shape[0], 3]) + + for node_id in range(data.pos.shape[0]): + + neighbor_list_indices = torch.where(data.edge_index[0, :] == node_id)[0].tolist() + neighbor_list = data.edge_index[1, neighbor_list_indices] + + for neighbor_id, edge_id in zip(neighbor_list, neighbor_list_indices): + + neighbor_pos = data.pos[neighbor_id, :] + distance_vector = data.pos[neighbor_id, :] - data.pos[node_id, :] + + # Adjust the neighbor position based on periodic boundary conditions (PBC) + ## If the distance between the atoms is larger than the cutoff radius, the edge is because of PBC conditions + if torch.norm(distance_vector) > self.radius_cutoff: + ## At this point, we know that the edge is due to PBC conditions, so we need to adjust the neighbor position. We also know that + ## that this connection MUST be the closest connection possible as a result of the asserted radius_cutoff < supercell_size earlier + ## in the code. Because of this, we can simply adjust the neighbor position coordinate-wise to be closer than + ## as done in the following lines of code. The logic goes that if the distance vector[index] is larger than half the supercell size, + ## then there is a closer distance at +- supercell_size[index], and we adjust to that for each coordinate + if abs(distance_vector[0]) > data.supercell_size[0, 0] / 2: + if distance_vector[0] > 0: + neighbor_pos[0] -= data.supercell_size[0, 0] + else: + neighbor_pos[0] += data.supercell_size[0, 0] + + if abs(distance_vector[1]) > data.supercell_size[1, 1] / 2: + if distance_vector[1] > 0: + neighbor_pos[1] -= data.supercell_size[1, 1] + else: + neighbor_pos[1] += data.supercell_size[1, 1] + + if abs(distance_vector[2]) > data.supercell_size[2, 2] / 2: + if distance_vector[2] > 0: + neighbor_pos[2] -= data.supercell_size[2, 2] + else: + neighbor_pos[2] += data.supercell_size[2, 2] + + # The distance vecor may need to be updated after applying PBCs + distance_vector = data.pos[node_id, :] - neighbor_pos + + #pair_distance = data.edge_attr[edge_id].item() + interatomic_potential[node_id] += self.formula.potential_energy(distance_vector) + + derivative_x = self.formula.derivative_x(distance_vector) + derivative_y = self.formula.derivative_y(distance_vector) + derivative_z = self.formula.derivative_z(distance_vector) + + interatomic_forces_contribution_x = - derivative_x + interatomic_forces_contribution_y = - derivative_y + interatomic_forces_contribution_z = - derivative_z + + interatomic_forces[node_id, 0] += interatomic_forces_contribution_x + interatomic_forces[node_id, 1] += interatomic_forces_contribution_y + interatomic_forces[node_id, 2] += interatomic_forces_contribution_z + + data.x = torch.cat( + ( + data.x, + interatomic_potential, + interatomic_forces + ), + 1, + ) + + return data diff --git a/examples/LennardJones/Forces_Scatterplot.png b/examples/LennardJones/Forces_Scatterplot.png new file mode 100644 index 0000000000000000000000000000000000000000..85c45ce8e39575678d61443e1757d75f20cd7e3d GIT binary patch literal 291536 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

t<4Jpub}j(ii;Xx8 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 nOi18tu?i>Nu?p(mz_e_k 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 MG1N}}`kU|n7m{&C-2eap literal 0 HcmV?d00001 diff --git a/examples/LennardJones/LJ.json b/examples/LennardJones/LJ.json new file mode 100644 index 000000000..f11c66008 --- /dev/null +++ b/examples/LennardJones/LJ.json @@ -0,0 +1,75 @@ +{ + "Verbosity": { + "level": 2 + }, + "Dataset": { + "name": "LJdataset", + "path": {"total": "./dataset/data"}, + "format": "XYZ", + "rotational_invariance": true, + "node_features": { + "name": ["atom_type"], + "dim": [1], + "column_index": [0] + }, + "graph_features":{ + "name": ["total_energy"], + "dim": [1], + "column_index": [0] + } + }, + "NeuralNetwork": { + "Architecture": { + "periodic_boundary_conditions": true, + "model_type": "DimeNet", + "equivariance": false, + "radius": 5.0, + "max_neighbours": 5, + "int_emb_size": 32, + "out_emb_size": 16, + "basis_emb_size": 8, + "num_before_skip": 1, + "num_after_skip": 1, + "envelope_exponent": 5, + "num_radial": 5, + "num_spherical": 2, + "hidden_dim": 20, + "num_conv_layers": 4, + "output_heads": { + "node": { + "num_headlayers": 2, + "dim_headlayers": [60,20], + "type": "mlp" + } + }, + "task_weights": [1] + }, + "Variables_of_interest": { + "input_node_features": [0], + "output_index": [ + 0 + ], + "type": [ + "node" + ], + "output_dim": [1], + "output_names": ["graph_energy"] + }, + "Training": { + "num_epoch": 25, + "batch_size": 64, + "patience": 20, + "early_stopping": true, + "Optimizer": { + "type": "Adam", + "learning_rate": 0.005 + }, + "conv_checkpointing": false + } + }, + "Visualization": { + "plot_init_solution": true, + "plot_hist_solution": true, + "create_plots": true + } +} diff --git a/examples/LennardJones/LJ_multitask.json b/examples/LennardJones/LJ_multitask.json new file mode 100644 index 000000000..662254da7 --- /dev/null +++ b/examples/LennardJones/LJ_multitask.json @@ -0,0 +1,75 @@ +{ + "Verbosity": { + "level": 2 + }, + "Dataset": { + "name": "LJdataset", + "path": {"total": "./dataset/data"}, + "format": "XYZ", + "rotational_invariance": true, + "node_features": { + "name": ["atom_type", "potential", "forces"], + "dim": [1, 1, 3], + "column_index": [0,4,5] + }, + "graph_features":{ + "name": ["total_energy"], + "dim": [1], + "column_index": [0] + } + }, + "NeuralNetwork": { + "Architecture": { + "periodic_boundary_conditions": true, + "model_type": "EGNN", + "equivariance": true, + "edge_features": ["bond_length", "polar_angle", "azimutal_angle"], + "max_neighbours": 20, + "hidden_dim": 20, + "num_conv_layers": 6, + "output_heads": { + "graph": { + "num_sharedlayers": 2, + "dim_sharedlayers": 50, + "num_headlayers": 2, + "dim_headlayers": [ + 20, + 20 + ] + }, + "node": { + "num_headlayers": 2, + "dim_headlayers": [20,20], + "type": "mlp" + } + }, + "task_weights": [ + 1, 1 + ] + }, + "Variables_of_interest": { + "input_node_features": [0], + "output_index": [ + 0, 2 + ], + "type": [ + "graph", "node" + ], + "output_dim": [1, 3], + "output_names": ["total_energy", "atomic_forces"] + }, + "Training": { + "num_epoch": 50, + "batch_size": 3, + "continue": 0, + "EarlyStopping": true, + "patience": 100, + "Checkpoint": true, + "checkpoint_warmup": 100, + "startfrom": "existing_model", + "Optimizer": { + "learning_rate": 0.001 + } + } + } +} diff --git a/examples/LennardJones/LJ_vlad_atomic_forces.json b/examples/LennardJones/LJ_vlad_atomic_forces.json new file mode 100644 index 000000000..c14b23f8a --- /dev/null +++ b/examples/LennardJones/LJ_vlad_atomic_forces.json @@ -0,0 +1,61 @@ +{ + "Verbosity": { + "level": 2 + }, + "Dataset": { + "name": "LJdataset", + "path": {"total": "./dataset/data"}, + "format": "XYZ", + "rotational_invariance": true, + "node_features": { + "name": ["atom_type", "forces"], + "dim": [1, 3], + "column_index": [0, 1] + } + }, + "NeuralNetwork": { + "Architecture": { + "periodic_boundary_conditions": true, + "model_type": "EGNN", + "equivariance": true, + "edge_features": ["bond_length", "polar_angle", "azimutal_angle"], + "max_neighbours": 20, + "hidden_dim": 10, + "num_conv_layers": 3, + "output_heads": { + "node": { + "num_headlayers": 2, + "dim_headlayers": [50,25], + "type": "mlp" + } + }, + "task_weights": [ + 1 + ] + }, + "Variables_of_interest": { + "input_node_features": [0], + "output_index": [ + 1 + ], + "type": [ + "node" + ], + "output_dim": [3], + "output_names": ["forces"] + }, + "Training": { + "num_epoch": 20, + "batch_size": 3, + "continue": 0, + "EarlyStopping": true, + "patience": 100, + "Checkpoint": true, + "checkpoint_warmup": 100, + "startfrom": "existing_model", + "Optimizer": { + "learning_rate": 0.001 + } + } + } +} diff --git a/examples/LennardJones/LJ_vlad_total_energy.json b/examples/LennardJones/LJ_vlad_total_energy.json new file mode 100644 index 000000000..db57121a7 --- /dev/null +++ b/examples/LennardJones/LJ_vlad_total_energy.json @@ -0,0 +1,71 @@ +{ + "Verbosity": { + "level": 2 + }, + "Dataset": { + "name": "LJdataset", + "path": {"total": "./dataset/data"}, + "format": "XYZ", + "rotational_invariance": true, + "node_features": { + "name": ["atom_type"], + "dim": [1], + "column_index": [0] + }, + "graph_features":{ + "name": ["total_energy"], + "dim": [1], + "column_index": [0] + } + }, + "NeuralNetwork": { + "Architecture": { + "periodic_boundary_conditions": true, + "model_type": "EGNN", + "equivariance": true, + "edge_features": ["bond_length", "polar_angle", "azimutal_angle"], + "max_neighbours": 20, + "hidden_dim": 10, + "num_conv_layers": 3, + "output_heads": { + "graph": { + "num_sharedlayers": 2, + "dim_sharedlayers": 20, + "num_headlayers": 2, + "dim_headlayers": [ + 50, + 50 + ] + } + }, + "task_weights": [ + 1 + ] + }, + "Variables_of_interest": { + "input_node_features": [0, 1, 2, 3], + "output_index": [ + 0 + ], + "type": [ + "graph" + ], + "output_dim": [1], + "output_names": ["energy"] + }, + "Training": { + "num_epoch": 50, + "batch_size": 3, + "perc_train": 0.8, + "continue": 0, + "EarlyStopping": true, + "patience": 10, + "Checkpoint": true, + "checkpoint_warmup": 100, + "startfrom": "existing_model", + "Optimizer": { + "learning_rate": 0.001 + } + } + } +} diff --git a/examples/LennardJones/LJpotential.py b/examples/LennardJones/LJpotential.py new file mode 100644 index 000000000..ef8c1ec6e --- /dev/null +++ b/examples/LennardJones/LJpotential.py @@ -0,0 +1,31 @@ +import torch + +class LJpotential(): + + def __init__(self, epsilon, sigma): + self.epsilon = epsilon + self.sigma = sigma + + def potential_energy(self, distance_vector): + pair_distance = torch.norm(distance_vector) + return 4 * self.epsilon * ((self.sigma / pair_distance) ** 12 - (self.sigma / pair_distance) ** 6) + + def radial_derivative(self, distance_vector): + pair_distance = torch.norm(distance_vector) + return 4 * self.epsilon * (-12 * (self.sigma / pair_distance) ** 12 * 1 / pair_distance + 6 * ( + self.sigma / pair_distance) ** 6 * 1 / pair_distance) + + def derivative_x(self, distance_vector): + pair_distance = torch.norm(distance_vector) + radial_derivative = self.radial_derivative(pair_distance) + return radial_derivative * (distance_vector[0].item()) / pair_distance + + def derivative_y(self, distance_vector): + pair_distance = torch.norm(distance_vector) + radial_derivative = self.radial_derivative(pair_distance) + return radial_derivative * (distance_vector[1].item()) / pair_distance + + def derivative_z(self, distance_vector): + pair_distance = torch.norm(distance_vector) + radial_derivative = self.radial_derivative(pair_distance) + return radial_derivative * (distance_vector[2].item()) / pair_distance diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py new file mode 100644 index 000000000..9b99fe37e --- /dev/null +++ b/examples/LennardJones/LennardJones.py @@ -0,0 +1,450 @@ +import mpi4py +from mpi4py import MPI + +mpi4py.rc.thread_level = "serialized" +mpi4py.rc.threads = False + +import os, json +import random + +import h5py + +import logging +import sys +import argparse + +import hydragnn +from hydragnn.utils.print_utils import iterate_tqdm, log +from hydragnn.utils.time_utils import Timer + +from hydragnn.preprocess.load_data import split_dataset +from hydragnn.utils.abstractrawdataset import AbstractBaseDataset +from hydragnn.utils.distdataset import DistDataset +from hydragnn.utils.pickledataset import SimplePickleWriter, SimplePickleDataset +from hydragnn.preprocess.utils import gather_deg + +import numpy as np + +try: + from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset +except ImportError: + pass + +from torch_geometric.data import Data +from torch_geometric.transforms import RadiusGraph, Distance, Spherical, LocalCartesian +import torch +import torch.distributed as dist + +from hydragnn.utils import nsplit +import hydragnn.utils.tracer as tr + +# Using LJ dataset creation +from configurational_data import deterministic_graph_data +from LJpotential import LJpotential +from AtomicStructure import AtomicStructureHandler +def create_dataset(config): + # Angstrom unit + primitive_bravais_lattice_constant_x = 3.8 + primitive_bravais_lattice_constant_y = 3.8 + primitive_bravais_lattice_constant_z = 3.8 + path = "./dataset/data" + radius_cutoff = config["NeuralNetwork"]["Architecture"]["radius"] + number_configurations = config["NeuralNetwork"]["Training"]["num_configurations"] if "num_configurations" in config["NeuralNetwork"]["Training"] else 1000 + atom_types = [1] + formula = LJpotential(1.0, 3.4) + atomic_structure_handler = AtomicStructureHandler(atom_types, [primitive_bravais_lattice_constant_x, primitive_bravais_lattice_constant_y, primitive_bravais_lattice_constant_z], radius_cutoff, formula) + deterministic_graph_data(path, atom_types, atomic_structure_handler=atomic_structure_handler, radius_cutoff=radius_cutoff, relative_maximum_atomic_displacement=1e-1, number_configurations=number_configurations) + + +# FIXME: this works fine for now because we train on disordered atomic structures with potentials and forces computed with Lennard-Jones + + +torch.set_default_dtype(torch.float32) + + +def info(*args, logtype="info", sep=" "): + getattr(logging, logtype)(sep.join(map(str, args))) + + +# FIXME: this radis cutoff overwrites the radius cutoff currently written in the JSON file +create_graph_fromXYZ = RadiusGraph(r=5.0) # radius cutoff in angstrom +compute_edge_lengths = Distance(norm=False, cat=True) +spherical_coordinates = Spherical(norm=False, cat=False) +cartesian_coordinates = LocalCartesian(norm=False, cat=False) + + +class LJDataset(AbstractBaseDataset): + """LJDataset dataset class""" + + def __init__(self, dirpath, dist=False, sampling=None): + super().__init__() + + self.dist = dist + self.world_size = 1 + self.rank = 1 + if self.dist: + assert torch.distributed.is_initialized() + self.world_size = torch.distributed.get_world_size() + self.rank = torch.distributed.get_rank() + + dirfiles = sorted(os.listdir(dirpath)) + + rx = list(nsplit((dirfiles), self.world_size))[self.rank] + + for file in rx: + filepath = os.path.join(dirpath, file) + self.dataset.append(self.transform_input_to_data_object_base(filepath)) + + def transform_input_to_data_object_base(self, filepath): + + # Using readline() + file = open(filepath, "r") + + torch_data = torch.empty((0, 8), dtype=torch.float32) + torch_supercell = torch.zeros((0, 3), dtype=torch.float32) + + count = 0 + + while True: + count += 1 + + # Get next line from file + line = file.readline() + + # if line is empty + # end of file is reached + if not line: + break + + if count == 1: + total_energy = float(line) + elif count == 2: + energy_per_atom = float(line) + elif 2 < count < 6: + array_line = np.fromstring(line, dtype=float, sep="\t") + torch_supercell = torch.cat( + [torch_supercell, torch.from_numpy(array_line).unsqueeze(0)], axis=0 + ) + elif count > 5: + array_line = np.fromstring(line, dtype=float, sep="\t") + torch_data = torch.cat( + [torch_data, torch.from_numpy(array_line).unsqueeze(0)], axis=0 + ) + # print("Line{}: {}".format(count, line.strip())) + + file.close() + + num_nodes = torch_data.shape[0] + + energy_pre_translation_factor = 0.0 + energy_pre_scaling_factor = 1.0 / num_nodes + energy_per_atom_pretransformed = (energy_per_atom - energy_pre_translation_factor) * energy_pre_scaling_factor + grad_energy_post_scaling_factor = 1.0/energy_pre_scaling_factor * torch.ones(num_nodes, 1) + forces = torch_data[:, [5, 6, 7]] + forces_pre_scaling_factor = 1.0 + forces_pre_scaled = forces * forces_pre_scaling_factor + + data = Data( + supercell_size=torch_supercell.to(torch.float32), + num_nodes=num_nodes, + grad_energy_post_scaling_factor=grad_energy_post_scaling_factor, + forces_pre_scaling_factor=torch.tensor(forces_pre_scaling_factor).to(torch.float32), + forces=forces, + forces_pre_scaled=forces_pre_scaled, + pos=torch_data[:, [1, 2, 3]].to(torch.float32), + x=torch.cat([torch_data[:, [0, 4]]], axis=1).to(torch.float32), + y=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), + energy_per_atom=torch.tensor(energy_per_atom_pretransformed).unsqueeze(0).to(torch.float32), + energy=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), + ) + data = create_graph_fromXYZ(data) + data = compute_edge_lengths(data) + data.edge_attr = data.edge_attr.to(torch.float32) + #data = spherical_coordinates(data) + data = cartesian_coordinates(data) + + return data + + def len(self): + return len(self.dataset) + + def get(self, idx): + return self.dataset[idx] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument("--sampling", type=float, help="sampling ratio", default=None) + parser.add_argument( + "--preonly", + action="store_true", + help="preprocess only (no training)", + ) + parser.add_argument("--inputfile", help="input file", type=str, default="LJ.json") + parser.add_argument("--mae", action="store_true", help="do mae calculation") + parser.add_argument("--ddstore", action="store_true", help="ddstore dataset") + parser.add_argument("--ddstore_width", type=int, help="ddstore width", default=None) + parser.add_argument("--shmem", action="store_true", help="shmem") + parser.add_argument("--log", help="log name") + parser.add_argument("--batch_size", type=int, help="batch_size", default=None) + parser.add_argument("--everyone", action="store_true", help="gptimer") + + 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") # Changed this for my PC + args = parser.parse_args() + + graph_feature_names = ["total_energy"] + graph_feature_dims = [1] + node_feature_names = ["atomic_number", "potential", "forces"] + node_feature_dims = [1, 1, 3] + dirpwd = os.path.dirname(os.path.abspath(__file__)) + datadir = os.path.join(dirpwd, "dataset/data") + ################################################################################################################## + input_filename = os.path.join(dirpwd, args.inputfile) + ################################################################################################################## + # Configurable run choices (JSON file that accompanies this example script). + with open(input_filename, "r") as f: + config = json.load(f) + verbosity = config["Verbosity"]["level"] + config["NeuralNetwork"]["Variables_of_interest"][ + "graph_feature_names" + ] = graph_feature_names + config["NeuralNetwork"]["Variables_of_interest"][ + "graph_feature_dims" + ] = graph_feature_dims + config["NeuralNetwork"]["Variables_of_interest"][ + "node_feature_names" + ] = node_feature_names + config["NeuralNetwork"]["Variables_of_interest"][ + "node_feature_dims" + ] = node_feature_dims + + if args.batch_size is not None: + config["NeuralNetwork"]["Training"]["batch_size"] = args.batch_size + + ################################################################################################################## + # Always initialize for multi-rank training. + comm_size, rank = hydragnn.utils.setup_ddp() + ################################################################################################################## + + comm = MPI.COMM_WORLD + + ## Set up logging + logging.basicConfig( + level=logging.INFO, + format="%%(levelname)s (rank %d): %%(message)s" % (rank), + datefmt="%H:%M:%S", + ) + + log_name = "LJ" if args.log is None else args.log + hydragnn.utils.setup_log(log_name) + writer = hydragnn.utils.get_summary_writer(log_name) + + log("Command: {0}\n".format(" ".join([x for x in sys.argv])), rank=0) + + modelname = "LJ" + # Check for dataset for each format + lookdir = os.path.join(dirpwd, "dataset") + if args.format == "pickle": + dataset_exists = os.path.exists(os.path.join(lookdir, "LJ.pickle")) + if args.format == "adios": + dataset_exists = os.path.exists(os.path.join(lookdir, "%s.bp" % modelname)) + + # Create dataset if preonly specified or dataset does not exist + if not dataset_exists: + + ## local data + create_dataset(config) + total = LJDataset( + os.path.join(datadir), + dist=True, + ) + ## This is a local split + trainset, valset, testset = split_dataset( + dataset=total, + perc_train=0.9, + stratify_splitting=False, + ) + print("Local splitting: ", len(total), len(trainset), len(valset), len(testset)) + + deg = gather_deg(trainset) + config["pna_deg"] = deg.tolist() + + setnames = ["trainset", "valset", "testset"] + + if args.format == "pickle": + + ## 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, + ) + + if args.format == "adios": + ## 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() + + tr.initialize() + tr.disable() + timer = Timer("load_data") + timer.start() + if args.format == "adios": + info("Adios load") + assert not (args.shmem and args.ddstore), "Cannot use both ddstore and shmem" + opt = { + "preload": False, + "shmem": args.shmem, + "ddstore": args.ddstore, + "ddstore_width": args.ddstore_width, + } + fname = os.path.join(os.path.dirname(__file__), "./dataset/%s.bp" % modelname) + trainset = AdiosDataset(fname, "trainset", comm, **opt) + valset = AdiosDataset(fname, "valset", comm, **opt) + testset = AdiosDataset(fname, "testset", comm, **opt) + elif args.format == "pickle": + info("Pickle load") + basedir = os.path.join( + os.path.dirname(__file__), "dataset", "%s.pickle" % modelname + ) + var_config = config["NeuralNetwork"]["Variables_of_interest"] + trainset = SimplePickleDataset( + basedir=basedir, label="trainset", preload=True, var_config=var_config + ) + valset = SimplePickleDataset( + basedir=basedir, label="valset", var_config=var_config + ) + testset = SimplePickleDataset( + basedir=basedir, label="testset", var_config=var_config + ) + # minmax_node_feature = trainset.minmax_node_feature + # minmax_graph_feature = trainset.minmax_graph_feature + pna_deg = trainset.pna_deg + if args.ddstore: + opt = {"ddstore_width": args.ddstore_width} + trainset = DistDataset(trainset, "trainset", comm, **opt) + valset = DistDataset(valset, "valset", comm, **opt) + testset = DistDataset(testset, "testset", comm, **opt) + # trainset.minmax_node_feature = minmax_node_feature + # trainset.minmax_graph_feature = minmax_graph_feature + trainset.pna_deg = pna_deg + else: + raise NotImplementedError("No supported format: %s" % (args.format)) + + info( + "trainset,valset,testset size: %d %d %d" + % (len(trainset), len(valset), len(testset)) + ) + + if args.ddstore: + os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" + os.environ["HYDRAGNN_USE_ddstore"] = "1" + + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + ) + + config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) + ## Good to sync with everyone right after DDStore setup + comm.Barrier() + + hydragnn.utils.save_config(config, log_name) + + timer.stop() + + model = hydragnn.models.create_model_config( + config=config["NeuralNetwork"], + verbosity=verbosity, + ) + model = hydragnn.utils.get_distributed_model(model, verbosity) + + learning_rate = config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"] + optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate) + scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( + optimizer, mode="min", factor=0.5, patience=5, min_lr=0.00001 + ) + + hydragnn.utils.load_existing_model_config( + model, config["NeuralNetwork"]["Training"], optimizer=optimizer + ) + + ################################################################################################################## + + hydragnn.train.train_validate_test( + model, + optimizer, + train_loader, + val_loader, + test_loader, + writer, + scheduler, + config["NeuralNetwork"], + log_name, + verbosity, + create_plots=True, + compute_grad_energy=True + ) + + hydragnn.utils.save_model(model, optimizer, log_name) + hydragnn.utils.print_timers(verbosity) + + if tr.has("GPTLTracer"): + import gptl4py as gp + + eligible = rank if args.everyone else 0 + if rank == eligible: + gp.pr_file(os.path.join("logs", log_name, "gp_timing.p%d" % rank)) + gp.pr_summary_file(os.path.join("logs", log_name, "gp_timing.summary")) + gp.finalize() + sys.exit(0) diff --git a/examples/LennardJones/README.md b/examples/LennardJones/README.md new file mode 100644 index 000000000..0c4bda202 --- /dev/null +++ b/examples/LennardJones/README.md @@ -0,0 +1,92 @@ +# PyTorch_Interatomic_Potentials + + + +## Getting started + +To make it easy for you to get started with GitLab, here's a list of recommended next steps. + +Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! + +## Add your files + +- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files +- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: + +``` +cd existing_repo +git remote add origin https://code.ornl.gov/aisd/pytorch_interatomic_potentials.git +git branch -M main +git push -uf origin main +``` + +## Integrate with your tools + +- [ ] [Set up project integrations](https://code.ornl.gov/aisd/pytorch_interatomic_potentials/-/settings/integrations) + +## Collaborate with your team + +- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) +- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) +- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) +- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) +- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) + +## Test and Deploy + +Use the built-in continuous integration in GitLab. + +- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) +- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) +- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) +- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) +- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) + +*** + +# Editing this README + +When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. + +## Suggestions for a good README +Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. + +## Name +Choose a self-explaining name for your project. + +## Description +Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. + +## Badges +On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. + +## Visuals +Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. + +## Installation +Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. + +## Usage +Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. + +## Support +Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. + +## Roadmap +If you have ideas for releases in the future, it is a good idea to list them in the README. + +## Contributing +State if you are open to contributions and what your requirements are for accepting them. + +For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. + +You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. + +## Authors and acknowledgment +Show your appreciation to those who have contributed to the project. + +## License +For open source projects, say how it is licensed. + +## Project status +If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. diff --git a/examples/LennardJones/__init__.py b/examples/LennardJones/__init__.py new file mode 100644 index 000000000..7253c920c --- /dev/null +++ b/examples/LennardJones/__init__.py @@ -0,0 +1 @@ +from .LennardJones import LJpotential \ No newline at end of file diff --git a/examples/LennardJones/configurational_data.py b/examples/LennardJones/configurational_data.py new file mode 100644 index 000000000..6f329a5cb --- /dev/null +++ b/examples/LennardJones/configurational_data.py @@ -0,0 +1,214 @@ +############################################################################## +# Copyright (c) 2021, Oak Ridge National Laboratory # +# All rights reserved. # +# # +# This file is part of HydraGNN and is distributed under a BSD 3-clause # +# license. For the licensing terms see the LICENSE file in the top-level # +# directory. # +# # +# SPDX-License-Identifier: BSD-3-Clause # +############################################################################## + +import os +import torch +import numpy +numpy.set_printoptions(threshold=numpy.inf) +numpy.set_printoptions(linewidth=numpy.inf) + +torch.set_default_tensor_type(torch.DoubleTensor) +torch.set_default_dtype(torch.float64) + +from torch_geometric.data import Data + +from graph_utils import get_radius_graph_pbc +from AtomicStructure import AtomicStructureHandler +from LJpotential import LJpotential + +from distributed_utils import nsplit + +from mpi4py import MPI + +# Angstrom unit +primitive_bravais_lattice_constant_x = 3.8 +primitive_bravais_lattice_constant_y = 3.8 +primitive_bravais_lattice_constant_z = 3.8 + + +def deterministic_graph_data( + path: str, + atom_types: list, + atomic_structure_handler, + radius_cutoff = float('inf'), + max_num_neighbors = float('inf'), + number_configurations: int = 500, + configuration_start: int = 0, + unit_cell_x_range: list = [3, 4], + unit_cell_y_range: list = [3, 4], + unit_cell_z_range: list = [3, 4], + relative_maximum_atomic_displacement: float = 1e-1, +): + + comm = MPI.COMM_WORLD + comm_size = comm.Get_size() + comm_rank = comm.Get_rank() + torch.manual_seed(comm_rank) + + if 0 == comm_rank: + os.makedirs(path, exist_ok=False) + comm.Barrier() + + # We assume that the unit cell is Simple Center Cubic (SCC) + unit_cell_x = torch.randint( + unit_cell_x_range[0], + unit_cell_x_range[1], + (number_configurations,), + ) + unit_cell_y = torch.randint( + unit_cell_y_range[0], + unit_cell_y_range[1], + (number_configurations,), + ) + unit_cell_z = torch.randint( + unit_cell_z_range[0], + unit_cell_z_range[1], + (number_configurations,), + ) + + configurations_list = range(number_configurations) + rx = list(nsplit(configurations_list, comm_size))[comm_rank] + + for configuration in configurations_list[rx.start:rx.stop]: + uc_x = unit_cell_x[configuration] + uc_y = unit_cell_y[configuration] + uc_z = unit_cell_z[configuration] + create_configuration( + path, + atomic_structure_handler, + configuration, + configuration_start, + uc_x, + uc_y, + uc_z, + atom_types, + radius_cutoff, + max_num_neighbors, + relative_maximum_atomic_displacement + ) + + +def create_configuration( + path, + atomic_structure_handler, + configuration, + configuration_start, + uc_x, + uc_y, + uc_z, + types, + radius_cutoff, + max_num_neighbors, + relative_maximum_atomic_displacement +): + ############################################################################################### + ################################### STRUCTURE OF THE DATA ################################## + ############################################################################################### + + # GLOBAL_OUTPUT1 + # GLOBAL_OUTPUT2 + # NODE1_FEATURE NODE1_INDEX NODE1_COORDINATE_X NODE1_COORDINATE_Y NODE1_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 + # NODE2_FEATURE NODE2_INDEX NODE2_COORDINATE_X NODE2_COORDINATE_Y NODE2_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 + # ... + # NODENn_FEATURE NODEn_INDEX NODEn_COORDINATE_X NODEn_COORDINATE_Y NODEn_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 + + ############################################################################################### + ################################# FORMULAS FOR NODAL FEATURE ############################### + ############################################################################################### + + # NODAL_FEATURE = ATOM SPECIES + + ############################################################################################### + ########################## FORMULAS FOR GLOBAL AND NODAL OUTPUTS ########################### + ############################################################################################### + + # GLOBAL_OUTPUT = TOTAL ENERGY + # GLOBAL_OUTPUT = TOTAL ENERGY / NUMBER OF NODES + # NODAL_OUTPUT1(X) = FORCE ACTING ON ATOM IN X DIRECTION + # NODAL_OUTPUT2(X) = FORCE ACTING ON ATOM IN Y DIRECTION + # NODAL_OUTPUT3(X) = FORCE ACTING ON ATOM IN Z DIRECTION + + ############################################################################################### + count_pos = 0 + number_nodes = uc_x * uc_y * uc_z + positions = torch.zeros(number_nodes, 3) + for x in range(uc_x): + for y in range(uc_y): + for z in range(uc_z): + positions[count_pos][0] = (x + relative_maximum_atomic_displacement * ( + (torch.rand(1, 1).item()) - 0.5)) * primitive_bravais_lattice_constant_x + positions[count_pos][1] = (y + relative_maximum_atomic_displacement * ( + (torch.rand(1, 1).item()) - 0.5)) * primitive_bravais_lattice_constant_y + positions[count_pos][2] = (z + relative_maximum_atomic_displacement * ( + (torch.rand(1, 1).item()) - 0.5)) * primitive_bravais_lattice_constant_z + + count_pos = count_pos + 1 + + atom_types = torch.randint(min(types), max(types) + 1, (number_nodes, 1)) + + data = Data() + + data.pos = positions + supercell_size_x = primitive_bravais_lattice_constant_x * uc_x + supercell_size_y = primitive_bravais_lattice_constant_y * uc_y + supercell_size_z = primitive_bravais_lattice_constant_z * uc_z + data.supercell_size = torch.diag(torch.tensor([supercell_size_x, supercell_size_y, supercell_size_z])) + + create_graph_connectivity_pbc = get_radius_graph_pbc(radius_cutoff, max_num_neighbors) + data = create_graph_connectivity_pbc(data) + + atomic_descriptors = torch.cat( + ( + atom_types, + positions, + ), + 1, + ) + + data.x = atomic_descriptors + + data = atomic_structure_handler.compute(data) + + total_energy = torch.sum(data.x[:,4]) + energy_per_atom = total_energy/number_nodes + + total_energy_str = numpy.array2string(total_energy.detach().numpy()) + energy_per_atom_str = numpy.array2string(energy_per_atom.detach().numpy()) + filetxt = total_energy_str + "\n" + energy_per_atom_str + + for index in range(0, 3): + numpy_row = data.supercell_size[index, :].detach().numpy() + numpy_string_row = numpy.array2string( + numpy_row, precision=64, separator="\t" + ) + filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") + + for index in range(0, number_nodes): + numpy_row = data.x[index, :].detach().numpy() + numpy_string_row = numpy.array2string( + numpy_row, precision=64, separator="\t" + ) + filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") + + filename = os.path.join( + path, "output" + str(configuration + configuration_start) + ".txt" + ) + with open(filename, "w") as f: + f.write(filetxt) + + +if __name__=="__main__": + path = "./data" + radius_cutoff = 5.0 + atom_types = [1] + formula = LJpotential(1.0, 3.4) + AtomicStructureHandler = AtomicStructureHandler(atom_types, [primitive_bravais_lattice_constant_x, primitive_bravais_lattice_constant_y, primitive_bravais_lattice_constant_z], radius_cutoff, formula) + deterministic_graph_data(path, atom_types, atomic_structure_handler=AtomicStructureHandler, radius_cutoff=radius_cutoff, relative_maximum_atomic_displacement=1e-1, number_configurations=1000) diff --git a/examples/LennardJones/distributed_utils.py b/examples/LennardJones/distributed_utils.py new file mode 100644 index 000000000..507cdc5a7 --- /dev/null +++ b/examples/LennardJones/distributed_utils.py @@ -0,0 +1,3 @@ +def nsplit(a, n): + k, m = divmod(len(a), n) + return (a[i * k + min(i, m): (i + 1) * k + min(i + 1, m)] for i in range(n)) diff --git a/examples/LennardJones/energy_Scatterplot.png b/examples/LennardJones/energy_Scatterplot.png new file mode 100644 index 0000000000000000000000000000000000000000..9ff3f7e73e105c8531b53450ae9652e8b30b9ce8 GIT binary patch literal 180440 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 literal 0 HcmV?d00001 diff --git a/examples/LennardJones/graph_utils.py b/examples/LennardJones/graph_utils.py new file mode 100644 index 000000000..8d290c9c3 --- /dev/null +++ b/examples/LennardJones/graph_utils.py @@ -0,0 +1,55 @@ +import torch +from torch_geometric.transforms import RadiusGraph +import ase +import ase.neighborlist +from torch_geometric.utils import remove_self_loops, degree + +class RadiusGraphPBC(RadiusGraph): + r"""Creates edges based on node positions :obj:`pos` to all points within a + given distance, including periodic images. + """ + + def __call__(self, data): + data.edge_attr = None + assert ( + "batch" not in data + ), "Periodic boundary conditions not currently supported on batches." + assert hasattr( + data, "supercell_size" + ), "The data must contain the size of the supercell to apply periodic boundary conditions." + ase_atom_object = ase.Atoms( + positions=data.pos, + cell=data.supercell_size, + pbc=True, + ) + # ā€˜iā€™ : first atom index + # ā€˜jā€™ : second atom index + # https://wiki.fysik.dtu.dk/ase/ase/neighborlist.html#ase.neighborlist.neighbor_list + edge_src, edge_dst, edge_length = ase.neighborlist.neighbor_list( + "ijd", a=ase_atom_object, cutoff=self.r, self_interaction=self.loop + ) + data.edge_index = torch.stack( + [torch.LongTensor(edge_src), torch.LongTensor(edge_dst)], dim=0 + ) + + # ensure no duplicate edges + num_edges = data.edge_index.size(1) + data.coalesce() + assert num_edges == data.edge_index.size( + 1 + ), "Adding periodic boundary conditions would result in duplicate edges. Cutoff radius must be reduced or system size increased." + + data.edge_attr = torch.tensor(edge_length, dtype=torch.float).unsqueeze(1) + + return data + + def __repr__(self) -> str: + return f"{self.__class__.__name__}(r={self.r})" + + +def get_radius_graph_pbc(radius, max_neighbours, loop=False): + return RadiusGraphPBC( + r=radius, + loop=loop, + max_num_neighbors=max_neighbours, + ) \ No newline at end of file diff --git a/examples/LennardJones/inference.py b/examples/LennardJones/inference.py new file mode 100644 index 000000000..3da1e365e --- /dev/null +++ b/examples/LennardJones/inference.py @@ -0,0 +1,208 @@ +############################################################################## +# Copyright (c) 2021, Oak Ridge National Laboratory # +# All rights reserved. # +# # +# This file is part of HydraGNN and is distributed under a BSD 3-clause # +# license. For the licensing terms see the LICENSE file in the top-level # +# directory. # +# # +# SPDX-License-Identifier: BSD-3-Clause # +############################################################################## + +import json, os +import sys +import logging +import pickle +from tqdm import tqdm +from mpi4py import MPI +import argparse + +import torch +import numpy as np + +import hydragnn +from hydragnn.utils.time_utils import Timer +from hydragnn.utils.distributed import get_device +from hydragnn.utils.model import load_existing_model +from hydragnn.utils.pickledataset import SimplePickleDataset +from hydragnn.utils.config_utils import ( + update_config, +) +from hydragnn.models.create import create_model_config +from hydragnn.preprocess import create_dataloaders + +from scipy.interpolate import griddata + +try: + from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset +except ImportError: + pass + +import matplotlib.pyplot as plt +plt.rcParams.update({"font.size": 16}) + + +def get_log_name_config(config): + return ( + config["NeuralNetwork"]["Architecture"]["model_type"] + + "-r-" + + str(config["NeuralNetwork"]["Architecture"]["radius"]) + + "-ncl-" + + str(config["NeuralNetwork"]["Architecture"]["num_conv_layers"]) + + "-hd-" + + str(config["NeuralNetwork"]["Architecture"]["hidden_dim"]) + + "-ne-" + + str(config["NeuralNetwork"]["Training"]["num_epoch"]) + + "-lr-" + + str(config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"]) + + "-bs-" + + str(config["NeuralNetwork"]["Training"]["batch_size"]) + + "-node_ft-" + + "".join( + str(x) + for x in config["NeuralNetwork"]["Variables_of_interest"][ + "input_node_features" + ] + ) + + "-task_weights-" + + "".join( + str(weigh) + "-" + for weigh in config["NeuralNetwork"]["Architecture"]["task_weights"] + ) + ) + +def getcolordensity(xdata, ydata): + ############################### + nbin = 20 + hist2d, xbins_edge, ybins_edge = np.histogram2d( + x=xdata, y=ydata, bins=[nbin, nbin] + ) + xbin_cen = 0.5 * (xbins_edge[0:-1] + xbins_edge[1:]) + ybin_cen = 0.5 * (ybins_edge[0:-1] + ybins_edge[1:]) + BCTY, BCTX = np.meshgrid(ybin_cen, xbin_cen) + hist2d = hist2d / np.amax(hist2d) + print(np.amax(hist2d)) + + bctx1d = np.reshape(BCTX, len(xbin_cen) * nbin) + bcty1d = np.reshape(BCTY, len(xbin_cen) * nbin) + loc_pts = np.zeros((len(xbin_cen) * nbin, 2)) + loc_pts[:, 0] = bctx1d + loc_pts[:, 1] = bcty1d + hist2d_norm = griddata( + loc_pts, + hist2d.reshape(len(xbin_cen) * nbin), + (xdata, ydata), + method="linear", + fill_value=0, + ) # np.nan) + return hist2d_norm + +def info(*args, logtype="info", sep=" "): + getattr(logging, logtype)(sep.join(map(str, args))) + +if __name__ == "__main__": + + modelname = "LJ" + + parser = argparse.ArgumentParser() + parser.add_argument( + "--inputfile", help="input file", type=str, default="./logs/LJ/config.json" + ) + group = parser.add_mutually_exclusive_group() + group.add_argument( + "--adios", + help="Adios gan_dataset", + action="store_const", + dest="format", + const="adios", + ) + group.add_argument( + "--pickle", + help="Pickle gan_dataset", + action="store_const", + dest="format", + const="pickle", + ) + parser.set_defaults(format="pickle") + + args = parser.parse_args() + + dirpwd = os.path.dirname(os.path.abspath(__file__)) + input_filename = os.path.join(dirpwd, args.inputfile) + with open(input_filename, "r") as f: + config = json.load(f) + hydragnn.utils.setup_log(get_log_name_config(config)) + ################################################################################################################## + # Always initialize for multi-rank training. + comm_size, rank = hydragnn.utils.setup_ddp() + ################################################################################################################## + comm = MPI.COMM_WORLD + + datasetname = "LJ" + + comm.Barrier() + + timer = Timer("load_data") + timer.start() + if args.format == "pickle": + info("Pickle load") + basedir = os.path.join( + os.path.dirname(__file__), "dataset", "%s.pickle" % modelname + ) + trainset = SimplePickleDataset(basedir=basedir, label="trainset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + valset = SimplePickleDataset(basedir=basedir, label="valset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + testset = SimplePickleDataset(basedir=basedir, label="testset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + pna_deg = trainset.pna_deg + else: + raise NotImplementedError("No supported format: %s" % (args.format)) + + model = create_model_config( + config=config["NeuralNetwork"], + verbosity=config["Verbosity"]["level"], + ) + + model = torch.nn.parallel.DistributedDataParallel( + model + ) + + load_existing_model(model, modelname, path="./logs/") + model.eval() + + variable_index = 0 + for output_name, output_type, output_dim in zip(config["NeuralNetwork"]["Variables_of_interest"]["output_names"], config["NeuralNetwork"]["Variables_of_interest"]["type"], config["NeuralNetwork"]["Variables_of_interest"]["output_dim"]): + + test_MAE = 0.0 + + num_samples = len(testset) + true_values = [] + predicted_values = [] + + for data_id, data in enumerate(tqdm(testset)): + predicted = model(data.to(get_device())) + predicted = predicted[variable_index].flatten() + start = data.y_loc[0][variable_index].item() + end = data.y_loc[0][variable_index + 1].item() + true = data.y[start:end, 0] + test_MAE += torch.norm(predicted - true, p=1).item()/len(testset) + predicted_values.extend(predicted.tolist()) + true_values.extend(true.tolist()) + + hist2d_norm = getcolordensity(true_values, predicted_values) + + fig, ax = plt.subplots() + plt.scatter( + true_values, predicted_values, s=8, c=hist2d_norm, vmin=0, vmax=1 + ) + plt.clim(0, 1) + ax.plot(ax.get_xlim(), ax.get_xlim(), ls="--", color="red") + plt.colorbar() + plt.xlabel("True values") + plt.ylabel("Predicted values") + plt.title(f"{output_name}") + plt.draw() + plt.tight_layout() + plt.savefig(f"./{output_name}_Scatterplot" + ".png", dpi=400) + + print(f"Test MAE {output_name}: ", test_MAE) + + variable_index += 1 \ No newline at end of file diff --git a/examples/LennardJones/inference_derivative_energy.py b/examples/LennardJones/inference_derivative_energy.py new file mode 100644 index 000000000..7aca2ae86 --- /dev/null +++ b/examples/LennardJones/inference_derivative_energy.py @@ -0,0 +1,229 @@ +############################################################################## +# Copyright (c) 2021, Oak Ridge National Laboratory # +# All rights reserved. # +# # +# This file is part of HydraGNN and is distributed under a BSD 3-clause # +# license. For the licensing terms see the LICENSE file in the top-level # +# directory. # +# # +# SPDX-License-Identifier: BSD-3-Clause # +############################################################################## + +import json, os +import sys +import logging +import pickle +from tqdm import tqdm +from mpi4py import MPI +import argparse + +import torch +import torch_scatter +import numpy as np + +import hydragnn +from hydragnn.utils.time_utils import Timer +from hydragnn.utils.distributed import get_device +from hydragnn.utils.model import load_existing_model +from hydragnn.utils.pickledataset import SimplePickleDataset +from hydragnn.utils.config_utils import ( + update_config, +) +from hydragnn.models.create import create_model_config +from hydragnn.preprocess import create_dataloaders + +from scipy.interpolate import griddata + +try: + from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset +except ImportError: + pass + +import matplotlib.pyplot as plt +plt.rcParams.update({"font.size": 16}) + + +def get_log_name_config(config): + return ( + config["NeuralNetwork"]["Architecture"]["model_type"] + + "-r-" + + str(config["NeuralNetwork"]["Architecture"]["radius"]) + + "-ncl-" + + str(config["NeuralNetwork"]["Architecture"]["num_conv_layers"]) + + "-hd-" + + str(config["NeuralNetwork"]["Architecture"]["hidden_dim"]) + + "-ne-" + + str(config["NeuralNetwork"]["Training"]["num_epoch"]) + + "-lr-" + + str(config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"]) + + "-bs-" + + str(config["NeuralNetwork"]["Training"]["batch_size"]) + + "-node_ft-" + + "".join( + str(x) + for x in config["NeuralNetwork"]["Variables_of_interest"][ + "input_node_features" + ] + ) + + "-task_weights-" + + "".join( + str(weigh) + "-" + for weigh in config["NeuralNetwork"]["Architecture"]["task_weights"] + ) + ) + +def getcolordensity(xdata, ydata): + ############################### + nbin = 20 + hist2d, xbins_edge, ybins_edge = np.histogram2d( + x=xdata, y=ydata, bins=[nbin, nbin] + ) + xbin_cen = 0.5 * (xbins_edge[0:-1] + xbins_edge[1:]) + ybin_cen = 0.5 * (ybins_edge[0:-1] + ybins_edge[1:]) + BCTY, BCTX = np.meshgrid(ybin_cen, xbin_cen) + hist2d = hist2d / np.amax(hist2d) + print(np.amax(hist2d)) + + bctx1d = np.reshape(BCTX, len(xbin_cen) * nbin) + bcty1d = np.reshape(BCTY, len(xbin_cen) * nbin) + loc_pts = np.zeros((len(xbin_cen) * nbin, 2)) + loc_pts[:, 0] = bctx1d + loc_pts[:, 1] = bcty1d + hist2d_norm = griddata( + loc_pts, + hist2d.reshape(len(xbin_cen) * nbin), + (xdata, ydata), + method="linear", + fill_value=0, + ) # np.nan) + return hist2d_norm + +def info(*args, logtype="info", sep=" "): + getattr(logging, logtype)(sep.join(map(str, args))) + +if __name__ == "__main__": + + modelname = "LJ" + + parser = argparse.ArgumentParser() + parser.add_argument( + "--inputfile", help="input file", type=str, default="./logs/LJ/config.json" + ) + group = parser.add_mutually_exclusive_group() + group.add_argument( + "--adios", + help="Adios gan_dataset", + action="store_const", + dest="format", + const="adios", + ) + group.add_argument( + "--pickle", + help="Pickle gan_dataset", + action="store_const", + dest="format", + const="pickle", + ) + parser.set_defaults(format="pickle") + + args = parser.parse_args() + + dirpwd = os.path.dirname(os.path.abspath(__file__)) + input_filename = os.path.join(dirpwd, args.inputfile) + with open(input_filename, "r") as f: + config = json.load(f) + hydragnn.utils.setup_log(get_log_name_config(config)) + ################################################################################################################## + # Always initialize for multi-rank training. + comm_size, rank = hydragnn.utils.setup_ddp() + ################################################################################################################## + comm = MPI.COMM_WORLD + + datasetname = "LJ" + + comm.Barrier() + + timer = Timer("load_data") + timer.start() + if args.format == "pickle": + info("Pickle load") + basedir = os.path.join( + os.path.dirname(__file__), "dataset", "%s.pickle" % modelname + ) + trainset = SimplePickleDataset(basedir=basedir, label="trainset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + valset = SimplePickleDataset(basedir=basedir, label="valset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + testset = SimplePickleDataset(basedir=basedir, label="testset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + pna_deg = trainset.pna_deg + else: + raise NotImplementedError("No supported format: %s" % (args.format)) + + model = create_model_config( + config=config["NeuralNetwork"], + verbosity=config["Verbosity"]["level"], + ) + + model = torch.nn.parallel.DistributedDataParallel( + model + ) + + load_existing_model(model, modelname, path="./logs/") + model.eval() + + variable_index = 0 + #for output_name, output_type, output_dim in zip(config["NeuralNetwork"]["Variables_of_interest"]["output_names"], config["NeuralNetwork"]["Variables_of_interest"]["type"], config["NeuralNetwork"]["Variables_of_interest"]["output_dim"]): + + test_MAE = 0.0 + + num_samples = len(testset) + energy_true_list = [] + energy_pred_list = [] + forces_true_list = [] + forces_pred_list = [] + + for data_id, data in enumerate(tqdm(testset)): + data.pos.requires_grad = True + node_energy_pred = model(data.to(get_device()))[0] # Note that this is sensitive to energy and forces prediction being single-task (current requirement) + energy_pred = torch.sum(node_energy_pred, dim=0).float() + test_MAE += torch.norm(energy_pred - data.energy, p=1).item() / len(testset) + #predicted.backward(retain_graph=True) + #gradients = data.pos.grad + grads_energy = torch.autograd.grad(outputs=energy_pred, inputs=data.pos, + grad_outputs=torch.ones_like(energy_pred), + retain_graph=False, create_graph=True)[0] + energy_pred_list.extend(energy_pred.tolist()) + energy_true_list.extend(data.energy.tolist()) + forces_pred_list.extend((-grads_energy).flatten().tolist()) + forces_true_list.extend(data.forces.flatten().tolist()) + + hist2d_norm = getcolordensity(energy_true_list, energy_pred_list) + + fig, ax = plt.subplots() + plt.scatter( + energy_true_list, energy_pred_list, s=8, c=hist2d_norm, vmin=0, vmax=1 + ) + plt.clim(0, 1) + ax.plot(ax.get_xlim(), ax.get_xlim(), ls="--", color="red") + plt.colorbar() + plt.xlabel("True values") + plt.ylabel("Predicted values") + plt.title(f"energy") + plt.draw() + plt.tight_layout() + plt.savefig(f"./energy_Scatterplot" + ".png", dpi=400) + + print(f"Test MAE energy: ", test_MAE) + + hist2d_norm = getcolordensity(forces_pred_list, forces_true_list) + fig, ax = plt.subplots() + plt.scatter( + forces_pred_list, forces_true_list, s=8, c=hist2d_norm, vmin=0, vmax=1 + ) + plt.clim(0, 1) + ax.plot(ax.get_xlim(), ax.get_xlim(), ls="--", color="red") + plt.colorbar() + plt.xlabel("Predicted Values") + plt.ylabel("True Values") + plt.title("Forces") + plt.draw() + plt.tight_layout() + plt.savefig(f"./Forces_Scatterplot" + ".png", dpi=400) diff --git a/examples/LennardJones/train_vlad_atomic_forces.py b/examples/LennardJones/train_vlad_atomic_forces.py new file mode 100644 index 000000000..156e7d400 --- /dev/null +++ b/examples/LennardJones/train_vlad_atomic_forces.py @@ -0,0 +1,412 @@ +import mpi4py +from mpi4py import MPI + +mpi4py.rc.thread_level = "serialized" +mpi4py.rc.threads = False + +import os, json +import random + +import h5py + +import logging +import sys +import argparse + +import hydragnn +from hydragnn.utils.print_utils import iterate_tqdm, log +from hydragnn.utils.time_utils import Timer + +from hydragnn.preprocess.load_data import split_dataset +from hydragnn.utils.abstractrawdataset import AbstractBaseDataset +from hydragnn.utils.distdataset import DistDataset +from hydragnn.utils.pickledataset import SimplePickleWriter, SimplePickleDataset +from hydragnn.preprocess.utils import gather_deg + +import numpy as np + +try: + from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset +except ImportError: + pass + +from torch_geometric.data import Data +from torch_geometric.transforms import RadiusGraph, Distance, Spherical, LocalCartesian +import torch +import torch.distributed as dist + +from hydragnn.utils import nsplit +import hydragnn.utils.tracer as tr + + +# FIXME: this works fine for now because we train on disordered atomic structures with potentials and forces computed with Lennard-Jones + + +torch.set_default_dtype(torch.float32) + + +def info(*args, logtype="info", sep=" "): + getattr(logging, logtype)(sep.join(map(str, args))) + + +# FIXME: this radis cutoff overwrites the radius cutoff currently written in the JSON file +create_graph_fromXYZ = RadiusGraph(r=5.0) # radius cutoff in angstrom +compute_edge_lengths = Distance(norm=False, cat=True) +spherical_coordinates = Spherical(norm=False, cat=False) +cartesian_coordinates = LocalCartesian(norm=False, cat=False) + + +class LJDataset_VladTest(AbstractBaseDataset): + """LJDataset_VladTest dataset class""" + + def __init__(self, dirpath, dist=False, sampling=None): + super().__init__() + + self.dist = dist + self.world_size = 1 + self.rank = 1 + if self.dist: + assert torch.distributed.is_initialized() + self.world_size = torch.distributed.get_world_size() + self.rank = torch.distributed.get_rank() + + dirfiles = sorted(os.listdir(dirpath)) + + rx = list(nsplit((dirfiles), self.world_size))[self.rank] + + for file in rx: + filepath = os.path.join(dirpath, file) + self.dataset.append(self.transform_input_to_data_object_base(filepath)) + + def transform_input_to_data_object_base(self, filepath): + + # Using readline() + file = open(filepath, "r") + + torch_data = torch.empty((0, 4), dtype=torch.float32) + + count = 0 + + while True: + count += 1 + + # Get next line from file + line = file.readline() + + # if line is empty + # end of file is reached + if not line: + break + + if count == 1: + array_line = np.fromstring(line, dtype=float, sep="\t") + energy = torch.from_numpy(array_line).unsqueeze(0) + elif count == 2: + array_line = np.fromstring(line, dtype=float, sep="\t") + forces = torch.from_numpy(array_line).unsqueeze(0) + else: + array_line = np.fromstring(line, dtype=float, sep="\t") + torch_data = torch.cat( + [torch_data, torch.from_numpy(array_line).unsqueeze(0)], axis=0 + ) + # print("Line{}: {}".format(count, line.strip())) + + file.close() + + pos = torch_data[:, [1, 2, 3]].to(torch.float32) + atomic_number = torch_data[:, [0]].to(torch.float32) + forces_torch = torch.zeros_like(pos) + forces_torch[0,:] = forces.unsqueeze(0) + + data = Data( + pos=pos, + x=torch.cat((atomic_number, forces_torch.to(torch.float32)), 1), + y = [] + ) + data = create_graph_fromXYZ(data) + data = compute_edge_lengths(data) + data.edge_attr = data.edge_attr.to(torch.float32) + #data = spherical_coordinates(data) + data = cartesian_coordinates(data) + + #maintain directionality + data.edge_index = data.edge_index[:,0:6] + data.edge_attr= data.edge_attr[0:6,:] + + return data + + def len(self): + return len(self.dataset) + + def get(self, idx): + return self.dataset[idx] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument("--sampling", type=float, help="sampling ratio", default=None) + parser.add_argument( + "--preonly", + action="store_true", + help="preprocess only (no training)", + ) + parser.add_argument("--inputfile", help="input file", type=str, default="LJ_vlad_atomic_forces.json") + parser.add_argument("--mae", action="store_true", help="do mae calculation") + parser.add_argument("--ddstore", action="store_true", help="ddstore dataset") + parser.add_argument("--ddstore_width", type=int, help="ddstore width", default=None) + parser.add_argument("--shmem", action="store_true", help="shmem") + parser.add_argument("--log", help="log name") + parser.add_argument("--batch_size", type=int, help="batch_size", default=None) + parser.add_argument("--everyone", action="store_true", help="gptimer") + + 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="adios") + args = parser.parse_args() + + graph_feature_names = [] + graph_feature_dims = [] + node_feature_names = ["atomic_number", "forces"] + node_feature_dims = [1, 3] + dirpwd = os.path.dirname(os.path.abspath(__file__)) + datadir = os.path.join(dirpwd, "dataset/data") + ################################################################################################################## + input_filename = os.path.join(dirpwd, args.inputfile) + ################################################################################################################## + # Configurable run choices (JSON file that accompanies this example script). + with open(input_filename, "r") as f: + config = json.load(f) + verbosity = config["Verbosity"]["level"] + config["NeuralNetwork"]["Variables_of_interest"][ + "graph_feature_names" + ] = graph_feature_names + config["NeuralNetwork"]["Variables_of_interest"][ + "graph_feature_dims" + ] = graph_feature_dims + config["NeuralNetwork"]["Variables_of_interest"][ + "node_feature_names" + ] = node_feature_names + config["NeuralNetwork"]["Variables_of_interest"][ + "node_feature_dims" + ] = node_feature_dims + + if args.batch_size is not None: + config["NeuralNetwork"]["Training"]["batch_size"] = args.batch_size + + ################################################################################################################## + # Always initialize for multi-rank training. + comm_size, rank = hydragnn.utils.setup_ddp() + ################################################################################################################## + + comm = MPI.COMM_WORLD + + ## Set up logging + logging.basicConfig( + level=logging.INFO, + format="%%(levelname)s (rank %d): %%(message)s" % (rank), + datefmt="%H:%M:%S", + ) + + log_name = "LJ" if args.log is None else args.log + hydragnn.utils.setup_log(log_name) + writer = hydragnn.utils.get_summary_writer(log_name) + + log("Command: {0}\n".format(" ".join([x for x in sys.argv])), rank=0) + + modelname = "LJ" + if args.preonly: + + ## local data + total = LJDataset_VladTest( + os.path.join(datadir), + dist=True, + ) + ## This is a local split + trainset, valset, testset = split_dataset( + dataset=total, + perc_train=0.9, + stratify_splitting=False, + ) + print("Local splitting: ", len(total), len(trainset), len(valset), len(testset)) + + deg = gather_deg(trainset) + config["pna_deg"] = deg + + setnames = ["trainset", "valset", "testset"] + + if args.format == "pickle": + + ## 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, + ) + + if args.format == "adios": + ## 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() + + sys.exit(0) + + tr.initialize() + tr.disable() + timer = Timer("load_data") + timer.start() + if args.format == "adios": + info("Adios load") + assert not (args.shmem and args.ddstore), "Cannot use both ddstore and shmem" + opt = { + "preload": False, + "shmem": args.shmem, + "ddstore": args.ddstore, + "ddstore_width": args.ddstore_width, + } + fname = os.path.join(os.path.dirname(__file__), "./dataset/%s.bp" % modelname) + trainset = AdiosDataset(fname, "trainset", comm, **opt) + valset = AdiosDataset(fname, "valset", comm, **opt) + testset = AdiosDataset(fname, "testset", comm, **opt) + elif args.format == "pickle": + info("Pickle load") + basedir = os.path.join( + os.path.dirname(__file__), "dataset", "%s.pickle" % modelname + ) + var_config = config["NeuralNetwork"]["Variables_of_interest"] + trainset = SimplePickleDataset( + basedir=basedir, label="trainset", preload=True, var_config=var_config + ) + valset = SimplePickleDataset( + basedir=basedir, label="valset", var_config=var_config + ) + testset = SimplePickleDataset( + basedir=basedir, label="testset", var_config=var_config + ) + # minmax_node_feature = trainset.minmax_node_feature + # minmax_graph_feature = trainset.minmax_graph_feature + pna_deg = trainset.pna_deg + if args.ddstore: + opt = {"ddstore_width": args.ddstore_width} + trainset = DistDataset(trainset, "trainset", comm, **opt) + valset = DistDataset(valset, "valset", comm, **opt) + testset = DistDataset(testset, "testset", comm, **opt) + # trainset.minmax_node_feature = minmax_node_feature + # trainset.minmax_graph_feature = minmax_graph_feature + trainset.pna_deg = pna_deg + else: + raise NotImplementedError("No supported format: %s" % (args.format)) + + info( + "trainset,valset,testset size: %d %d %d" + % (len(trainset), len(valset), len(testset)) + ) + + if args.ddstore: + os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" + os.environ["HYDRAGNN_USE_ddstore"] = "1" + + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + ) + + config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) + ## Good to sync with everyone right after DDStore setup + comm.Barrier() + + hydragnn.utils.save_config(config, log_name) + + timer.stop() + + model = hydragnn.models.create_model_config( + config=config["NeuralNetwork"], + verbosity=verbosity, + ) + model = hydragnn.utils.get_distributed_model(model, verbosity) + + learning_rate = config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"] + optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate) + scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( + optimizer, mode="min", factor=0.5, patience=5, min_lr=0.00001 + ) + + hydragnn.utils.load_existing_model_config( + model, config["NeuralNetwork"]["Training"], optimizer=optimizer + ) + + ################################################################################################################## + + hydragnn.train.train_validate_test( + model, + optimizer, + train_loader, + val_loader, + test_loader, + writer, + scheduler, + config["NeuralNetwork"], + log_name, + verbosity, + create_plots=False, + ) + + hydragnn.utils.save_model(model, optimizer, log_name) + hydragnn.utils.print_timers(verbosity) + + if tr.has("GPTLTracer"): + import gptl4py as gp + + eligible = rank if args.everyone else 0 + if rank == eligible: + gp.pr_file(os.path.join("logs", log_name, "gp_timing.p%d" % rank)) + gp.pr_summary_file(os.path.join("logs", log_name, "gp_timing.summary")) + gp.finalize() + sys.exit(0) diff --git a/examples/LennardJones/train_vlad_total_energy.py b/examples/LennardJones/train_vlad_total_energy.py new file mode 100644 index 000000000..14179655f --- /dev/null +++ b/examples/LennardJones/train_vlad_total_energy.py @@ -0,0 +1,408 @@ +import mpi4py +from mpi4py import MPI + +mpi4py.rc.thread_level = "serialized" +mpi4py.rc.threads = False + +import os, json +import random + +import h5py + +import logging +import sys +import argparse + +import hydragnn +from hydragnn.utils.print_utils import iterate_tqdm, log +from hydragnn.utils.time_utils import Timer + +from hydragnn.preprocess.load_data import split_dataset +from hydragnn.utils.abstractrawdataset import AbstractBaseDataset +from hydragnn.utils.distdataset import DistDataset +from hydragnn.utils.pickledataset import SimplePickleWriter, SimplePickleDataset +from hydragnn.preprocess.utils import gather_deg + +import numpy as np + +try: + from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset +except ImportError: + pass + +from torch_geometric.data import Data +from torch_geometric.transforms import RadiusGraph, Distance, Spherical, LocalCartesian +import torch +import torch.distributed as dist + +from hydragnn.utils import nsplit +import hydragnn.utils.tracer as tr + + +# FIXME: this works fine for now because we train on disordered atomic structures with potentials and forces computed with Lennard-Jones + + +torch.set_default_dtype(torch.float32) + + +def info(*args, logtype="info", sep=" "): + getattr(logging, logtype)(sep.join(map(str, args))) + + +# FIXME: this radis cutoff overwrites the radius cutoff currently written in the JSON file +create_graph_fromXYZ = RadiusGraph(r=5.0) # radius cutoff in angstrom +compute_edge_lengths = Distance(norm=False, cat=True) +spherical_coordinates = Spherical(norm=False, cat=False) +cartesian_coordinates = LocalCartesian(norm=False, cat=False) + + +class LJDataset_VladTest(AbstractBaseDataset): + """LJDataset_VladTest dataset class""" + + def __init__(self, dirpath, dist=False, sampling=None): + super().__init__() + + self.dist = dist + self.world_size = 1 + self.rank = 1 + if self.dist: + assert torch.distributed.is_initialized() + self.world_size = torch.distributed.get_world_size() + self.rank = torch.distributed.get_rank() + + dirfiles = sorted(os.listdir(dirpath)) + + rx = list(nsplit((dirfiles), self.world_size))[self.rank] + + for file in rx: + filepath = os.path.join(dirpath, file) + self.dataset.append(self.transform_input_to_data_object_base(filepath)) + + def transform_input_to_data_object_base(self, filepath): + + # Using readline() + file = open(filepath, "r") + + torch_data = torch.empty((0, 4), dtype=torch.float32) + + count = 0 + + while True: + count += 1 + + # Get next line from file + line = file.readline() + + # if line is empty + # end of file is reached + if not line: + break + + if count == 1: + array_line = np.fromstring(line, dtype=float, sep="\t") + energy = torch.from_numpy(array_line).unsqueeze(0) + elif count == 2: + array_line = np.fromstring(line, dtype=float, sep="\t") + forces = torch.from_numpy(array_line).unsqueeze(0) + else: + array_line = np.fromstring(line, dtype=float, sep="\t") + torch_data = torch.cat( + [torch_data, torch.from_numpy(array_line).unsqueeze(0)], axis=0 + ) + # print("Line{}: {}".format(count, line.strip())) + + file.close() + + data = Data( + pos=torch_data[:, [1, 2, 3]].to(torch.float32), + x=torch_data[:, [0, 1, 2, 3]].to(torch.float32), + forces=forces.unsqueeze(0).to(torch.float32), + y=energy.unsqueeze(0).to(torch.float32), + ) + data = create_graph_fromXYZ(data) + data = compute_edge_lengths(data) + data.edge_attr = data.edge_attr.to(torch.float32) + #data = spherical_coordinates(data) + data = cartesian_coordinates(data) + + #maintain directionality + data.edge_index = data.edge_index[:,0:6] + data.edge_attr= data.edge_attr[0:6,:] + + return data + + def len(self): + return len(self.dataset) + + def get(self, idx): + return self.dataset[idx] + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument("--sampling", type=float, help="sampling ratio", default=None) + parser.add_argument( + "--preonly", + action="store_true", + help="preprocess only (no training)", + ) + parser.add_argument("--inputfile", help="input file", type=str, default="LJ_vlad_total_energy.json") + parser.add_argument("--mae", action="store_true", help="do mae calculation") + parser.add_argument("--ddstore", action="store_true", help="ddstore dataset") + parser.add_argument("--ddstore_width", type=int, help="ddstore width", default=None) + parser.add_argument("--shmem", action="store_true", help="shmem") + parser.add_argument("--log", help="log name") + parser.add_argument("--batch_size", type=int, help="batch_size", default=None) + parser.add_argument("--everyone", action="store_true", help="gptimer") + + 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="adios") + args = parser.parse_args() + + graph_feature_names = ["energy"] + graph_feature_dims = [1] + node_feature_names = ["atomic_number"] + node_feature_dims = [1] + dirpwd = os.path.dirname(os.path.abspath(__file__)) + datadir = os.path.join(dirpwd, "dataset/data") + ################################################################################################################## + input_filename = os.path.join(dirpwd, args.inputfile) + ################################################################################################################## + # Configurable run choices (JSON file that accompanies this example script). + with open(input_filename, "r") as f: + config = json.load(f) + verbosity = config["Verbosity"]["level"] + config["NeuralNetwork"]["Variables_of_interest"][ + "graph_feature_names" + ] = graph_feature_names + config["NeuralNetwork"]["Variables_of_interest"][ + "graph_feature_dims" + ] = graph_feature_dims + config["NeuralNetwork"]["Variables_of_interest"][ + "node_feature_names" + ] = node_feature_names + config["NeuralNetwork"]["Variables_of_interest"][ + "node_feature_dims" + ] = node_feature_dims + + if args.batch_size is not None: + config["NeuralNetwork"]["Training"]["batch_size"] = args.batch_size + + ################################################################################################################## + # Always initialize for multi-rank training. + comm_size, rank = hydragnn.utils.setup_ddp() + ################################################################################################################## + + comm = MPI.COMM_WORLD + + ## Set up logging + logging.basicConfig( + level=logging.INFO, + format="%%(levelname)s (rank %d): %%(message)s" % (rank), + datefmt="%H:%M:%S", + ) + + log_name = "LJ" if args.log is None else args.log + hydragnn.utils.setup_log(log_name) + writer = hydragnn.utils.get_summary_writer(log_name) + + log("Command: {0}\n".format(" ".join([x for x in sys.argv])), rank=0) + + modelname = "LJ" + if args.preonly: + + ## local data + total = LJDataset_VladTest( + os.path.join(datadir), + dist=True, + ) + ## This is a local split + trainset, valset, testset = split_dataset( + dataset=total, + perc_train=0.9, + stratify_splitting=False, + ) + print("Local splitting: ", len(total), len(trainset), len(valset), len(testset)) + + deg = gather_deg(trainset) + config["pna_deg"] = deg + + setnames = ["trainset", "valset", "testset"] + + if args.format == "pickle": + + ## 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, + ) + + if args.format == "adios": + ## 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() + + sys.exit(0) + + tr.initialize() + tr.disable() + timer = Timer("load_data") + timer.start() + if args.format == "adios": + info("Adios load") + assert not (args.shmem and args.ddstore), "Cannot use both ddstore and shmem" + opt = { + "preload": False, + "shmem": args.shmem, + "ddstore": args.ddstore, + "ddstore_width": args.ddstore_width, + } + fname = os.path.join(os.path.dirname(__file__), "./dataset/%s.bp" % modelname) + trainset = AdiosDataset(fname, "trainset", comm, **opt) + valset = AdiosDataset(fname, "valset", comm, **opt) + testset = AdiosDataset(fname, "testset", comm, **opt) + elif args.format == "pickle": + info("Pickle load") + basedir = os.path.join( + os.path.dirname(__file__), "dataset", "%s.pickle" % modelname + ) + var_config = config["NeuralNetwork"]["Variables_of_interest"] + trainset = SimplePickleDataset( + basedir=basedir, label="trainset", preload=True, var_config=var_config + ) + valset = SimplePickleDataset( + basedir=basedir, label="valset", var_config=var_config + ) + testset = SimplePickleDataset( + basedir=basedir, label="testset", var_config=var_config + ) + # minmax_node_feature = trainset.minmax_node_feature + # minmax_graph_feature = trainset.minmax_graph_feature + pna_deg = trainset.pna_deg + if args.ddstore: + opt = {"ddstore_width": args.ddstore_width} + trainset = DistDataset(trainset, "trainset", comm, **opt) + valset = DistDataset(valset, "valset", comm, **opt) + testset = DistDataset(testset, "testset", comm, **opt) + # trainset.minmax_node_feature = minmax_node_feature + # trainset.minmax_graph_feature = minmax_graph_feature + trainset.pna_deg = pna_deg + else: + raise NotImplementedError("No supported format: %s" % (args.format)) + + info( + "trainset,valset,testset size: %d %d %d" + % (len(trainset), len(valset), len(testset)) + ) + + if args.ddstore: + os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" + os.environ["HYDRAGNN_USE_ddstore"] = "1" + + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + ) + + config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) + ## Good to sync with everyone right after DDStore setup + comm.Barrier() + + hydragnn.utils.save_config(config, log_name) + + timer.stop() + + model = hydragnn.models.create_model_config( + config=config["NeuralNetwork"], + verbosity=verbosity, + ) + model = hydragnn.utils.get_distributed_model(model, verbosity) + + learning_rate = config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"] + optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate) + scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( + optimizer, mode="min", factor=0.5, patience=5, min_lr=0.00001 + ) + + hydragnn.utils.load_existing_model_config( + model, config["NeuralNetwork"]["Training"], optimizer=optimizer + ) + + ################################################################################################################## + + hydragnn.train.train_validate_test( + model, + optimizer, + train_loader, + val_loader, + test_loader, + writer, + scheduler, + config["NeuralNetwork"], + log_name, + verbosity, + create_plots=False, + ) + + hydragnn.utils.save_model(model, optimizer, log_name) + hydragnn.utils.print_timers(verbosity) + + if tr.has("GPTLTracer"): + import gptl4py as gp + + eligible = rank if args.everyone else 0 + if rank == eligible: + gp.pr_file(os.path.join("logs", log_name, "gp_timing.p%d" % rank)) + gp.pr_summary_file(os.path.join("logs", log_name, "gp_timing.summary")) + gp.finalize() + sys.exit(0) diff --git a/tests/test_examples.py b/tests/test_examples.py index 7ca1e4cd0..8a82fa18d 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -15,7 +15,7 @@ import subprocess -@pytest.mark.parametrize("example", ["qm9", "md17"]) +@pytest.mark.parametrize("example", ["qm9", "md17", "LennardJones"]) @pytest.mark.mpi_skip() def pytest_examples(example): path = os.path.join(os.path.dirname(__file__), "..", "examples", example) From 0bce3d543217a352933579bf4aeb67a4495d9490 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 13:43:52 -0400 Subject: [PATCH 10/37] formatting --- examples/LennardJones/AtomicStructure.py | 33 ++++---- examples/LennardJones/LJpotential.py | 19 ++++- examples/LennardJones/LennardJones.py | 54 ++++++++++--- examples/LennardJones/__init__.py | 2 +- examples/LennardJones/configurational_data.py | 78 ++++++++++++------- examples/LennardJones/distributed_utils.py | 2 +- examples/LennardJones/graph_utils.py | 3 +- examples/LennardJones/inference.py | 44 +++++++---- .../inference_derivative_energy.py | 58 ++++++++------ .../LennardJones/train_vlad_atomic_forces.py | 22 ++++-- .../LennardJones/train_vlad_total_energy.py | 18 +++-- 11 files changed, 224 insertions(+), 109 deletions(-) diff --git a/examples/LennardJones/AtomicStructure.py b/examples/LennardJones/AtomicStructure.py index bc738dd36..540679023 100644 --- a/examples/LennardJones/AtomicStructure.py +++ b/examples/LennardJones/AtomicStructure.py @@ -1,8 +1,11 @@ import torch -class AtomicStructureHandler(): - def __init__(self, list_atom_types, bravais_lattice_constants, radius_cutoff, formula): +class AtomicStructureHandler: + + def __init__( + self, list_atom_types, bravais_lattice_constants, radius_cutoff, formula + ): self.bravais_lattice_constants = bravais_lattice_constants self.radius_cutoff = radius_cutoff @@ -10,21 +13,23 @@ def __init__(self, list_atom_types, bravais_lattice_constants, radius_cutoff, fo def compute(self, data): - assert (data.pos.shape[0] == data.x.shape[0]) + assert data.pos.shape[0] == data.x.shape[0] interatomic_potential = torch.zeros([data.pos.shape[0], 1]) interatomic_forces = torch.zeros([data.pos.shape[0], 3]) for node_id in range(data.pos.shape[0]): - neighbor_list_indices = torch.where(data.edge_index[0, :] == node_id)[0].tolist() + neighbor_list_indices = torch.where(data.edge_index[0, :] == node_id)[ + 0 + ].tolist() neighbor_list = data.edge_index[1, neighbor_list_indices] for neighbor_id, edge_id in zip(neighbor_list, neighbor_list_indices): neighbor_pos = data.pos[neighbor_id, :] distance_vector = data.pos[neighbor_id, :] - data.pos[node_id, :] - + # Adjust the neighbor position based on periodic boundary conditions (PBC) ## If the distance between the atoms is larger than the cutoff radius, the edge is because of PBC conditions if torch.norm(distance_vector) > self.radius_cutoff: @@ -54,27 +59,25 @@ def compute(self, data): # The distance vecor may need to be updated after applying PBCs distance_vector = data.pos[node_id, :] - neighbor_pos - #pair_distance = data.edge_attr[edge_id].item() - interatomic_potential[node_id] += self.formula.potential_energy(distance_vector) + # pair_distance = data.edge_attr[edge_id].item() + interatomic_potential[node_id] += self.formula.potential_energy( + distance_vector + ) derivative_x = self.formula.derivative_x(distance_vector) derivative_y = self.formula.derivative_y(distance_vector) derivative_z = self.formula.derivative_z(distance_vector) - interatomic_forces_contribution_x = - derivative_x - interatomic_forces_contribution_y = - derivative_y - interatomic_forces_contribution_z = - derivative_z + interatomic_forces_contribution_x = -derivative_x + interatomic_forces_contribution_y = -derivative_y + interatomic_forces_contribution_z = -derivative_z interatomic_forces[node_id, 0] += interatomic_forces_contribution_x interatomic_forces[node_id, 1] += interatomic_forces_contribution_y interatomic_forces[node_id, 2] += interatomic_forces_contribution_z data.x = torch.cat( - ( - data.x, - interatomic_potential, - interatomic_forces - ), + (data.x, interatomic_potential, interatomic_forces), 1, ) diff --git a/examples/LennardJones/LJpotential.py b/examples/LennardJones/LJpotential.py index ef8c1ec6e..7e267d82b 100644 --- a/examples/LennardJones/LJpotential.py +++ b/examples/LennardJones/LJpotential.py @@ -1,6 +1,7 @@ import torch -class LJpotential(): + +class LJpotential: def __init__(self, epsilon, sigma): self.epsilon = epsilon @@ -8,12 +9,22 @@ def __init__(self, epsilon, sigma): def potential_energy(self, distance_vector): pair_distance = torch.norm(distance_vector) - return 4 * self.epsilon * ((self.sigma / pair_distance) ** 12 - (self.sigma / pair_distance) ** 6) + return ( + 4 + * self.epsilon + * ((self.sigma / pair_distance) ** 12 - (self.sigma / pair_distance) ** 6) + ) def radial_derivative(self, distance_vector): pair_distance = torch.norm(distance_vector) - return 4 * self.epsilon * (-12 * (self.sigma / pair_distance) ** 12 * 1 / pair_distance + 6 * ( - self.sigma / pair_distance) ** 6 * 1 / pair_distance) + return ( + 4 + * self.epsilon + * ( + -12 * (self.sigma / pair_distance) ** 12 * 1 / pair_distance + + 6 * (self.sigma / pair_distance) ** 6 * 1 / pair_distance + ) + ) def derivative_x(self, distance_vector): pair_distance = torch.norm(distance_vector) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index 9b99fe37e..a8a8d63ba 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -42,6 +42,8 @@ from configurational_data import deterministic_graph_data from LJpotential import LJpotential from AtomicStructure import AtomicStructureHandler + + def create_dataset(config): # Angstrom unit primitive_bravais_lattice_constant_x = 3.8 @@ -49,11 +51,31 @@ def create_dataset(config): primitive_bravais_lattice_constant_z = 3.8 path = "./dataset/data" radius_cutoff = config["NeuralNetwork"]["Architecture"]["radius"] - number_configurations = config["NeuralNetwork"]["Training"]["num_configurations"] if "num_configurations" in config["NeuralNetwork"]["Training"] else 1000 + number_configurations = ( + config["NeuralNetwork"]["Training"]["num_configurations"] + if "num_configurations" in config["NeuralNetwork"]["Training"] + else 1000 + ) atom_types = [1] formula = LJpotential(1.0, 3.4) - atomic_structure_handler = AtomicStructureHandler(atom_types, [primitive_bravais_lattice_constant_x, primitive_bravais_lattice_constant_y, primitive_bravais_lattice_constant_z], radius_cutoff, formula) - deterministic_graph_data(path, atom_types, atomic_structure_handler=atomic_structure_handler, radius_cutoff=radius_cutoff, relative_maximum_atomic_displacement=1e-1, number_configurations=number_configurations) + atomic_structure_handler = AtomicStructureHandler( + atom_types, + [ + primitive_bravais_lattice_constant_x, + primitive_bravais_lattice_constant_y, + primitive_bravais_lattice_constant_z, + ], + radius_cutoff, + formula, + ) + deterministic_graph_data( + path, + atom_types, + atomic_structure_handler=atomic_structure_handler, + radius_cutoff=radius_cutoff, + relative_maximum_atomic_displacement=1e-1, + number_configurations=number_configurations, + ) # FIXME: this works fine for now because we train on disordered atomic structures with potentials and forces computed with Lennard-Jones @@ -138,8 +160,12 @@ def transform_input_to_data_object_base(self, filepath): energy_pre_translation_factor = 0.0 energy_pre_scaling_factor = 1.0 / num_nodes - energy_per_atom_pretransformed = (energy_per_atom - energy_pre_translation_factor) * energy_pre_scaling_factor - grad_energy_post_scaling_factor = 1.0/energy_pre_scaling_factor * torch.ones(num_nodes, 1) + energy_per_atom_pretransformed = ( + energy_per_atom - energy_pre_translation_factor + ) * energy_pre_scaling_factor + grad_energy_post_scaling_factor = ( + 1.0 / energy_pre_scaling_factor * torch.ones(num_nodes, 1) + ) forces = torch_data[:, [5, 6, 7]] forces_pre_scaling_factor = 1.0 forces_pre_scaled = forces * forces_pre_scaling_factor @@ -148,19 +174,23 @@ def transform_input_to_data_object_base(self, filepath): supercell_size=torch_supercell.to(torch.float32), num_nodes=num_nodes, grad_energy_post_scaling_factor=grad_energy_post_scaling_factor, - forces_pre_scaling_factor=torch.tensor(forces_pre_scaling_factor).to(torch.float32), + forces_pre_scaling_factor=torch.tensor(forces_pre_scaling_factor).to( + torch.float32 + ), forces=forces, forces_pre_scaled=forces_pre_scaled, pos=torch_data[:, [1, 2, 3]].to(torch.float32), x=torch.cat([torch_data[:, [0, 4]]], axis=1).to(torch.float32), y=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), - energy_per_atom=torch.tensor(energy_per_atom_pretransformed).unsqueeze(0).to(torch.float32), + energy_per_atom=torch.tensor(energy_per_atom_pretransformed) + .unsqueeze(0) + .to(torch.float32), energy=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), ) data = create_graph_fromXYZ(data) data = compute_edge_lengths(data) data.edge_attr = data.edge_attr.to(torch.float32) - #data = spherical_coordinates(data) + # data = spherical_coordinates(data) data = cartesian_coordinates(data) return data @@ -391,7 +421,11 @@ def get(self, idx): os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + ( + train_loader, + val_loader, + test_loader, + ) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) @@ -433,7 +467,7 @@ def get(self, idx): log_name, verbosity, create_plots=True, - compute_grad_energy=True + compute_grad_energy=True, ) hydragnn.utils.save_model(model, optimizer, log_name) diff --git a/examples/LennardJones/__init__.py b/examples/LennardJones/__init__.py index 7253c920c..266d92653 100644 --- a/examples/LennardJones/__init__.py +++ b/examples/LennardJones/__init__.py @@ -1 +1 @@ -from .LennardJones import LJpotential \ No newline at end of file +from .LennardJones import LJpotential diff --git a/examples/LennardJones/configurational_data.py b/examples/LennardJones/configurational_data.py index 6f329a5cb..8ebb1d6f8 100644 --- a/examples/LennardJones/configurational_data.py +++ b/examples/LennardJones/configurational_data.py @@ -12,6 +12,7 @@ import os import torch import numpy + numpy.set_printoptions(threshold=numpy.inf) numpy.set_printoptions(linewidth=numpy.inf) @@ -38,8 +39,8 @@ def deterministic_graph_data( path: str, atom_types: list, atomic_structure_handler, - radius_cutoff = float('inf'), - max_num_neighbors = float('inf'), + radius_cutoff=float("inf"), + max_num_neighbors=float("inf"), number_configurations: int = 500, configuration_start: int = 0, unit_cell_x_range: list = [3, 4], @@ -77,7 +78,7 @@ def deterministic_graph_data( configurations_list = range(number_configurations) rx = list(nsplit(configurations_list, comm_size))[comm_rank] - for configuration in configurations_list[rx.start:rx.stop]: + for configuration in configurations_list[rx.start : rx.stop]: uc_x = unit_cell_x[configuration] uc_y = unit_cell_y[configuration] uc_z = unit_cell_z[configuration] @@ -92,7 +93,7 @@ def deterministic_graph_data( atom_types, radius_cutoff, max_num_neighbors, - relative_maximum_atomic_displacement + relative_maximum_atomic_displacement, ) @@ -107,7 +108,7 @@ def create_configuration( types, radius_cutoff, max_num_neighbors, - relative_maximum_atomic_displacement + relative_maximum_atomic_displacement, ): ############################################################################################### ################################### STRUCTURE OF THE DATA ################################## @@ -143,12 +144,21 @@ def create_configuration( for x in range(uc_x): for y in range(uc_y): for z in range(uc_z): - positions[count_pos][0] = (x + relative_maximum_atomic_displacement * ( - (torch.rand(1, 1).item()) - 0.5)) * primitive_bravais_lattice_constant_x - positions[count_pos][1] = (y + relative_maximum_atomic_displacement * ( - (torch.rand(1, 1).item()) - 0.5)) * primitive_bravais_lattice_constant_y - positions[count_pos][2] = (z + relative_maximum_atomic_displacement * ( - (torch.rand(1, 1).item()) - 0.5)) * primitive_bravais_lattice_constant_z + positions[count_pos][0] = ( + x + + relative_maximum_atomic_displacement + * ((torch.rand(1, 1).item()) - 0.5) + ) * primitive_bravais_lattice_constant_x + positions[count_pos][1] = ( + y + + relative_maximum_atomic_displacement + * ((torch.rand(1, 1).item()) - 0.5) + ) * primitive_bravais_lattice_constant_y + positions[count_pos][2] = ( + z + + relative_maximum_atomic_displacement + * ((torch.rand(1, 1).item()) - 0.5) + ) * primitive_bravais_lattice_constant_z count_pos = count_pos + 1 @@ -160,9 +170,13 @@ def create_configuration( supercell_size_x = primitive_bravais_lattice_constant_x * uc_x supercell_size_y = primitive_bravais_lattice_constant_y * uc_y supercell_size_z = primitive_bravais_lattice_constant_z * uc_z - data.supercell_size = torch.diag(torch.tensor([supercell_size_x, supercell_size_y, supercell_size_z])) + data.supercell_size = torch.diag( + torch.tensor([supercell_size_x, supercell_size_y, supercell_size_z]) + ) - create_graph_connectivity_pbc = get_radius_graph_pbc(radius_cutoff, max_num_neighbors) + create_graph_connectivity_pbc = get_radius_graph_pbc( + radius_cutoff, max_num_neighbors + ) data = create_graph_connectivity_pbc(data) atomic_descriptors = torch.cat( @@ -176,26 +190,22 @@ def create_configuration( data.x = atomic_descriptors data = atomic_structure_handler.compute(data) - - total_energy = torch.sum(data.x[:,4]) - energy_per_atom = total_energy/number_nodes - + + total_energy = torch.sum(data.x[:, 4]) + energy_per_atom = total_energy / number_nodes + total_energy_str = numpy.array2string(total_energy.detach().numpy()) energy_per_atom_str = numpy.array2string(energy_per_atom.detach().numpy()) filetxt = total_energy_str + "\n" + energy_per_atom_str for index in range(0, 3): numpy_row = data.supercell_size[index, :].detach().numpy() - numpy_string_row = numpy.array2string( - numpy_row, precision=64, separator="\t" - ) + numpy_string_row = numpy.array2string(numpy_row, precision=64, separator="\t") filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") for index in range(0, number_nodes): numpy_row = data.x[index, :].detach().numpy() - numpy_string_row = numpy.array2string( - numpy_row, precision=64, separator="\t" - ) + numpy_string_row = numpy.array2string(numpy_row, precision=64, separator="\t") filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") filename = os.path.join( @@ -205,10 +215,26 @@ def create_configuration( f.write(filetxt) -if __name__=="__main__": +if __name__ == "__main__": path = "./data" radius_cutoff = 5.0 atom_types = [1] formula = LJpotential(1.0, 3.4) - AtomicStructureHandler = AtomicStructureHandler(atom_types, [primitive_bravais_lattice_constant_x, primitive_bravais_lattice_constant_y, primitive_bravais_lattice_constant_z], radius_cutoff, formula) - deterministic_graph_data(path, atom_types, atomic_structure_handler=AtomicStructureHandler, radius_cutoff=radius_cutoff, relative_maximum_atomic_displacement=1e-1, number_configurations=1000) + AtomicStructureHandler = AtomicStructureHandler( + atom_types, + [ + primitive_bravais_lattice_constant_x, + primitive_bravais_lattice_constant_y, + primitive_bravais_lattice_constant_z, + ], + radius_cutoff, + formula, + ) + deterministic_graph_data( + path, + atom_types, + atomic_structure_handler=AtomicStructureHandler, + radius_cutoff=radius_cutoff, + relative_maximum_atomic_displacement=1e-1, + number_configurations=1000, + ) diff --git a/examples/LennardJones/distributed_utils.py b/examples/LennardJones/distributed_utils.py index 507cdc5a7..8c367bc48 100644 --- a/examples/LennardJones/distributed_utils.py +++ b/examples/LennardJones/distributed_utils.py @@ -1,3 +1,3 @@ def nsplit(a, n): k, m = divmod(len(a), n) - return (a[i * k + min(i, m): (i + 1) * k + min(i + 1, m)] for i in range(n)) + return (a[i * k + min(i, m) : (i + 1) * k + min(i + 1, m)] for i in range(n)) diff --git a/examples/LennardJones/graph_utils.py b/examples/LennardJones/graph_utils.py index 8d290c9c3..8e9c0698f 100644 --- a/examples/LennardJones/graph_utils.py +++ b/examples/LennardJones/graph_utils.py @@ -4,6 +4,7 @@ import ase.neighborlist from torch_geometric.utils import remove_self_loops, degree + class RadiusGraphPBC(RadiusGraph): r"""Creates edges based on node positions :obj:`pos` to all points within a given distance, including periodic images. @@ -52,4 +53,4 @@ def get_radius_graph_pbc(radius, max_neighbours, loop=False): r=radius, loop=loop, max_num_neighbors=max_neighbours, - ) \ No newline at end of file + ) diff --git a/examples/LennardJones/inference.py b/examples/LennardJones/inference.py index 3da1e365e..febe14fcd 100644 --- a/examples/LennardJones/inference.py +++ b/examples/LennardJones/inference.py @@ -39,6 +39,7 @@ pass import matplotlib.pyplot as plt + plt.rcParams.update({"font.size": 16}) @@ -71,12 +72,11 @@ def get_log_name_config(config): ) ) + def getcolordensity(xdata, ydata): ############################### nbin = 20 - hist2d, xbins_edge, ybins_edge = np.histogram2d( - x=xdata, y=ydata, bins=[nbin, nbin] - ) + hist2d, xbins_edge, ybins_edge = np.histogram2d(x=xdata, y=ydata, bins=[nbin, nbin]) xbin_cen = 0.5 * (xbins_edge[0:-1] + xbins_edge[1:]) ybin_cen = 0.5 * (ybins_edge[0:-1] + ybins_edge[1:]) BCTY, BCTX = np.meshgrid(ybin_cen, xbin_cen) @@ -97,9 +97,11 @@ def getcolordensity(xdata, ydata): ) # np.nan) return hist2d_norm + def info(*args, logtype="info", sep=" "): getattr(logging, logtype)(sep.join(map(str, args))) + if __name__ == "__main__": modelname = "LJ" @@ -149,9 +151,21 @@ def info(*args, logtype="info", sep=" "): basedir = os.path.join( os.path.dirname(__file__), "dataset", "%s.pickle" % modelname ) - trainset = SimplePickleDataset(basedir=basedir, label="trainset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) - valset = SimplePickleDataset(basedir=basedir, label="valset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) - testset = SimplePickleDataset(basedir=basedir, label="testset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + trainset = SimplePickleDataset( + basedir=basedir, + label="trainset", + var_config=config["NeuralNetwork"]["Variables_of_interest"], + ) + valset = SimplePickleDataset( + basedir=basedir, + label="valset", + var_config=config["NeuralNetwork"]["Variables_of_interest"], + ) + testset = SimplePickleDataset( + basedir=basedir, + label="testset", + var_config=config["NeuralNetwork"]["Variables_of_interest"], + ) pna_deg = trainset.pna_deg else: raise NotImplementedError("No supported format: %s" % (args.format)) @@ -161,15 +175,17 @@ def info(*args, logtype="info", sep=" "): verbosity=config["Verbosity"]["level"], ) - model = torch.nn.parallel.DistributedDataParallel( - model - ) + model = torch.nn.parallel.DistributedDataParallel(model) load_existing_model(model, modelname, path="./logs/") model.eval() variable_index = 0 - for output_name, output_type, output_dim in zip(config["NeuralNetwork"]["Variables_of_interest"]["output_names"], config["NeuralNetwork"]["Variables_of_interest"]["type"], config["NeuralNetwork"]["Variables_of_interest"]["output_dim"]): + for output_name, output_type, output_dim in zip( + config["NeuralNetwork"]["Variables_of_interest"]["output_names"], + config["NeuralNetwork"]["Variables_of_interest"]["type"], + config["NeuralNetwork"]["Variables_of_interest"]["output_dim"], + ): test_MAE = 0.0 @@ -183,16 +199,14 @@ def info(*args, logtype="info", sep=" "): start = data.y_loc[0][variable_index].item() end = data.y_loc[0][variable_index + 1].item() true = data.y[start:end, 0] - test_MAE += torch.norm(predicted - true, p=1).item()/len(testset) + test_MAE += torch.norm(predicted - true, p=1).item() / len(testset) predicted_values.extend(predicted.tolist()) true_values.extend(true.tolist()) hist2d_norm = getcolordensity(true_values, predicted_values) fig, ax = plt.subplots() - plt.scatter( - true_values, predicted_values, s=8, c=hist2d_norm, vmin=0, vmax=1 - ) + plt.scatter(true_values, predicted_values, s=8, c=hist2d_norm, vmin=0, vmax=1) plt.clim(0, 1) ax.plot(ax.get_xlim(), ax.get_xlim(), ls="--", color="red") plt.colorbar() @@ -205,4 +219,4 @@ def info(*args, logtype="info", sep=" "): print(f"Test MAE {output_name}: ", test_MAE) - variable_index += 1 \ No newline at end of file + variable_index += 1 diff --git a/examples/LennardJones/inference_derivative_energy.py b/examples/LennardJones/inference_derivative_energy.py index 7aca2ae86..a3a5f2bf3 100644 --- a/examples/LennardJones/inference_derivative_energy.py +++ b/examples/LennardJones/inference_derivative_energy.py @@ -40,6 +40,7 @@ pass import matplotlib.pyplot as plt + plt.rcParams.update({"font.size": 16}) @@ -72,12 +73,11 @@ def get_log_name_config(config): ) ) + def getcolordensity(xdata, ydata): ############################### nbin = 20 - hist2d, xbins_edge, ybins_edge = np.histogram2d( - x=xdata, y=ydata, bins=[nbin, nbin] - ) + hist2d, xbins_edge, ybins_edge = np.histogram2d(x=xdata, y=ydata, bins=[nbin, nbin]) xbin_cen = 0.5 * (xbins_edge[0:-1] + xbins_edge[1:]) ybin_cen = 0.5 * (ybins_edge[0:-1] + ybins_edge[1:]) BCTY, BCTX = np.meshgrid(ybin_cen, xbin_cen) @@ -98,9 +98,11 @@ def getcolordensity(xdata, ydata): ) # np.nan) return hist2d_norm + def info(*args, logtype="info", sep=" "): getattr(logging, logtype)(sep.join(map(str, args))) + if __name__ == "__main__": modelname = "LJ" @@ -150,9 +152,21 @@ def info(*args, logtype="info", sep=" "): basedir = os.path.join( os.path.dirname(__file__), "dataset", "%s.pickle" % modelname ) - trainset = SimplePickleDataset(basedir=basedir, label="trainset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) - valset = SimplePickleDataset(basedir=basedir, label="valset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) - testset = SimplePickleDataset(basedir=basedir, label="testset", var_config=config["NeuralNetwork"]["Variables_of_interest"]) + trainset = SimplePickleDataset( + basedir=basedir, + label="trainset", + var_config=config["NeuralNetwork"]["Variables_of_interest"], + ) + valset = SimplePickleDataset( + basedir=basedir, + label="valset", + var_config=config["NeuralNetwork"]["Variables_of_interest"], + ) + testset = SimplePickleDataset( + basedir=basedir, + label="testset", + var_config=config["NeuralNetwork"]["Variables_of_interest"], + ) pna_deg = trainset.pna_deg else: raise NotImplementedError("No supported format: %s" % (args.format)) @@ -162,15 +176,13 @@ def info(*args, logtype="info", sep=" "): verbosity=config["Verbosity"]["level"], ) - model = torch.nn.parallel.DistributedDataParallel( - model - ) + model = torch.nn.parallel.DistributedDataParallel(model) load_existing_model(model, modelname, path="./logs/") model.eval() variable_index = 0 - #for output_name, output_type, output_dim in zip(config["NeuralNetwork"]["Variables_of_interest"]["output_names"], config["NeuralNetwork"]["Variables_of_interest"]["type"], config["NeuralNetwork"]["Variables_of_interest"]["output_dim"]): + # for output_name, output_type, output_dim in zip(config["NeuralNetwork"]["Variables_of_interest"]["output_names"], config["NeuralNetwork"]["Variables_of_interest"]["type"], config["NeuralNetwork"]["Variables_of_interest"]["output_dim"]): test_MAE = 0.0 @@ -182,14 +194,20 @@ def info(*args, logtype="info", sep=" "): for data_id, data in enumerate(tqdm(testset)): data.pos.requires_grad = True - node_energy_pred = model(data.to(get_device()))[0] # Note that this is sensitive to energy and forces prediction being single-task (current requirement) + node_energy_pred = model(data.to(get_device()))[ + 0 + ] # Note that this is sensitive to energy and forces prediction being single-task (current requirement) energy_pred = torch.sum(node_energy_pred, dim=0).float() test_MAE += torch.norm(energy_pred - data.energy, p=1).item() / len(testset) - #predicted.backward(retain_graph=True) - #gradients = data.pos.grad - grads_energy = torch.autograd.grad(outputs=energy_pred, inputs=data.pos, - grad_outputs=torch.ones_like(energy_pred), - retain_graph=False, create_graph=True)[0] + # predicted.backward(retain_graph=True) + # gradients = data.pos.grad + grads_energy = torch.autograd.grad( + outputs=energy_pred, + inputs=data.pos, + grad_outputs=torch.ones_like(energy_pred), + retain_graph=False, + create_graph=True, + )[0] energy_pred_list.extend(energy_pred.tolist()) energy_true_list.extend(data.energy.tolist()) forces_pred_list.extend((-grads_energy).flatten().tolist()) @@ -198,9 +216,7 @@ def info(*args, logtype="info", sep=" "): hist2d_norm = getcolordensity(energy_true_list, energy_pred_list) fig, ax = plt.subplots() - plt.scatter( - energy_true_list, energy_pred_list, s=8, c=hist2d_norm, vmin=0, vmax=1 - ) + plt.scatter(energy_true_list, energy_pred_list, s=8, c=hist2d_norm, vmin=0, vmax=1) plt.clim(0, 1) ax.plot(ax.get_xlim(), ax.get_xlim(), ls="--", color="red") plt.colorbar() @@ -215,9 +231,7 @@ def info(*args, logtype="info", sep=" "): hist2d_norm = getcolordensity(forces_pred_list, forces_true_list) fig, ax = plt.subplots() - plt.scatter( - forces_pred_list, forces_true_list, s=8, c=hist2d_norm, vmin=0, vmax=1 - ) + plt.scatter(forces_pred_list, forces_true_list, s=8, c=hist2d_norm, vmin=0, vmax=1) plt.clim(0, 1) ax.plot(ax.get_xlim(), ax.get_xlim(), ls="--", color="red") plt.colorbar() diff --git a/examples/LennardJones/train_vlad_atomic_forces.py b/examples/LennardJones/train_vlad_atomic_forces.py index 156e7d400..bd621e9b0 100644 --- a/examples/LennardJones/train_vlad_atomic_forces.py +++ b/examples/LennardJones/train_vlad_atomic_forces.py @@ -116,22 +116,22 @@ def transform_input_to_data_object_base(self, filepath): pos = torch_data[:, [1, 2, 3]].to(torch.float32) atomic_number = torch_data[:, [0]].to(torch.float32) forces_torch = torch.zeros_like(pos) - forces_torch[0,:] = forces.unsqueeze(0) + forces_torch[0, :] = forces.unsqueeze(0) data = Data( pos=pos, x=torch.cat((atomic_number, forces_torch.to(torch.float32)), 1), - y = [] + y=[], ) data = create_graph_fromXYZ(data) data = compute_edge_lengths(data) data.edge_attr = data.edge_attr.to(torch.float32) - #data = spherical_coordinates(data) + # data = spherical_coordinates(data) data = cartesian_coordinates(data) - #maintain directionality - data.edge_index = data.edge_index[:,0:6] - data.edge_attr= data.edge_attr[0:6,:] + # maintain directionality + data.edge_index = data.edge_index[:, 0:6] + data.edge_attr = data.edge_attr[0:6, :] return data @@ -152,7 +152,9 @@ def get(self, idx): action="store_true", help="preprocess only (no training)", ) - parser.add_argument("--inputfile", help="input file", type=str, default="LJ_vlad_atomic_forces.json") + parser.add_argument( + "--inputfile", help="input file", type=str, default="LJ_vlad_atomic_forces.json" + ) parser.add_argument("--mae", action="store_true", help="do mae calculation") parser.add_argument("--ddstore", action="store_true", help="ddstore dataset") parser.add_argument("--ddstore_width", type=int, help="ddstore width", default=None) @@ -354,7 +356,11 @@ def get(self, idx): os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + ( + train_loader, + val_loader, + test_loader, + ) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) diff --git a/examples/LennardJones/train_vlad_total_energy.py b/examples/LennardJones/train_vlad_total_energy.py index 14179655f..a42b1749c 100644 --- a/examples/LennardJones/train_vlad_total_energy.py +++ b/examples/LennardJones/train_vlad_total_energy.py @@ -122,12 +122,12 @@ def transform_input_to_data_object_base(self, filepath): data = create_graph_fromXYZ(data) data = compute_edge_lengths(data) data.edge_attr = data.edge_attr.to(torch.float32) - #data = spherical_coordinates(data) + # data = spherical_coordinates(data) data = cartesian_coordinates(data) - #maintain directionality - data.edge_index = data.edge_index[:,0:6] - data.edge_attr= data.edge_attr[0:6,:] + # maintain directionality + data.edge_index = data.edge_index[:, 0:6] + data.edge_attr = data.edge_attr[0:6, :] return data @@ -148,7 +148,9 @@ def get(self, idx): action="store_true", help="preprocess only (no training)", ) - parser.add_argument("--inputfile", help="input file", type=str, default="LJ_vlad_total_energy.json") + parser.add_argument( + "--inputfile", help="input file", type=str, default="LJ_vlad_total_energy.json" + ) parser.add_argument("--mae", action="store_true", help="do mae calculation") parser.add_argument("--ddstore", action="store_true", help="ddstore dataset") parser.add_argument("--ddstore_width", type=int, help="ddstore width", default=None) @@ -350,7 +352,11 @@ def get(self, idx): os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + ( + train_loader, + val_loader, + test_loader, + ) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) From 271e36a28d51e3b4ed8925b132a9afa51dc893d0 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 13:56:05 -0400 Subject: [PATCH 11/37] formatting --- examples/LennardJones/LennardJones.py | 10 +++------- examples/LennardJones/train_vlad_atomic_forces.py | 10 +++------- examples/LennardJones/train_vlad_total_energy.py | 10 +++------- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index a8a8d63ba..4fb37bed6 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -420,13 +420,9 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - - ( - train_loader, - val_loader, - test_loader, - ) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) diff --git a/examples/LennardJones/train_vlad_atomic_forces.py b/examples/LennardJones/train_vlad_atomic_forces.py index bd621e9b0..82d1ecd39 100644 --- a/examples/LennardJones/train_vlad_atomic_forces.py +++ b/examples/LennardJones/train_vlad_atomic_forces.py @@ -355,13 +355,9 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - - ( - train_loader, - val_loader, - test_loader, - ) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) diff --git a/examples/LennardJones/train_vlad_total_energy.py b/examples/LennardJones/train_vlad_total_energy.py index a42b1749c..e072ea98d 100644 --- a/examples/LennardJones/train_vlad_total_energy.py +++ b/examples/LennardJones/train_vlad_total_energy.py @@ -351,13 +351,9 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - - ( - train_loader, - val_loader, - test_loader, - ) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) From 9de9677dc7e9d740aed977dc118f72c8701b2fb9 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 13:58:22 -0400 Subject: [PATCH 12/37] formatting --- examples/LennardJones/LennardJones.py | 2 +- examples/LennardJones/train_vlad_atomic_forces.py | 2 +- examples/LennardJones/train_vlad_total_energy.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index 4fb37bed6..b287ea52b 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -422,7 +422,7 @@ def get(self, idx): os.environ["HYDRAGNN_USE_ddstore"] = "1" (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) diff --git a/examples/LennardJones/train_vlad_atomic_forces.py b/examples/LennardJones/train_vlad_atomic_forces.py index 82d1ecd39..a52c3d0ff 100644 --- a/examples/LennardJones/train_vlad_atomic_forces.py +++ b/examples/LennardJones/train_vlad_atomic_forces.py @@ -357,7 +357,7 @@ def get(self, idx): os.environ["HYDRAGNN_USE_ddstore"] = "1" (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) diff --git a/examples/LennardJones/train_vlad_total_energy.py b/examples/LennardJones/train_vlad_total_energy.py index e072ea98d..004fe5319 100644 --- a/examples/LennardJones/train_vlad_total_energy.py +++ b/examples/LennardJones/train_vlad_total_energy.py @@ -353,7 +353,7 @@ def get(self, idx): os.environ["HYDRAGNN_USE_ddstore"] = "1" (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] + trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) From a904def49c5f7bc833a2c557b937cb7a6a432896 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 14:01:39 -0400 Subject: [PATCH 13/37] formatting --- examples/LennardJones/LennardJones.py | 2 +- examples/LennardJones/train_vlad_atomic_forces.py | 2 +- examples/LennardJones/train_vlad_total_energy.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index b287ea52b..a8e338e19 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -420,7 +420,7 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) diff --git a/examples/LennardJones/train_vlad_atomic_forces.py b/examples/LennardJones/train_vlad_atomic_forces.py index a52c3d0ff..36d8d711a 100644 --- a/examples/LennardJones/train_vlad_atomic_forces.py +++ b/examples/LennardJones/train_vlad_atomic_forces.py @@ -355,7 +355,7 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) diff --git a/examples/LennardJones/train_vlad_total_energy.py b/examples/LennardJones/train_vlad_total_energy.py index 004fe5319..57acfc01c 100644 --- a/examples/LennardJones/train_vlad_total_energy.py +++ b/examples/LennardJones/train_vlad_total_energy.py @@ -351,7 +351,7 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) From 12c042e1c3942426e2b5724b4b9d521a1a76def7 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 14:15:17 -0400 Subject: [PATCH 14/37] formatting --- examples/LennardJones/LennardJones.py | 2 +- examples/LennardJones/train_vlad_atomic_forces.py | 2 +- examples/LennardJones/train_vlad_total_energy.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index a8e338e19..d2aef3839 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -420,7 +420,7 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) diff --git a/examples/LennardJones/train_vlad_atomic_forces.py b/examples/LennardJones/train_vlad_atomic_forces.py index 36d8d711a..aa6caf9d9 100644 --- a/examples/LennardJones/train_vlad_atomic_forces.py +++ b/examples/LennardJones/train_vlad_atomic_forces.py @@ -355,7 +355,7 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) diff --git a/examples/LennardJones/train_vlad_total_energy.py b/examples/LennardJones/train_vlad_total_energy.py index 57acfc01c..123c0d6f4 100644 --- a/examples/LennardJones/train_vlad_total_energy.py +++ b/examples/LennardJones/train_vlad_total_energy.py @@ -351,7 +351,7 @@ def get(self, idx): if args.ddstore: os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" os.environ["HYDRAGNN_USE_ddstore"] = "1" - + (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] ) From 0f3fe54ece380188d97ece577f45ed4bf0eb2cea Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 14:25:00 -0400 Subject: [PATCH 15/37] formatting --- examples/LennardJones/AtomicStructure.py | 1 - examples/LennardJones/LJpotential.py | 1 - 2 files changed, 2 deletions(-) diff --git a/examples/LennardJones/AtomicStructure.py b/examples/LennardJones/AtomicStructure.py index 540679023..b09500a7d 100644 --- a/examples/LennardJones/AtomicStructure.py +++ b/examples/LennardJones/AtomicStructure.py @@ -2,7 +2,6 @@ class AtomicStructureHandler: - def __init__( self, list_atom_types, bravais_lattice_constants, radius_cutoff, formula ): diff --git a/examples/LennardJones/LJpotential.py b/examples/LennardJones/LJpotential.py index 7e267d82b..a38d17ce3 100644 --- a/examples/LennardJones/LJpotential.py +++ b/examples/LennardJones/LJpotential.py @@ -2,7 +2,6 @@ class LJpotential: - def __init__(self, epsilon, sigma): self.epsilon = epsilon self.sigma = sigma From 4df57c7f06bb5e0553f31ad1f07b447bbe6801f8 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 14:56:19 -0400 Subject: [PATCH 16/37] take out images and adjust unecessary import --- examples/LennardJones/Forces_Scatterplot.png | Bin 291536 -> 0 bytes examples/LennardJones/LennardJones.py | 2 -- examples/LennardJones/energy_Scatterplot.png | Bin 180440 -> 0 bytes 3 files changed, 2 deletions(-) delete mode 100644 examples/LennardJones/Forces_Scatterplot.png delete mode 100644 examples/LennardJones/energy_Scatterplot.png diff --git a/examples/LennardJones/Forces_Scatterplot.png b/examples/LennardJones/Forces_Scatterplot.png deleted file mode 100644 index 85c45ce8e39575678d61443e1757d75f20cd7e3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291536 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

t<4Jpub}j(ii;Xx8 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 nOi18tu?i>Nu?p(mz_e_k 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 MG1N}}`kU|n7m{&C-2eap diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index d2aef3839..9b6aba399 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -7,8 +7,6 @@ import os, json import random -import h5py - import logging import sys import argparse diff --git a/examples/LennardJones/energy_Scatterplot.png b/examples/LennardJones/energy_Scatterplot.png deleted file mode 100644 index 9ff3f7e73e105c8531b53450ae9652e8b30b9ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180440 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 From 477930902df05684ed904bdade17120c84505d7f Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 14:58:15 -0400 Subject: [PATCH 17/37] revert to SiLU in DimeNet --- hydragnn/models/DIMEStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydragnn/models/DIMEStack.py b/hydragnn/models/DIMEStack.py index da52955dc..fcaafb153 100644 --- a/hydragnn/models/DIMEStack.py +++ b/hydragnn/models/DIMEStack.py @@ -101,7 +101,7 @@ def get_conv(self, input_dim, output_dim): out_emb_channels=self.out_emb_size, out_channels=output_dim, num_layers=1, - act=Sigmoid(), # Sigmoid instead of SiLU here promotes stability when we have a linear decoder at the start of convolution (especially for random data examples in test_graphs.py) + act=SiLU(), output_initializer="glorot_orthogonal", ) return Sequential( From 456ebf73541bb92d2c3b607eb8459e217facd9a1 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Mon, 16 Sep 2024 15:03:32 -0400 Subject: [PATCH 18/37] don't create plots by default --- examples/LennardJones/LennardJones.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index 9b6aba399..2aa377ea9 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -460,7 +460,7 @@ def get(self, idx): config["NeuralNetwork"], log_name, verbosity, - create_plots=True, + create_plots=False, compute_grad_energy=True, ) From 20f2e4189ec9524f21adc81ff6c2c9d4d1d2d4c5 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 10:01:51 -0400 Subject: [PATCH 19/37] file cleanup and dataset test --- examples/LennardJones/LJ_multitask.json | 75 --- .../LennardJones/LJ_vlad_atomic_forces.json | 61 --- .../LennardJones/LJ_vlad_total_energy.json | 71 --- examples/LennardJones/inference.py | 222 --------- .../LennardJones/train_vlad_atomic_forces.py | 414 ---------------- .../LennardJones/train_vlad_total_energy.py | 410 ---------------- examples/qm9/qm9.py | 14 +- tests/test_graphs.py | 448 +++++++++--------- 8 files changed, 237 insertions(+), 1478 deletions(-) delete mode 100644 examples/LennardJones/LJ_multitask.json delete mode 100644 examples/LennardJones/LJ_vlad_atomic_forces.json delete mode 100644 examples/LennardJones/LJ_vlad_total_energy.json delete mode 100644 examples/LennardJones/inference.py delete mode 100644 examples/LennardJones/train_vlad_atomic_forces.py delete mode 100644 examples/LennardJones/train_vlad_total_energy.py diff --git a/examples/LennardJones/LJ_multitask.json b/examples/LennardJones/LJ_multitask.json deleted file mode 100644 index 662254da7..000000000 --- a/examples/LennardJones/LJ_multitask.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "Verbosity": { - "level": 2 - }, - "Dataset": { - "name": "LJdataset", - "path": {"total": "./dataset/data"}, - "format": "XYZ", - "rotational_invariance": true, - "node_features": { - "name": ["atom_type", "potential", "forces"], - "dim": [1, 1, 3], - "column_index": [0,4,5] - }, - "graph_features":{ - "name": ["total_energy"], - "dim": [1], - "column_index": [0] - } - }, - "NeuralNetwork": { - "Architecture": { - "periodic_boundary_conditions": true, - "model_type": "EGNN", - "equivariance": true, - "edge_features": ["bond_length", "polar_angle", "azimutal_angle"], - "max_neighbours": 20, - "hidden_dim": 20, - "num_conv_layers": 6, - "output_heads": { - "graph": { - "num_sharedlayers": 2, - "dim_sharedlayers": 50, - "num_headlayers": 2, - "dim_headlayers": [ - 20, - 20 - ] - }, - "node": { - "num_headlayers": 2, - "dim_headlayers": [20,20], - "type": "mlp" - } - }, - "task_weights": [ - 1, 1 - ] - }, - "Variables_of_interest": { - "input_node_features": [0], - "output_index": [ - 0, 2 - ], - "type": [ - "graph", "node" - ], - "output_dim": [1, 3], - "output_names": ["total_energy", "atomic_forces"] - }, - "Training": { - "num_epoch": 50, - "batch_size": 3, - "continue": 0, - "EarlyStopping": true, - "patience": 100, - "Checkpoint": true, - "checkpoint_warmup": 100, - "startfrom": "existing_model", - "Optimizer": { - "learning_rate": 0.001 - } - } - } -} diff --git a/examples/LennardJones/LJ_vlad_atomic_forces.json b/examples/LennardJones/LJ_vlad_atomic_forces.json deleted file mode 100644 index c14b23f8a..000000000 --- a/examples/LennardJones/LJ_vlad_atomic_forces.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "Verbosity": { - "level": 2 - }, - "Dataset": { - "name": "LJdataset", - "path": {"total": "./dataset/data"}, - "format": "XYZ", - "rotational_invariance": true, - "node_features": { - "name": ["atom_type", "forces"], - "dim": [1, 3], - "column_index": [0, 1] - } - }, - "NeuralNetwork": { - "Architecture": { - "periodic_boundary_conditions": true, - "model_type": "EGNN", - "equivariance": true, - "edge_features": ["bond_length", "polar_angle", "azimutal_angle"], - "max_neighbours": 20, - "hidden_dim": 10, - "num_conv_layers": 3, - "output_heads": { - "node": { - "num_headlayers": 2, - "dim_headlayers": [50,25], - "type": "mlp" - } - }, - "task_weights": [ - 1 - ] - }, - "Variables_of_interest": { - "input_node_features": [0], - "output_index": [ - 1 - ], - "type": [ - "node" - ], - "output_dim": [3], - "output_names": ["forces"] - }, - "Training": { - "num_epoch": 20, - "batch_size": 3, - "continue": 0, - "EarlyStopping": true, - "patience": 100, - "Checkpoint": true, - "checkpoint_warmup": 100, - "startfrom": "existing_model", - "Optimizer": { - "learning_rate": 0.001 - } - } - } -} diff --git a/examples/LennardJones/LJ_vlad_total_energy.json b/examples/LennardJones/LJ_vlad_total_energy.json deleted file mode 100644 index db57121a7..000000000 --- a/examples/LennardJones/LJ_vlad_total_energy.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "Verbosity": { - "level": 2 - }, - "Dataset": { - "name": "LJdataset", - "path": {"total": "./dataset/data"}, - "format": "XYZ", - "rotational_invariance": true, - "node_features": { - "name": ["atom_type"], - "dim": [1], - "column_index": [0] - }, - "graph_features":{ - "name": ["total_energy"], - "dim": [1], - "column_index": [0] - } - }, - "NeuralNetwork": { - "Architecture": { - "periodic_boundary_conditions": true, - "model_type": "EGNN", - "equivariance": true, - "edge_features": ["bond_length", "polar_angle", "azimutal_angle"], - "max_neighbours": 20, - "hidden_dim": 10, - "num_conv_layers": 3, - "output_heads": { - "graph": { - "num_sharedlayers": 2, - "dim_sharedlayers": 20, - "num_headlayers": 2, - "dim_headlayers": [ - 50, - 50 - ] - } - }, - "task_weights": [ - 1 - ] - }, - "Variables_of_interest": { - "input_node_features": [0, 1, 2, 3], - "output_index": [ - 0 - ], - "type": [ - "graph" - ], - "output_dim": [1], - "output_names": ["energy"] - }, - "Training": { - "num_epoch": 50, - "batch_size": 3, - "perc_train": 0.8, - "continue": 0, - "EarlyStopping": true, - "patience": 10, - "Checkpoint": true, - "checkpoint_warmup": 100, - "startfrom": "existing_model", - "Optimizer": { - "learning_rate": 0.001 - } - } - } -} diff --git a/examples/LennardJones/inference.py b/examples/LennardJones/inference.py deleted file mode 100644 index febe14fcd..000000000 --- a/examples/LennardJones/inference.py +++ /dev/null @@ -1,222 +0,0 @@ -############################################################################## -# Copyright (c) 2021, Oak Ridge National Laboratory # -# All rights reserved. # -# # -# This file is part of HydraGNN and is distributed under a BSD 3-clause # -# license. For the licensing terms see the LICENSE file in the top-level # -# directory. # -# # -# SPDX-License-Identifier: BSD-3-Clause # -############################################################################## - -import json, os -import sys -import logging -import pickle -from tqdm import tqdm -from mpi4py import MPI -import argparse - -import torch -import numpy as np - -import hydragnn -from hydragnn.utils.time_utils import Timer -from hydragnn.utils.distributed import get_device -from hydragnn.utils.model import load_existing_model -from hydragnn.utils.pickledataset import SimplePickleDataset -from hydragnn.utils.config_utils import ( - update_config, -) -from hydragnn.models.create import create_model_config -from hydragnn.preprocess import create_dataloaders - -from scipy.interpolate import griddata - -try: - from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset -except ImportError: - pass - -import matplotlib.pyplot as plt - -plt.rcParams.update({"font.size": 16}) - - -def get_log_name_config(config): - return ( - config["NeuralNetwork"]["Architecture"]["model_type"] - + "-r-" - + str(config["NeuralNetwork"]["Architecture"]["radius"]) - + "-ncl-" - + str(config["NeuralNetwork"]["Architecture"]["num_conv_layers"]) - + "-hd-" - + str(config["NeuralNetwork"]["Architecture"]["hidden_dim"]) - + "-ne-" - + str(config["NeuralNetwork"]["Training"]["num_epoch"]) - + "-lr-" - + str(config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"]) - + "-bs-" - + str(config["NeuralNetwork"]["Training"]["batch_size"]) - + "-node_ft-" - + "".join( - str(x) - for x in config["NeuralNetwork"]["Variables_of_interest"][ - "input_node_features" - ] - ) - + "-task_weights-" - + "".join( - str(weigh) + "-" - for weigh in config["NeuralNetwork"]["Architecture"]["task_weights"] - ) - ) - - -def getcolordensity(xdata, ydata): - ############################### - nbin = 20 - hist2d, xbins_edge, ybins_edge = np.histogram2d(x=xdata, y=ydata, bins=[nbin, nbin]) - xbin_cen = 0.5 * (xbins_edge[0:-1] + xbins_edge[1:]) - ybin_cen = 0.5 * (ybins_edge[0:-1] + ybins_edge[1:]) - BCTY, BCTX = np.meshgrid(ybin_cen, xbin_cen) - hist2d = hist2d / np.amax(hist2d) - print(np.amax(hist2d)) - - bctx1d = np.reshape(BCTX, len(xbin_cen) * nbin) - bcty1d = np.reshape(BCTY, len(xbin_cen) * nbin) - loc_pts = np.zeros((len(xbin_cen) * nbin, 2)) - loc_pts[:, 0] = bctx1d - loc_pts[:, 1] = bcty1d - hist2d_norm = griddata( - loc_pts, - hist2d.reshape(len(xbin_cen) * nbin), - (xdata, ydata), - method="linear", - fill_value=0, - ) # np.nan) - return hist2d_norm - - -def info(*args, logtype="info", sep=" "): - getattr(logging, logtype)(sep.join(map(str, args))) - - -if __name__ == "__main__": - - modelname = "LJ" - - parser = argparse.ArgumentParser() - parser.add_argument( - "--inputfile", help="input file", type=str, default="./logs/LJ/config.json" - ) - group = parser.add_mutually_exclusive_group() - group.add_argument( - "--adios", - help="Adios gan_dataset", - action="store_const", - dest="format", - const="adios", - ) - group.add_argument( - "--pickle", - help="Pickle gan_dataset", - action="store_const", - dest="format", - const="pickle", - ) - parser.set_defaults(format="pickle") - - args = parser.parse_args() - - dirpwd = os.path.dirname(os.path.abspath(__file__)) - input_filename = os.path.join(dirpwd, args.inputfile) - with open(input_filename, "r") as f: - config = json.load(f) - hydragnn.utils.setup_log(get_log_name_config(config)) - ################################################################################################################## - # Always initialize for multi-rank training. - comm_size, rank = hydragnn.utils.setup_ddp() - ################################################################################################################## - comm = MPI.COMM_WORLD - - datasetname = "LJ" - - comm.Barrier() - - timer = Timer("load_data") - timer.start() - if args.format == "pickle": - info("Pickle load") - basedir = os.path.join( - os.path.dirname(__file__), "dataset", "%s.pickle" % modelname - ) - trainset = SimplePickleDataset( - basedir=basedir, - label="trainset", - var_config=config["NeuralNetwork"]["Variables_of_interest"], - ) - valset = SimplePickleDataset( - basedir=basedir, - label="valset", - var_config=config["NeuralNetwork"]["Variables_of_interest"], - ) - testset = SimplePickleDataset( - basedir=basedir, - label="testset", - var_config=config["NeuralNetwork"]["Variables_of_interest"], - ) - pna_deg = trainset.pna_deg - else: - raise NotImplementedError("No supported format: %s" % (args.format)) - - model = create_model_config( - config=config["NeuralNetwork"], - verbosity=config["Verbosity"]["level"], - ) - - model = torch.nn.parallel.DistributedDataParallel(model) - - load_existing_model(model, modelname, path="./logs/") - model.eval() - - variable_index = 0 - for output_name, output_type, output_dim in zip( - config["NeuralNetwork"]["Variables_of_interest"]["output_names"], - config["NeuralNetwork"]["Variables_of_interest"]["type"], - config["NeuralNetwork"]["Variables_of_interest"]["output_dim"], - ): - - test_MAE = 0.0 - - num_samples = len(testset) - true_values = [] - predicted_values = [] - - for data_id, data in enumerate(tqdm(testset)): - predicted = model(data.to(get_device())) - predicted = predicted[variable_index].flatten() - start = data.y_loc[0][variable_index].item() - end = data.y_loc[0][variable_index + 1].item() - true = data.y[start:end, 0] - test_MAE += torch.norm(predicted - true, p=1).item() / len(testset) - predicted_values.extend(predicted.tolist()) - true_values.extend(true.tolist()) - - hist2d_norm = getcolordensity(true_values, predicted_values) - - fig, ax = plt.subplots() - plt.scatter(true_values, predicted_values, s=8, c=hist2d_norm, vmin=0, vmax=1) - plt.clim(0, 1) - ax.plot(ax.get_xlim(), ax.get_xlim(), ls="--", color="red") - plt.colorbar() - plt.xlabel("True values") - plt.ylabel("Predicted values") - plt.title(f"{output_name}") - plt.draw() - plt.tight_layout() - plt.savefig(f"./{output_name}_Scatterplot" + ".png", dpi=400) - - print(f"Test MAE {output_name}: ", test_MAE) - - variable_index += 1 diff --git a/examples/LennardJones/train_vlad_atomic_forces.py b/examples/LennardJones/train_vlad_atomic_forces.py deleted file mode 100644 index aa6caf9d9..000000000 --- a/examples/LennardJones/train_vlad_atomic_forces.py +++ /dev/null @@ -1,414 +0,0 @@ -import mpi4py -from mpi4py import MPI - -mpi4py.rc.thread_level = "serialized" -mpi4py.rc.threads = False - -import os, json -import random - -import h5py - -import logging -import sys -import argparse - -import hydragnn -from hydragnn.utils.print_utils import iterate_tqdm, log -from hydragnn.utils.time_utils import Timer - -from hydragnn.preprocess.load_data import split_dataset -from hydragnn.utils.abstractrawdataset import AbstractBaseDataset -from hydragnn.utils.distdataset import DistDataset -from hydragnn.utils.pickledataset import SimplePickleWriter, SimplePickleDataset -from hydragnn.preprocess.utils import gather_deg - -import numpy as np - -try: - from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset -except ImportError: - pass - -from torch_geometric.data import Data -from torch_geometric.transforms import RadiusGraph, Distance, Spherical, LocalCartesian -import torch -import torch.distributed as dist - -from hydragnn.utils import nsplit -import hydragnn.utils.tracer as tr - - -# FIXME: this works fine for now because we train on disordered atomic structures with potentials and forces computed with Lennard-Jones - - -torch.set_default_dtype(torch.float32) - - -def info(*args, logtype="info", sep=" "): - getattr(logging, logtype)(sep.join(map(str, args))) - - -# FIXME: this radis cutoff overwrites the radius cutoff currently written in the JSON file -create_graph_fromXYZ = RadiusGraph(r=5.0) # radius cutoff in angstrom -compute_edge_lengths = Distance(norm=False, cat=True) -spherical_coordinates = Spherical(norm=False, cat=False) -cartesian_coordinates = LocalCartesian(norm=False, cat=False) - - -class LJDataset_VladTest(AbstractBaseDataset): - """LJDataset_VladTest dataset class""" - - def __init__(self, dirpath, dist=False, sampling=None): - super().__init__() - - self.dist = dist - self.world_size = 1 - self.rank = 1 - if self.dist: - assert torch.distributed.is_initialized() - self.world_size = torch.distributed.get_world_size() - self.rank = torch.distributed.get_rank() - - dirfiles = sorted(os.listdir(dirpath)) - - rx = list(nsplit((dirfiles), self.world_size))[self.rank] - - for file in rx: - filepath = os.path.join(dirpath, file) - self.dataset.append(self.transform_input_to_data_object_base(filepath)) - - def transform_input_to_data_object_base(self, filepath): - - # Using readline() - file = open(filepath, "r") - - torch_data = torch.empty((0, 4), dtype=torch.float32) - - count = 0 - - while True: - count += 1 - - # Get next line from file - line = file.readline() - - # if line is empty - # end of file is reached - if not line: - break - - if count == 1: - array_line = np.fromstring(line, dtype=float, sep="\t") - energy = torch.from_numpy(array_line).unsqueeze(0) - elif count == 2: - array_line = np.fromstring(line, dtype=float, sep="\t") - forces = torch.from_numpy(array_line).unsqueeze(0) - else: - array_line = np.fromstring(line, dtype=float, sep="\t") - torch_data = torch.cat( - [torch_data, torch.from_numpy(array_line).unsqueeze(0)], axis=0 - ) - # print("Line{}: {}".format(count, line.strip())) - - file.close() - - pos = torch_data[:, [1, 2, 3]].to(torch.float32) - atomic_number = torch_data[:, [0]].to(torch.float32) - forces_torch = torch.zeros_like(pos) - forces_torch[0, :] = forces.unsqueeze(0) - - data = Data( - pos=pos, - x=torch.cat((atomic_number, forces_torch.to(torch.float32)), 1), - y=[], - ) - data = create_graph_fromXYZ(data) - data = compute_edge_lengths(data) - data.edge_attr = data.edge_attr.to(torch.float32) - # data = spherical_coordinates(data) - data = cartesian_coordinates(data) - - # maintain directionality - data.edge_index = data.edge_index[:, 0:6] - data.edge_attr = data.edge_attr[0:6, :] - - return data - - def len(self): - return len(self.dataset) - - def get(self, idx): - return self.dataset[idx] - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - formatter_class=argparse.ArgumentDefaultsHelpFormatter - ) - parser.add_argument("--sampling", type=float, help="sampling ratio", default=None) - parser.add_argument( - "--preonly", - action="store_true", - help="preprocess only (no training)", - ) - parser.add_argument( - "--inputfile", help="input file", type=str, default="LJ_vlad_atomic_forces.json" - ) - parser.add_argument("--mae", action="store_true", help="do mae calculation") - parser.add_argument("--ddstore", action="store_true", help="ddstore dataset") - parser.add_argument("--ddstore_width", type=int, help="ddstore width", default=None) - parser.add_argument("--shmem", action="store_true", help="shmem") - parser.add_argument("--log", help="log name") - parser.add_argument("--batch_size", type=int, help="batch_size", default=None) - parser.add_argument("--everyone", action="store_true", help="gptimer") - - 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="adios") - args = parser.parse_args() - - graph_feature_names = [] - graph_feature_dims = [] - node_feature_names = ["atomic_number", "forces"] - node_feature_dims = [1, 3] - dirpwd = os.path.dirname(os.path.abspath(__file__)) - datadir = os.path.join(dirpwd, "dataset/data") - ################################################################################################################## - input_filename = os.path.join(dirpwd, args.inputfile) - ################################################################################################################## - # Configurable run choices (JSON file that accompanies this example script). - with open(input_filename, "r") as f: - config = json.load(f) - verbosity = config["Verbosity"]["level"] - config["NeuralNetwork"]["Variables_of_interest"][ - "graph_feature_names" - ] = graph_feature_names - config["NeuralNetwork"]["Variables_of_interest"][ - "graph_feature_dims" - ] = graph_feature_dims - config["NeuralNetwork"]["Variables_of_interest"][ - "node_feature_names" - ] = node_feature_names - config["NeuralNetwork"]["Variables_of_interest"][ - "node_feature_dims" - ] = node_feature_dims - - if args.batch_size is not None: - config["NeuralNetwork"]["Training"]["batch_size"] = args.batch_size - - ################################################################################################################## - # Always initialize for multi-rank training. - comm_size, rank = hydragnn.utils.setup_ddp() - ################################################################################################################## - - comm = MPI.COMM_WORLD - - ## Set up logging - logging.basicConfig( - level=logging.INFO, - format="%%(levelname)s (rank %d): %%(message)s" % (rank), - datefmt="%H:%M:%S", - ) - - log_name = "LJ" if args.log is None else args.log - hydragnn.utils.setup_log(log_name) - writer = hydragnn.utils.get_summary_writer(log_name) - - log("Command: {0}\n".format(" ".join([x for x in sys.argv])), rank=0) - - modelname = "LJ" - if args.preonly: - - ## local data - total = LJDataset_VladTest( - os.path.join(datadir), - dist=True, - ) - ## This is a local split - trainset, valset, testset = split_dataset( - dataset=total, - perc_train=0.9, - stratify_splitting=False, - ) - print("Local splitting: ", len(total), len(trainset), len(valset), len(testset)) - - deg = gather_deg(trainset) - config["pna_deg"] = deg - - setnames = ["trainset", "valset", "testset"] - - if args.format == "pickle": - - ## 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, - ) - - if args.format == "adios": - ## 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() - - sys.exit(0) - - tr.initialize() - tr.disable() - timer = Timer("load_data") - timer.start() - if args.format == "adios": - info("Adios load") - assert not (args.shmem and args.ddstore), "Cannot use both ddstore and shmem" - opt = { - "preload": False, - "shmem": args.shmem, - "ddstore": args.ddstore, - "ddstore_width": args.ddstore_width, - } - fname = os.path.join(os.path.dirname(__file__), "./dataset/%s.bp" % modelname) - trainset = AdiosDataset(fname, "trainset", comm, **opt) - valset = AdiosDataset(fname, "valset", comm, **opt) - testset = AdiosDataset(fname, "testset", comm, **opt) - elif args.format == "pickle": - info("Pickle load") - basedir = os.path.join( - os.path.dirname(__file__), "dataset", "%s.pickle" % modelname - ) - var_config = config["NeuralNetwork"]["Variables_of_interest"] - trainset = SimplePickleDataset( - basedir=basedir, label="trainset", preload=True, var_config=var_config - ) - valset = SimplePickleDataset( - basedir=basedir, label="valset", var_config=var_config - ) - testset = SimplePickleDataset( - basedir=basedir, label="testset", var_config=var_config - ) - # minmax_node_feature = trainset.minmax_node_feature - # minmax_graph_feature = trainset.minmax_graph_feature - pna_deg = trainset.pna_deg - if args.ddstore: - opt = {"ddstore_width": args.ddstore_width} - trainset = DistDataset(trainset, "trainset", comm, **opt) - valset = DistDataset(valset, "valset", comm, **opt) - testset = DistDataset(testset, "testset", comm, **opt) - # trainset.minmax_node_feature = minmax_node_feature - # trainset.minmax_graph_feature = minmax_graph_feature - trainset.pna_deg = pna_deg - else: - raise NotImplementedError("No supported format: %s" % (args.format)) - - info( - "trainset,valset,testset size: %d %d %d" - % (len(trainset), len(valset), len(testset)) - ) - - if args.ddstore: - os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" - os.environ["HYDRAGNN_USE_ddstore"] = "1" - - (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] - ) - - config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) - ## Good to sync with everyone right after DDStore setup - comm.Barrier() - - hydragnn.utils.save_config(config, log_name) - - timer.stop() - - model = hydragnn.models.create_model_config( - config=config["NeuralNetwork"], - verbosity=verbosity, - ) - model = hydragnn.utils.get_distributed_model(model, verbosity) - - learning_rate = config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"] - optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate) - scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( - optimizer, mode="min", factor=0.5, patience=5, min_lr=0.00001 - ) - - hydragnn.utils.load_existing_model_config( - model, config["NeuralNetwork"]["Training"], optimizer=optimizer - ) - - ################################################################################################################## - - hydragnn.train.train_validate_test( - model, - optimizer, - train_loader, - val_loader, - test_loader, - writer, - scheduler, - config["NeuralNetwork"], - log_name, - verbosity, - create_plots=False, - ) - - hydragnn.utils.save_model(model, optimizer, log_name) - hydragnn.utils.print_timers(verbosity) - - if tr.has("GPTLTracer"): - import gptl4py as gp - - eligible = rank if args.everyone else 0 - if rank == eligible: - gp.pr_file(os.path.join("logs", log_name, "gp_timing.p%d" % rank)) - gp.pr_summary_file(os.path.join("logs", log_name, "gp_timing.summary")) - gp.finalize() - sys.exit(0) diff --git a/examples/LennardJones/train_vlad_total_energy.py b/examples/LennardJones/train_vlad_total_energy.py deleted file mode 100644 index 123c0d6f4..000000000 --- a/examples/LennardJones/train_vlad_total_energy.py +++ /dev/null @@ -1,410 +0,0 @@ -import mpi4py -from mpi4py import MPI - -mpi4py.rc.thread_level = "serialized" -mpi4py.rc.threads = False - -import os, json -import random - -import h5py - -import logging -import sys -import argparse - -import hydragnn -from hydragnn.utils.print_utils import iterate_tqdm, log -from hydragnn.utils.time_utils import Timer - -from hydragnn.preprocess.load_data import split_dataset -from hydragnn.utils.abstractrawdataset import AbstractBaseDataset -from hydragnn.utils.distdataset import DistDataset -from hydragnn.utils.pickledataset import SimplePickleWriter, SimplePickleDataset -from hydragnn.preprocess.utils import gather_deg - -import numpy as np - -try: - from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset -except ImportError: - pass - -from torch_geometric.data import Data -from torch_geometric.transforms import RadiusGraph, Distance, Spherical, LocalCartesian -import torch -import torch.distributed as dist - -from hydragnn.utils import nsplit -import hydragnn.utils.tracer as tr - - -# FIXME: this works fine for now because we train on disordered atomic structures with potentials and forces computed with Lennard-Jones - - -torch.set_default_dtype(torch.float32) - - -def info(*args, logtype="info", sep=" "): - getattr(logging, logtype)(sep.join(map(str, args))) - - -# FIXME: this radis cutoff overwrites the radius cutoff currently written in the JSON file -create_graph_fromXYZ = RadiusGraph(r=5.0) # radius cutoff in angstrom -compute_edge_lengths = Distance(norm=False, cat=True) -spherical_coordinates = Spherical(norm=False, cat=False) -cartesian_coordinates = LocalCartesian(norm=False, cat=False) - - -class LJDataset_VladTest(AbstractBaseDataset): - """LJDataset_VladTest dataset class""" - - def __init__(self, dirpath, dist=False, sampling=None): - super().__init__() - - self.dist = dist - self.world_size = 1 - self.rank = 1 - if self.dist: - assert torch.distributed.is_initialized() - self.world_size = torch.distributed.get_world_size() - self.rank = torch.distributed.get_rank() - - dirfiles = sorted(os.listdir(dirpath)) - - rx = list(nsplit((dirfiles), self.world_size))[self.rank] - - for file in rx: - filepath = os.path.join(dirpath, file) - self.dataset.append(self.transform_input_to_data_object_base(filepath)) - - def transform_input_to_data_object_base(self, filepath): - - # Using readline() - file = open(filepath, "r") - - torch_data = torch.empty((0, 4), dtype=torch.float32) - - count = 0 - - while True: - count += 1 - - # Get next line from file - line = file.readline() - - # if line is empty - # end of file is reached - if not line: - break - - if count == 1: - array_line = np.fromstring(line, dtype=float, sep="\t") - energy = torch.from_numpy(array_line).unsqueeze(0) - elif count == 2: - array_line = np.fromstring(line, dtype=float, sep="\t") - forces = torch.from_numpy(array_line).unsqueeze(0) - else: - array_line = np.fromstring(line, dtype=float, sep="\t") - torch_data = torch.cat( - [torch_data, torch.from_numpy(array_line).unsqueeze(0)], axis=0 - ) - # print("Line{}: {}".format(count, line.strip())) - - file.close() - - data = Data( - pos=torch_data[:, [1, 2, 3]].to(torch.float32), - x=torch_data[:, [0, 1, 2, 3]].to(torch.float32), - forces=forces.unsqueeze(0).to(torch.float32), - y=energy.unsqueeze(0).to(torch.float32), - ) - data = create_graph_fromXYZ(data) - data = compute_edge_lengths(data) - data.edge_attr = data.edge_attr.to(torch.float32) - # data = spherical_coordinates(data) - data = cartesian_coordinates(data) - - # maintain directionality - data.edge_index = data.edge_index[:, 0:6] - data.edge_attr = data.edge_attr[0:6, :] - - return data - - def len(self): - return len(self.dataset) - - def get(self, idx): - return self.dataset[idx] - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - formatter_class=argparse.ArgumentDefaultsHelpFormatter - ) - parser.add_argument("--sampling", type=float, help="sampling ratio", default=None) - parser.add_argument( - "--preonly", - action="store_true", - help="preprocess only (no training)", - ) - parser.add_argument( - "--inputfile", help="input file", type=str, default="LJ_vlad_total_energy.json" - ) - parser.add_argument("--mae", action="store_true", help="do mae calculation") - parser.add_argument("--ddstore", action="store_true", help="ddstore dataset") - parser.add_argument("--ddstore_width", type=int, help="ddstore width", default=None) - parser.add_argument("--shmem", action="store_true", help="shmem") - parser.add_argument("--log", help="log name") - parser.add_argument("--batch_size", type=int, help="batch_size", default=None) - parser.add_argument("--everyone", action="store_true", help="gptimer") - - 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="adios") - args = parser.parse_args() - - graph_feature_names = ["energy"] - graph_feature_dims = [1] - node_feature_names = ["atomic_number"] - node_feature_dims = [1] - dirpwd = os.path.dirname(os.path.abspath(__file__)) - datadir = os.path.join(dirpwd, "dataset/data") - ################################################################################################################## - input_filename = os.path.join(dirpwd, args.inputfile) - ################################################################################################################## - # Configurable run choices (JSON file that accompanies this example script). - with open(input_filename, "r") as f: - config = json.load(f) - verbosity = config["Verbosity"]["level"] - config["NeuralNetwork"]["Variables_of_interest"][ - "graph_feature_names" - ] = graph_feature_names - config["NeuralNetwork"]["Variables_of_interest"][ - "graph_feature_dims" - ] = graph_feature_dims - config["NeuralNetwork"]["Variables_of_interest"][ - "node_feature_names" - ] = node_feature_names - config["NeuralNetwork"]["Variables_of_interest"][ - "node_feature_dims" - ] = node_feature_dims - - if args.batch_size is not None: - config["NeuralNetwork"]["Training"]["batch_size"] = args.batch_size - - ################################################################################################################## - # Always initialize for multi-rank training. - comm_size, rank = hydragnn.utils.setup_ddp() - ################################################################################################################## - - comm = MPI.COMM_WORLD - - ## Set up logging - logging.basicConfig( - level=logging.INFO, - format="%%(levelname)s (rank %d): %%(message)s" % (rank), - datefmt="%H:%M:%S", - ) - - log_name = "LJ" if args.log is None else args.log - hydragnn.utils.setup_log(log_name) - writer = hydragnn.utils.get_summary_writer(log_name) - - log("Command: {0}\n".format(" ".join([x for x in sys.argv])), rank=0) - - modelname = "LJ" - if args.preonly: - - ## local data - total = LJDataset_VladTest( - os.path.join(datadir), - dist=True, - ) - ## This is a local split - trainset, valset, testset = split_dataset( - dataset=total, - perc_train=0.9, - stratify_splitting=False, - ) - print("Local splitting: ", len(total), len(trainset), len(valset), len(testset)) - - deg = gather_deg(trainset) - config["pna_deg"] = deg - - setnames = ["trainset", "valset", "testset"] - - if args.format == "pickle": - - ## 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, - ) - - if args.format == "adios": - ## 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() - - sys.exit(0) - - tr.initialize() - tr.disable() - timer = Timer("load_data") - timer.start() - if args.format == "adios": - info("Adios load") - assert not (args.shmem and args.ddstore), "Cannot use both ddstore and shmem" - opt = { - "preload": False, - "shmem": args.shmem, - "ddstore": args.ddstore, - "ddstore_width": args.ddstore_width, - } - fname = os.path.join(os.path.dirname(__file__), "./dataset/%s.bp" % modelname) - trainset = AdiosDataset(fname, "trainset", comm, **opt) - valset = AdiosDataset(fname, "valset", comm, **opt) - testset = AdiosDataset(fname, "testset", comm, **opt) - elif args.format == "pickle": - info("Pickle load") - basedir = os.path.join( - os.path.dirname(__file__), "dataset", "%s.pickle" % modelname - ) - var_config = config["NeuralNetwork"]["Variables_of_interest"] - trainset = SimplePickleDataset( - basedir=basedir, label="trainset", preload=True, var_config=var_config - ) - valset = SimplePickleDataset( - basedir=basedir, label="valset", var_config=var_config - ) - testset = SimplePickleDataset( - basedir=basedir, label="testset", var_config=var_config - ) - # minmax_node_feature = trainset.minmax_node_feature - # minmax_graph_feature = trainset.minmax_graph_feature - pna_deg = trainset.pna_deg - if args.ddstore: - opt = {"ddstore_width": args.ddstore_width} - trainset = DistDataset(trainset, "trainset", comm, **opt) - valset = DistDataset(valset, "valset", comm, **opt) - testset = DistDataset(testset, "testset", comm, **opt) - # trainset.minmax_node_feature = minmax_node_feature - # trainset.minmax_graph_feature = minmax_graph_feature - trainset.pna_deg = pna_deg - else: - raise NotImplementedError("No supported format: %s" % (args.format)) - - info( - "trainset,valset,testset size: %d %d %d" - % (len(trainset), len(valset), len(testset)) - ) - - if args.ddstore: - os.environ["HYDRAGNN_AGGR_BACKEND"] = "mpi" - os.environ["HYDRAGNN_USE_ddstore"] = "1" - - (train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( - trainset, valset, testset, config["NeuralNetwork"]["Training"]["batch_size"] - ) - - config = hydragnn.utils.update_config(config, train_loader, val_loader, test_loader) - ## Good to sync with everyone right after DDStore setup - comm.Barrier() - - hydragnn.utils.save_config(config, log_name) - - timer.stop() - - model = hydragnn.models.create_model_config( - config=config["NeuralNetwork"], - verbosity=verbosity, - ) - model = hydragnn.utils.get_distributed_model(model, verbosity) - - learning_rate = config["NeuralNetwork"]["Training"]["Optimizer"]["learning_rate"] - optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate) - scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau( - optimizer, mode="min", factor=0.5, patience=5, min_lr=0.00001 - ) - - hydragnn.utils.load_existing_model_config( - model, config["NeuralNetwork"]["Training"], optimizer=optimizer - ) - - ################################################################################################################## - - hydragnn.train.train_validate_test( - model, - optimizer, - train_loader, - val_loader, - test_loader, - writer, - scheduler, - config["NeuralNetwork"], - log_name, - verbosity, - create_plots=False, - ) - - hydragnn.utils.save_model(model, optimizer, log_name) - hydragnn.utils.print_timers(verbosity) - - if tr.has("GPTLTracer"): - import gptl4py as gp - - eligible = rank if args.everyone else 0 - if rank == eligible: - gp.pr_file(os.path.join("logs", log_name, "gp_timing.p%d" % rank)) - gp.pr_summary_file(os.path.join("logs", log_name, "gp_timing.summary")) - gp.finalize() - sys.exit(0) diff --git a/examples/qm9/qm9.py b/examples/qm9/qm9.py index 2e6c3da8e..04492b25f 100644 --- a/examples/qm9/qm9.py +++ b/examples/qm9/qm9.py @@ -16,6 +16,7 @@ import hydragnn + # Update each sample prior to loading. def qm9_pre_transform(data): # Set descriptor as element type. @@ -60,10 +61,21 @@ def qm9_pre_filter(data): dataset = torch_geometric.datasets.QM9( root="dataset/qm9", pre_transform=qm9_pre_transform, pre_filter=qm9_pre_filter ) +# Check for dataset filepath +datadir = os.path.join(os.getcwd(), "dataset/qm9") +if os.exists(datadir): + print("----------------------------DATASET FOUND----------------------------") +else: + print("----------------------------DATASET NOT FOUND----------------------------") + raise FileNotFoundError train, val, test = hydragnn.preprocess.split_dataset( dataset, config["NeuralNetwork"]["Training"]["perc_train"], False ) -(train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( +( + train_loader, + val_loader, + test_loader, +) = hydragnn.preprocess.create_dataloaders( train, val, test, config["NeuralNetwork"]["Training"]["batch_size"] ) diff --git a/tests/test_graphs.py b/tests/test_graphs.py index e2b36be60..dac8ab294 100755 --- a/tests/test_graphs.py +++ b/tests/test_graphs.py @@ -1,224 +1,224 @@ -############################################################################## -# Copyright (c) 2021, Oak Ridge National Laboratory # -# All rights reserved. # -# # -# This file is part of HydraGNN and is distributed under a BSD 3-clause # -# license. For the licensing terms see the LICENSE file in the top-level # -# directory. # -# # -# SPDX-License-Identifier: BSD-3-Clause # -############################################################################## - -import sys, os, json -import pytest - -import torch - -torch.manual_seed(97) -import shutil - -import hydragnn, tests -from hydragnn.utils.config_utils import merge_config - - -# Main unit test function called by pytest wrappers. -def unittest_train_model( - model_type, - ci_input, - use_lengths, - overwrite_data=False, - use_deepspeed=False, - overwrite_config=None, -): - world_size, rank = hydragnn.utils.get_comm_size_and_rank() - - os.environ["SERIALIZED_DATA_PATH"] = os.getcwd() - - # Read in config settings and override model type. - config_file = os.path.join(os.getcwd(), "tests/inputs", ci_input) - with open(config_file, "r") as f: - config = json.load(f) - config["NeuralNetwork"]["Architecture"]["model_type"] = model_type - - # Overwrite config settings if provided - if overwrite_config: - config = merge_config(config, overwrite_config) - - """ - to test this locally, set ci.json as - "Dataset": { - ... - "path": { - "train": "serialized_dataset/unit_test_singlehead_train.pkl", - "test": "serialized_dataset/unit_test_singlehead_test.pkl", - "validate": "serialized_dataset/unit_test_singlehead_validate.pkl"} - ... - """ - # use pkl files if exist by default - for dataset_name in config["Dataset"]["path"].keys(): - if dataset_name == "total": - pkl_file = ( - os.environ["SERIALIZED_DATA_PATH"] - + "/serialized_dataset/" - + config["Dataset"]["name"] - + ".pkl" - ) - else: - pkl_file = ( - os.environ["SERIALIZED_DATA_PATH"] - + "/serialized_dataset/" - + config["Dataset"]["name"] - + "_" - + dataset_name - + ".pkl" - ) - if os.path.exists(pkl_file): - config["Dataset"]["path"][dataset_name] = pkl_file - - # In the unit test runs, it is found MFC favors graph-level features over node-level features, compared with other models; - # hence here we decrease the loss weight coefficient for graph-level head in MFC. - if model_type == "MFC" and ci_input == "ci_multihead.json": - config["NeuralNetwork"]["Architecture"]["task_weights"][0] = 2 - - # Only run with edge lengths for models that support them. - if use_lengths: - config["NeuralNetwork"]["Architecture"]["edge_features"] = ["lengths"] - - if rank == 0: - num_samples_tot = 500 - # check if serialized pickle files or folders for raw files provided - pkl_input = False - if list(config["Dataset"]["path"].values())[0].endswith(".pkl"): - pkl_input = True - # only generate new datasets, if not pkl - if not pkl_input: - for dataset_name, data_path in config["Dataset"]["path"].items(): - if overwrite_data: - shutil.rmtree(data_path) - if not os.path.exists(data_path): - os.makedirs(data_path) - if dataset_name == "total": - num_samples = num_samples_tot - elif dataset_name == "train": - num_samples = int( - num_samples_tot - * config["NeuralNetwork"]["Training"]["perc_train"] - ) - elif dataset_name == "test": - num_samples = int( - num_samples_tot - * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) - * 0.5 - ) - elif dataset_name == "validate": - num_samples = int( - num_samples_tot - * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) - * 0.5 - ) - if not os.listdir(data_path): - tests.deterministic_graph_data( - data_path, number_configurations=num_samples - ) - - # Since the config file uses PNA already, test the file overload here. - # All the other models need to use the locally modified dictionary. - if model_type == "PNA" and not use_lengths: - hydragnn.run_training(config_file, use_deepspeed) - else: - hydragnn.run_training(config, use_deepspeed) - - ( - error, - error_mse_task, - true_values, - predicted_values, - ) = hydragnn.run_prediction(config, use_deepspeed) - - # Set RMSE and sample MAE error thresholds - thresholds = { - "SAGE": [0.20, 0.20], - "PNA": [0.20, 0.20], - "MFC": [0.20, 0.20], - "GIN": [0.25, 0.20], - "GAT": [0.60, 0.70], - "CGCNN": [0.50, 0.40], - "SchNet": [0.20, 0.20], - "DimeNet": [0.50, 0.50], - "EGNN": [0.20, 0.20], - } - if use_lengths and ("vector" not in ci_input): - thresholds["CGCNN"] = [0.175, 0.175] - thresholds["PNA"] = [0.10, 0.10] - if use_lengths and "vector" in ci_input: - thresholds["PNA"] = [0.2, 0.15] - if ci_input == "ci_conv_head.json": - thresholds["GIN"] = [0.25, 0.40] - - verbosity = 2 - - for ihead in range(len(true_values)): - error_head_mse = error_mse_task[ihead] - error_str = ( - str("{:.6f}".format(error_head_mse)) - + " < " - + str(thresholds[model_type][0]) - ) - hydragnn.utils.print_distributed(verbosity, "head: " + error_str) - assert ( - error_head_mse < thresholds[model_type][0] - ), "Head RMSE checking failed for " + str(ihead) - - head_true = true_values[ihead] - head_pred = predicted_values[ihead] - # Check individual samples - mae = torch.nn.L1Loss() - sample_mean_abs_error = mae(head_true, head_pred) - error_str = ( - "{:.6f}".format(sample_mean_abs_error) - + " < " - + str(thresholds[model_type][1]) - ) - assert ( - sample_mean_abs_error < thresholds[model_type][1] - ), "MAE sample checking failed!" - - # Check RMSE error - error_str = str("{:.6f}".format(error)) + " < " + str(thresholds[model_type][0]) - hydragnn.utils.print_distributed(verbosity, "total: " + error_str) - assert error < thresholds[model_type][0], "Total RMSE checking failed!" + str(error) - - -# Test across all models with both single/multihead -@pytest.mark.parametrize( - "model_type", - ["SAGE", "GIN", "GAT", "MFC", "PNA", "CGCNN", "SchNet", "DimeNet", "EGNN"], -) -@pytest.mark.parametrize("ci_input", ["ci.json", "ci_multihead.json"]) -def pytest_train_model(model_type, ci_input, overwrite_data=False): - unittest_train_model(model_type, ci_input, False, overwrite_data) - - -# Test only models -@pytest.mark.parametrize("model_type", ["PNA", "CGCNN", "SchNet", "EGNN"]) -def pytest_train_model_lengths(model_type, overwrite_data=False): - unittest_train_model(model_type, "ci.json", True, overwrite_data) - - -# Test across equivariant models -@pytest.mark.parametrize("model_type", ["EGNN", "SchNet"]) -def pytest_train_equivariant_model(model_type, overwrite_data=False): - unittest_train_model(model_type, "ci_equivariant.json", False, overwrite_data) - - -# Test vector output -@pytest.mark.parametrize("model_type", ["PNA"]) -def pytest_train_model_vectoroutput(model_type, overwrite_data=False): - unittest_train_model(model_type, "ci_vectoroutput.json", True, overwrite_data) - - -@pytest.mark.parametrize( - "model_type", ["SAGE", "GIN", "GAT", "MFC", "PNA", "SchNet", "DimeNet", "EGNN"] -) -def pytest_train_model_conv_head(model_type, overwrite_data=False): - unittest_train_model(model_type, "ci_conv_head.json", False, overwrite_data) +# ############################################################################## +# # Copyright (c) 2021, Oak Ridge National Laboratory # +# # All rights reserved. # +# # # +# # This file is part of HydraGNN and is distributed under a BSD 3-clause # +# # license. For the licensing terms see the LICENSE file in the top-level # +# # directory. # +# # # +# # SPDX-License-Identifier: BSD-3-Clause # +# ############################################################################## + +# import sys, os, json +# import pytest + +# import torch + +# torch.manual_seed(97) +# import shutil + +# import hydragnn, tests +# from hydragnn.utils.config_utils import merge_config + + +# # Main unit test function called by pytest wrappers. +# def unittest_train_model( +# model_type, +# ci_input, +# use_lengths, +# overwrite_data=False, +# use_deepspeed=False, +# overwrite_config=None, +# ): +# world_size, rank = hydragnn.utils.get_comm_size_and_rank() + +# os.environ["SERIALIZED_DATA_PATH"] = os.getcwd() + +# # Read in config settings and override model type. +# config_file = os.path.join(os.getcwd(), "tests/inputs", ci_input) +# with open(config_file, "r") as f: +# config = json.load(f) +# config["NeuralNetwork"]["Architecture"]["model_type"] = model_type + +# # Overwrite config settings if provided +# if overwrite_config: +# config = merge_config(config, overwrite_config) + +# """ +# to test this locally, set ci.json as +# "Dataset": { +# ... +# "path": { +# "train": "serialized_dataset/unit_test_singlehead_train.pkl", +# "test": "serialized_dataset/unit_test_singlehead_test.pkl", +# "validate": "serialized_dataset/unit_test_singlehead_validate.pkl"} +# ... +# """ +# # use pkl files if exist by default +# for dataset_name in config["Dataset"]["path"].keys(): +# if dataset_name == "total": +# pkl_file = ( +# os.environ["SERIALIZED_DATA_PATH"] +# + "/serialized_dataset/" +# + config["Dataset"]["name"] +# + ".pkl" +# ) +# else: +# pkl_file = ( +# os.environ["SERIALIZED_DATA_PATH"] +# + "/serialized_dataset/" +# + config["Dataset"]["name"] +# + "_" +# + dataset_name +# + ".pkl" +# ) +# if os.path.exists(pkl_file): +# config["Dataset"]["path"][dataset_name] = pkl_file + +# # In the unit test runs, it is found MFC favors graph-level features over node-level features, compared with other models; +# # hence here we decrease the loss weight coefficient for graph-level head in MFC. +# if model_type == "MFC" and ci_input == "ci_multihead.json": +# config["NeuralNetwork"]["Architecture"]["task_weights"][0] = 2 + +# # Only run with edge lengths for models that support them. +# if use_lengths: +# config["NeuralNetwork"]["Architecture"]["edge_features"] = ["lengths"] + +# if rank == 0: +# num_samples_tot = 500 +# # check if serialized pickle files or folders for raw files provided +# pkl_input = False +# if list(config["Dataset"]["path"].values())[0].endswith(".pkl"): +# pkl_input = True +# # only generate new datasets, if not pkl +# if not pkl_input: +# for dataset_name, data_path in config["Dataset"]["path"].items(): +# if overwrite_data: +# shutil.rmtree(data_path) +# if not os.path.exists(data_path): +# os.makedirs(data_path) +# if dataset_name == "total": +# num_samples = num_samples_tot +# elif dataset_name == "train": +# num_samples = int( +# num_samples_tot +# * config["NeuralNetwork"]["Training"]["perc_train"] +# ) +# elif dataset_name == "test": +# num_samples = int( +# num_samples_tot +# * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) +# * 0.5 +# ) +# elif dataset_name == "validate": +# num_samples = int( +# num_samples_tot +# * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) +# * 0.5 +# ) +# if not os.listdir(data_path): +# tests.deterministic_graph_data( +# data_path, number_configurations=num_samples +# ) + +# # Since the config file uses PNA already, test the file overload here. +# # All the other models need to use the locally modified dictionary. +# if model_type == "PNA" and not use_lengths: +# hydragnn.run_training(config_file, use_deepspeed) +# else: +# hydragnn.run_training(config, use_deepspeed) + +# ( +# error, +# error_mse_task, +# true_values, +# predicted_values, +# ) = hydragnn.run_prediction(config, use_deepspeed) + +# # Set RMSE and sample MAE error thresholds +# thresholds = { +# "SAGE": [0.20, 0.20], +# "PNA": [0.20, 0.20], +# "MFC": [0.20, 0.20], +# "GIN": [0.25, 0.20], +# "GAT": [0.60, 0.70], +# "CGCNN": [0.50, 0.40], +# "SchNet": [0.20, 0.20], +# "DimeNet": [0.50, 0.50], +# "EGNN": [0.20, 0.20], +# } +# if use_lengths and ("vector" not in ci_input): +# thresholds["CGCNN"] = [0.175, 0.175] +# thresholds["PNA"] = [0.10, 0.10] +# if use_lengths and "vector" in ci_input: +# thresholds["PNA"] = [0.2, 0.15] +# if ci_input == "ci_conv_head.json": +# thresholds["GIN"] = [0.25, 0.40] + +# verbosity = 2 + +# for ihead in range(len(true_values)): +# error_head_mse = error_mse_task[ihead] +# error_str = ( +# str("{:.6f}".format(error_head_mse)) +# + " < " +# + str(thresholds[model_type][0]) +# ) +# hydragnn.utils.print_distributed(verbosity, "head: " + error_str) +# assert ( +# error_head_mse < thresholds[model_type][0] +# ), "Head RMSE checking failed for " + str(ihead) + +# head_true = true_values[ihead] +# head_pred = predicted_values[ihead] +# # Check individual samples +# mae = torch.nn.L1Loss() +# sample_mean_abs_error = mae(head_true, head_pred) +# error_str = ( +# "{:.6f}".format(sample_mean_abs_error) +# + " < " +# + str(thresholds[model_type][1]) +# ) +# assert ( +# sample_mean_abs_error < thresholds[model_type][1] +# ), "MAE sample checking failed!" + +# # Check RMSE error +# error_str = str("{:.6f}".format(error)) + " < " + str(thresholds[model_type][0]) +# hydragnn.utils.print_distributed(verbosity, "total: " + error_str) +# assert error < thresholds[model_type][0], "Total RMSE checking failed!" + str(error) + + +# # Test across all models with both single/multihead +# @pytest.mark.parametrize( +# "model_type", +# ["SAGE", "GIN", "GAT", "MFC", "PNA", "CGCNN", "SchNet", "DimeNet", "EGNN"], +# ) +# @pytest.mark.parametrize("ci_input", ["ci.json", "ci_multihead.json"]) +# def pytest_train_model(model_type, ci_input, overwrite_data=False): +# unittest_train_model(model_type, ci_input, False, overwrite_data) + + +# # Test only models +# @pytest.mark.parametrize("model_type", ["PNA", "CGCNN", "SchNet", "EGNN"]) +# def pytest_train_model_lengths(model_type, overwrite_data=False): +# unittest_train_model(model_type, "ci.json", True, overwrite_data) + + +# # Test across equivariant models +# @pytest.mark.parametrize("model_type", ["EGNN", "SchNet"]) +# def pytest_train_equivariant_model(model_type, overwrite_data=False): +# unittest_train_model(model_type, "ci_equivariant.json", False, overwrite_data) + + +# # Test vector output +# @pytest.mark.parametrize("model_type", ["PNA"]) +# def pytest_train_model_vectoroutput(model_type, overwrite_data=False): +# unittest_train_model(model_type, "ci_vectoroutput.json", True, overwrite_data) + + +# @pytest.mark.parametrize( +# "model_type", ["SAGE", "GIN", "GAT", "MFC", "PNA", "SchNet", "DimeNet", "EGNN"] +# ) +# def pytest_train_model_conv_head(model_type, overwrite_data=False): +# unittest_train_model(model_type, "ci_conv_head.json", False, overwrite_data) From 2da742e3329f1cf180477222cfc392797191bf4c Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 10:03:05 -0400 Subject: [PATCH 20/37] unnecessary import --- hydragnn/models/DIMEStack.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydragnn/models/DIMEStack.py b/hydragnn/models/DIMEStack.py index fcaafb153..1949d3406 100644 --- a/hydragnn/models/DIMEStack.py +++ b/hydragnn/models/DIMEStack.py @@ -14,7 +14,7 @@ import torch from torch import Tensor -from torch.nn import Identity, SiLU, Sigmoid +from torch.nn import Identity, SiLU from torch_geometric.nn import Linear, Sequential from torch_geometric.nn.models.dimenet import ( From 70206dc500692aff83d534ab1265d7a8d8302adf Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 10:04:22 -0400 Subject: [PATCH 21/37] file cleanup --- examples/LennardJones/README.md | 92 --------------------------------- examples/qm9/qm9.py | 1 - 2 files changed, 93 deletions(-) delete mode 100644 examples/LennardJones/README.md diff --git a/examples/LennardJones/README.md b/examples/LennardJones/README.md deleted file mode 100644 index 0c4bda202..000000000 --- a/examples/LennardJones/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# PyTorch_Interatomic_Potentials - - - -## Getting started - -To make it easy for you to get started with GitLab, here's a list of recommended next steps. - -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! - -## Add your files - -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: - -``` -cd existing_repo -git remote add origin https://code.ornl.gov/aisd/pytorch_interatomic_potentials.git -git branch -M main -git push -uf origin main -``` - -## Integrate with your tools - -- [ ] [Set up project integrations](https://code.ornl.gov/aisd/pytorch_interatomic_potentials/-/settings/integrations) - -## Collaborate with your team - -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) - -## Test and Deploy - -Use the built-in continuous integration in GitLab. - -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) - -*** - -# Editing this README - -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. - -## Suggestions for a good README -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name -Choose a self-explaining name for your project. - -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. - -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. - -## License -For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. diff --git a/examples/qm9/qm9.py b/examples/qm9/qm9.py index 04492b25f..73a9b7417 100644 --- a/examples/qm9/qm9.py +++ b/examples/qm9/qm9.py @@ -16,7 +16,6 @@ import hydragnn - # Update each sample prior to loading. def qm9_pre_transform(data): # Set descriptor as element type. From 7032acd3f9b052999cbe874e3b71d2cfef5a087c Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 10:05:27 -0400 Subject: [PATCH 22/37] add some tests back in --- tests/test_graphs.py | 386 +++++++++++++++++++++---------------------- 1 file changed, 193 insertions(+), 193 deletions(-) diff --git a/tests/test_graphs.py b/tests/test_graphs.py index dac8ab294..f2b8484c3 100755 --- a/tests/test_graphs.py +++ b/tests/test_graphs.py @@ -1,192 +1,192 @@ -# ############################################################################## -# # Copyright (c) 2021, Oak Ridge National Laboratory # -# # All rights reserved. # -# # # -# # This file is part of HydraGNN and is distributed under a BSD 3-clause # -# # license. For the licensing terms see the LICENSE file in the top-level # -# # directory. # -# # # -# # SPDX-License-Identifier: BSD-3-Clause # -# ############################################################################## - -# import sys, os, json -# import pytest - -# import torch - -# torch.manual_seed(97) -# import shutil - -# import hydragnn, tests -# from hydragnn.utils.config_utils import merge_config - - -# # Main unit test function called by pytest wrappers. -# def unittest_train_model( -# model_type, -# ci_input, -# use_lengths, -# overwrite_data=False, -# use_deepspeed=False, -# overwrite_config=None, -# ): -# world_size, rank = hydragnn.utils.get_comm_size_and_rank() - -# os.environ["SERIALIZED_DATA_PATH"] = os.getcwd() - -# # Read in config settings and override model type. -# config_file = os.path.join(os.getcwd(), "tests/inputs", ci_input) -# with open(config_file, "r") as f: -# config = json.load(f) -# config["NeuralNetwork"]["Architecture"]["model_type"] = model_type - -# # Overwrite config settings if provided -# if overwrite_config: -# config = merge_config(config, overwrite_config) - -# """ -# to test this locally, set ci.json as -# "Dataset": { -# ... -# "path": { -# "train": "serialized_dataset/unit_test_singlehead_train.pkl", -# "test": "serialized_dataset/unit_test_singlehead_test.pkl", -# "validate": "serialized_dataset/unit_test_singlehead_validate.pkl"} -# ... -# """ -# # use pkl files if exist by default -# for dataset_name in config["Dataset"]["path"].keys(): -# if dataset_name == "total": -# pkl_file = ( -# os.environ["SERIALIZED_DATA_PATH"] -# + "/serialized_dataset/" -# + config["Dataset"]["name"] -# + ".pkl" -# ) -# else: -# pkl_file = ( -# os.environ["SERIALIZED_DATA_PATH"] -# + "/serialized_dataset/" -# + config["Dataset"]["name"] -# + "_" -# + dataset_name -# + ".pkl" -# ) -# if os.path.exists(pkl_file): -# config["Dataset"]["path"][dataset_name] = pkl_file - -# # In the unit test runs, it is found MFC favors graph-level features over node-level features, compared with other models; -# # hence here we decrease the loss weight coefficient for graph-level head in MFC. -# if model_type == "MFC" and ci_input == "ci_multihead.json": -# config["NeuralNetwork"]["Architecture"]["task_weights"][0] = 2 - -# # Only run with edge lengths for models that support them. -# if use_lengths: -# config["NeuralNetwork"]["Architecture"]["edge_features"] = ["lengths"] - -# if rank == 0: -# num_samples_tot = 500 -# # check if serialized pickle files or folders for raw files provided -# pkl_input = False -# if list(config["Dataset"]["path"].values())[0].endswith(".pkl"): -# pkl_input = True -# # only generate new datasets, if not pkl -# if not pkl_input: -# for dataset_name, data_path in config["Dataset"]["path"].items(): -# if overwrite_data: -# shutil.rmtree(data_path) -# if not os.path.exists(data_path): -# os.makedirs(data_path) -# if dataset_name == "total": -# num_samples = num_samples_tot -# elif dataset_name == "train": -# num_samples = int( -# num_samples_tot -# * config["NeuralNetwork"]["Training"]["perc_train"] -# ) -# elif dataset_name == "test": -# num_samples = int( -# num_samples_tot -# * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) -# * 0.5 -# ) -# elif dataset_name == "validate": -# num_samples = int( -# num_samples_tot -# * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) -# * 0.5 -# ) -# if not os.listdir(data_path): -# tests.deterministic_graph_data( -# data_path, number_configurations=num_samples -# ) - -# # Since the config file uses PNA already, test the file overload here. -# # All the other models need to use the locally modified dictionary. -# if model_type == "PNA" and not use_lengths: -# hydragnn.run_training(config_file, use_deepspeed) -# else: -# hydragnn.run_training(config, use_deepspeed) - -# ( -# error, -# error_mse_task, -# true_values, -# predicted_values, -# ) = hydragnn.run_prediction(config, use_deepspeed) - -# # Set RMSE and sample MAE error thresholds -# thresholds = { -# "SAGE": [0.20, 0.20], -# "PNA": [0.20, 0.20], -# "MFC": [0.20, 0.20], -# "GIN": [0.25, 0.20], -# "GAT": [0.60, 0.70], -# "CGCNN": [0.50, 0.40], -# "SchNet": [0.20, 0.20], -# "DimeNet": [0.50, 0.50], -# "EGNN": [0.20, 0.20], -# } -# if use_lengths and ("vector" not in ci_input): -# thresholds["CGCNN"] = [0.175, 0.175] -# thresholds["PNA"] = [0.10, 0.10] -# if use_lengths and "vector" in ci_input: -# thresholds["PNA"] = [0.2, 0.15] -# if ci_input == "ci_conv_head.json": -# thresholds["GIN"] = [0.25, 0.40] - -# verbosity = 2 - -# for ihead in range(len(true_values)): -# error_head_mse = error_mse_task[ihead] -# error_str = ( -# str("{:.6f}".format(error_head_mse)) -# + " < " -# + str(thresholds[model_type][0]) -# ) -# hydragnn.utils.print_distributed(verbosity, "head: " + error_str) -# assert ( -# error_head_mse < thresholds[model_type][0] -# ), "Head RMSE checking failed for " + str(ihead) - -# head_true = true_values[ihead] -# head_pred = predicted_values[ihead] -# # Check individual samples -# mae = torch.nn.L1Loss() -# sample_mean_abs_error = mae(head_true, head_pred) -# error_str = ( -# "{:.6f}".format(sample_mean_abs_error) -# + " < " -# + str(thresholds[model_type][1]) -# ) -# assert ( -# sample_mean_abs_error < thresholds[model_type][1] -# ), "MAE sample checking failed!" - -# # Check RMSE error -# error_str = str("{:.6f}".format(error)) + " < " + str(thresholds[model_type][0]) -# hydragnn.utils.print_distributed(verbosity, "total: " + error_str) -# assert error < thresholds[model_type][0], "Total RMSE checking failed!" + str(error) +############################################################################## +# Copyright (c) 2021, Oak Ridge National Laboratory # +# All rights reserved. # +# # +# This file is part of HydraGNN and is distributed under a BSD 3-clause # +# license. For the licensing terms see the LICENSE file in the top-level # +# directory. # +# # +# SPDX-License-Identifier: BSD-3-Clause # +############################################################################## + +import sys, os, json +import pytest + +import torch + +torch.manual_seed(97) +import shutil + +import hydragnn, tests +from hydragnn.utils.config_utils import merge_config + + +# Main unit test function called by pytest wrappers. +def unittest_train_model( + model_type, + ci_input, + use_lengths, + overwrite_data=False, + use_deepspeed=False, + overwrite_config=None, +): + world_size, rank = hydragnn.utils.get_comm_size_and_rank() + + os.environ["SERIALIZED_DATA_PATH"] = os.getcwd() + + # Read in config settings and override model type. + config_file = os.path.join(os.getcwd(), "tests/inputs", ci_input) + with open(config_file, "r") as f: + config = json.load(f) + config["NeuralNetwork"]["Architecture"]["model_type"] = model_type + + # Overwrite config settings if provided + if overwrite_config: + config = merge_config(config, overwrite_config) + + """ + to test this locally, set ci.json as + "Dataset": { + ... + "path": { + "train": "serialized_dataset/unit_test_singlehead_train.pkl", + "test": "serialized_dataset/unit_test_singlehead_test.pkl", + "validate": "serialized_dataset/unit_test_singlehead_validate.pkl"} + ... + """ + # use pkl files if exist by default + for dataset_name in config["Dataset"]["path"].keys(): + if dataset_name == "total": + pkl_file = ( + os.environ["SERIALIZED_DATA_PATH"] + + "/serialized_dataset/" + + config["Dataset"]["name"] + + ".pkl" + ) + else: + pkl_file = ( + os.environ["SERIALIZED_DATA_PATH"] + + "/serialized_dataset/" + + config["Dataset"]["name"] + + "_" + + dataset_name + + ".pkl" + ) + if os.path.exists(pkl_file): + config["Dataset"]["path"][dataset_name] = pkl_file + + # In the unit test runs, it is found MFC favors graph-level features over node-level features, compared with other models; + # hence here we decrease the loss weight coefficient for graph-level head in MFC. + if model_type == "MFC" and ci_input == "ci_multihead.json": + config["NeuralNetwork"]["Architecture"]["task_weights"][0] = 2 + + # Only run with edge lengths for models that support them. + if use_lengths: + config["NeuralNetwork"]["Architecture"]["edge_features"] = ["lengths"] + + if rank == 0: + num_samples_tot = 500 + # check if serialized pickle files or folders for raw files provided + pkl_input = False + if list(config["Dataset"]["path"].values())[0].endswith(".pkl"): + pkl_input = True + # only generate new datasets, if not pkl + if not pkl_input: + for dataset_name, data_path in config["Dataset"]["path"].items(): + if overwrite_data: + shutil.rmtree(data_path) + if not os.path.exists(data_path): + os.makedirs(data_path) + if dataset_name == "total": + num_samples = num_samples_tot + elif dataset_name == "train": + num_samples = int( + num_samples_tot + * config["NeuralNetwork"]["Training"]["perc_train"] + ) + elif dataset_name == "test": + num_samples = int( + num_samples_tot + * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) + * 0.5 + ) + elif dataset_name == "validate": + num_samples = int( + num_samples_tot + * (1 - config["NeuralNetwork"]["Training"]["perc_train"]) + * 0.5 + ) + if not os.listdir(data_path): + tests.deterministic_graph_data( + data_path, number_configurations=num_samples + ) + + # Since the config file uses PNA already, test the file overload here. + # All the other models need to use the locally modified dictionary. + if model_type == "PNA" and not use_lengths: + hydragnn.run_training(config_file, use_deepspeed) + else: + hydragnn.run_training(config, use_deepspeed) + + ( + error, + error_mse_task, + true_values, + predicted_values, + ) = hydragnn.run_prediction(config, use_deepspeed) + + # Set RMSE and sample MAE error thresholds + thresholds = { + "SAGE": [0.20, 0.20], + "PNA": [0.20, 0.20], + "MFC": [0.20, 0.20], + "GIN": [0.25, 0.20], + "GAT": [0.60, 0.70], + "CGCNN": [0.50, 0.40], + "SchNet": [0.20, 0.20], + "DimeNet": [0.50, 0.50], + "EGNN": [0.20, 0.20], + } + if use_lengths and ("vector" not in ci_input): + thresholds["CGCNN"] = [0.175, 0.175] + thresholds["PNA"] = [0.10, 0.10] + if use_lengths and "vector" in ci_input: + thresholds["PNA"] = [0.2, 0.15] + if ci_input == "ci_conv_head.json": + thresholds["GIN"] = [0.25, 0.40] + + verbosity = 2 + + for ihead in range(len(true_values)): + error_head_mse = error_mse_task[ihead] + error_str = ( + str("{:.6f}".format(error_head_mse)) + + " < " + + str(thresholds[model_type][0]) + ) + hydragnn.utils.print_distributed(verbosity, "head: " + error_str) + assert ( + error_head_mse < thresholds[model_type][0] + ), "Head RMSE checking failed for " + str(ihead) + + head_true = true_values[ihead] + head_pred = predicted_values[ihead] + # Check individual samples + mae = torch.nn.L1Loss() + sample_mean_abs_error = mae(head_true, head_pred) + error_str = ( + "{:.6f}".format(sample_mean_abs_error) + + " < " + + str(thresholds[model_type][1]) + ) + assert ( + sample_mean_abs_error < thresholds[model_type][1] + ), "MAE sample checking failed!" + + # Check RMSE error + error_str = str("{:.6f}".format(error)) + " < " + str(thresholds[model_type][0]) + hydragnn.utils.print_distributed(verbosity, "total: " + error_str) + assert error < thresholds[model_type][0], "Total RMSE checking failed!" + str(error) # # Test across all models with both single/multihead @@ -211,10 +211,10 @@ # unittest_train_model(model_type, "ci_equivariant.json", False, overwrite_data) -# # Test vector output -# @pytest.mark.parametrize("model_type", ["PNA"]) -# def pytest_train_model_vectoroutput(model_type, overwrite_data=False): -# unittest_train_model(model_type, "ci_vectoroutput.json", True, overwrite_data) +# Test vector output +@pytest.mark.parametrize("model_type", ["PNA"]) +def pytest_train_model_vectoroutput(model_type, overwrite_data=False): + unittest_train_model(model_type, "ci_vectoroutput.json", True, overwrite_data) # @pytest.mark.parametrize( From f98fb3ebf27dca96a04e9117d61815340e61382c Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 10:18:12 -0400 Subject: [PATCH 23/37] Restore all tests --- tests/test_graphs.py | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/tests/test_graphs.py b/tests/test_graphs.py index f2b8484c3..e2b36be60 100755 --- a/tests/test_graphs.py +++ b/tests/test_graphs.py @@ -189,26 +189,26 @@ def unittest_train_model( assert error < thresholds[model_type][0], "Total RMSE checking failed!" + str(error) -# # Test across all models with both single/multihead -# @pytest.mark.parametrize( -# "model_type", -# ["SAGE", "GIN", "GAT", "MFC", "PNA", "CGCNN", "SchNet", "DimeNet", "EGNN"], -# ) -# @pytest.mark.parametrize("ci_input", ["ci.json", "ci_multihead.json"]) -# def pytest_train_model(model_type, ci_input, overwrite_data=False): -# unittest_train_model(model_type, ci_input, False, overwrite_data) +# Test across all models with both single/multihead +@pytest.mark.parametrize( + "model_type", + ["SAGE", "GIN", "GAT", "MFC", "PNA", "CGCNN", "SchNet", "DimeNet", "EGNN"], +) +@pytest.mark.parametrize("ci_input", ["ci.json", "ci_multihead.json"]) +def pytest_train_model(model_type, ci_input, overwrite_data=False): + unittest_train_model(model_type, ci_input, False, overwrite_data) -# # Test only models -# @pytest.mark.parametrize("model_type", ["PNA", "CGCNN", "SchNet", "EGNN"]) -# def pytest_train_model_lengths(model_type, overwrite_data=False): -# unittest_train_model(model_type, "ci.json", True, overwrite_data) +# Test only models +@pytest.mark.parametrize("model_type", ["PNA", "CGCNN", "SchNet", "EGNN"]) +def pytest_train_model_lengths(model_type, overwrite_data=False): + unittest_train_model(model_type, "ci.json", True, overwrite_data) -# # Test across equivariant models -# @pytest.mark.parametrize("model_type", ["EGNN", "SchNet"]) -# def pytest_train_equivariant_model(model_type, overwrite_data=False): -# unittest_train_model(model_type, "ci_equivariant.json", False, overwrite_data) +# Test across equivariant models +@pytest.mark.parametrize("model_type", ["EGNN", "SchNet"]) +def pytest_train_equivariant_model(model_type, overwrite_data=False): + unittest_train_model(model_type, "ci_equivariant.json", False, overwrite_data) # Test vector output @@ -217,8 +217,8 @@ def pytest_train_model_vectoroutput(model_type, overwrite_data=False): unittest_train_model(model_type, "ci_vectoroutput.json", True, overwrite_data) -# @pytest.mark.parametrize( -# "model_type", ["SAGE", "GIN", "GAT", "MFC", "PNA", "SchNet", "DimeNet", "EGNN"] -# ) -# def pytest_train_model_conv_head(model_type, overwrite_data=False): -# unittest_train_model(model_type, "ci_conv_head.json", False, overwrite_data) +@pytest.mark.parametrize( + "model_type", ["SAGE", "GIN", "GAT", "MFC", "PNA", "SchNet", "DimeNet", "EGNN"] +) +def pytest_train_model_conv_head(model_type, overwrite_data=False): + unittest_train_model(model_type, "ci_conv_head.json", False, overwrite_data) From d66de163186dcf114b64ed9a3812d7923bc6d1f7 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 10:31:30 -0400 Subject: [PATCH 24/37] formatting --- examples/qm9/qm9.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/qm9/qm9.py b/examples/qm9/qm9.py index 73a9b7417..1594b1d0f 100644 --- a/examples/qm9/qm9.py +++ b/examples/qm9/qm9.py @@ -70,11 +70,7 @@ def qm9_pre_filter(data): train, val, test = hydragnn.preprocess.split_dataset( dataset, config["NeuralNetwork"]["Training"]["perc_train"], False ) -( - train_loader, - val_loader, - test_loader, -) = hydragnn.preprocess.create_dataloaders( +(train_loader, val_loader, test_loader,) = hydragnn.preprocess.create_dataloaders( train, val, test, config["NeuralNetwork"]["Training"]["batch_size"] ) From 206b52fde03e2adcfc443b6ed02b83c44559c342 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 11:25:10 -0400 Subject: [PATCH 25/37] check dataset things --- examples/LennardJones/LennardJones.py | 11 +++-------- examples/qm9/qm9.py | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index 2aa377ea9..c397d33e9 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -42,18 +42,13 @@ from AtomicStructure import AtomicStructureHandler -def create_dataset(config): +def create_dataset(path, config): # Angstrom unit primitive_bravais_lattice_constant_x = 3.8 primitive_bravais_lattice_constant_y = 3.8 primitive_bravais_lattice_constant_z = 3.8 - path = "./dataset/data" radius_cutoff = config["NeuralNetwork"]["Architecture"]["radius"] - number_configurations = ( - config["NeuralNetwork"]["Training"]["num_configurations"] - if "num_configurations" in config["NeuralNetwork"]["Training"] - else 1000 - ) + number_configurations = 1000 atom_types = [1] formula = LJpotential(1.0, 3.4) atomic_structure_handler = AtomicStructureHandler( @@ -298,7 +293,7 @@ def get(self, idx): if not dataset_exists: ## local data - create_dataset(config) + create_dataset(os.path.join(lookdir, 'data'), config) total = LJDataset( os.path.join(datadir), dist=True, diff --git a/examples/qm9/qm9.py b/examples/qm9/qm9.py index 1594b1d0f..76cec549c 100644 --- a/examples/qm9/qm9.py +++ b/examples/qm9/qm9.py @@ -62,7 +62,7 @@ def qm9_pre_filter(data): ) # Check for dataset filepath datadir = os.path.join(os.getcwd(), "dataset/qm9") -if os.exists(datadir): +if os.path.exists(datadir): print("----------------------------DATASET FOUND----------------------------") else: print("----------------------------DATASET NOT FOUND----------------------------") From 998083483e7496549a966be82788ecf7cfee3daf Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 11:28:16 -0400 Subject: [PATCH 26/37] formatting --- examples/LennardJones/LennardJones.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index c397d33e9..bb48fd842 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -293,7 +293,7 @@ def get(self, idx): if not dataset_exists: ## local data - create_dataset(os.path.join(lookdir, 'data'), config) + create_dataset(os.path.join(lookdir, "data"), config) total = LJDataset( os.path.join(datadir), dist=True, From fa10c20faafbc76440f0cf6b30c8926aa918819e Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 11:53:58 -0400 Subject: [PATCH 27/37] Revise paths to be more succinct and Use radius from config --- examples/LennardJones/LennardJones.py | 48 ++++++++----------- examples/LennardJones/configurational_data.py | 27 +---------- 2 files changed, 20 insertions(+), 55 deletions(-) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index bb48fd842..7e605529e 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -29,7 +29,7 @@ pass from torch_geometric.data import Data -from torch_geometric.transforms import RadiusGraph, Distance, Spherical, LocalCartesian +from torch_geometric.transforms import RadiusGraph, Distance, LocalCartesian import torch import torch.distributed as dist @@ -48,7 +48,7 @@ def create_dataset(path, config): primitive_bravais_lattice_constant_y = 3.8 primitive_bravais_lattice_constant_z = 3.8 radius_cutoff = config["NeuralNetwork"]["Architecture"]["radius"] - number_configurations = 1000 + number_configurations = config["Dataset"]["number_configurations"] if "number_configurations" in config["Dataset"] else 1000 atom_types = [1] formula = LJpotential(1.0, 3.4) atomic_structure_handler = AtomicStructureHandler( @@ -81,17 +81,11 @@ def info(*args, logtype="info", sep=" "): getattr(logging, logtype)(sep.join(map(str, args))) -# FIXME: this radis cutoff overwrites the radius cutoff currently written in the JSON file -create_graph_fromXYZ = RadiusGraph(r=5.0) # radius cutoff in angstrom -compute_edge_lengths = Distance(norm=False, cat=True) -spherical_coordinates = Spherical(norm=False, cat=False) -cartesian_coordinates = LocalCartesian(norm=False, cat=False) - class LJDataset(AbstractBaseDataset): """LJDataset dataset class""" - def __init__(self, dirpath, dist=False, sampling=None): + def __init__(self, dirpath, config, dist=False, sampling=None): super().__init__() self.dist = dist @@ -101,6 +95,11 @@ def __init__(self, dirpath, dist=False, sampling=None): assert torch.distributed.is_initialized() self.world_size = torch.distributed.get_world_size() self.rank = torch.distributed.get_rank() + + self.create_graph_fromXYZ = RadiusGraph(r=config["NeuralNetwork"]["Architecture"]["radius"]) # radius cutoff in angstrom + self.compute_edge_lengths = Distance(norm=False, cat=True) + # self.spherical_coordinates = Spherical(norm=False, cat=False) + self.cartesian_coordinates = LocalCartesian(norm=False, cat=False) dirfiles = sorted(os.listdir(dirpath)) @@ -180,11 +179,11 @@ def transform_input_to_data_object_base(self, filepath): .to(torch.float32), energy=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), ) - data = create_graph_fromXYZ(data) - data = compute_edge_lengths(data) + data = self.create_graph_fromXYZ(data) + data = self.compute_edge_lengths(data) data.edge_attr = data.edge_attr.to(torch.float32) - # data = spherical_coordinates(data) - data = cartesian_coordinates(data) + # data = self.spherical_coordinates(data) + data = self.cartesian_coordinates(data) return data @@ -237,7 +236,6 @@ def get(self, idx): node_feature_names = ["atomic_number", "potential", "forces"] node_feature_dims = [1, 1, 3] dirpwd = os.path.dirname(os.path.abspath(__file__)) - datadir = os.path.join(dirpwd, "dataset/data") ################################################################################################################## input_filename = os.path.join(dirpwd, args.inputfile) ################################################################################################################## @@ -283,19 +281,21 @@ def get(self, idx): modelname = "LJ" # Check for dataset for each format - lookdir = os.path.join(dirpwd, "dataset") if args.format == "pickle": - dataset_exists = os.path.exists(os.path.join(lookdir, "LJ.pickle")) + basedir = os.path.join(dirpwd, "dataset", "%s.pickle" % modelname) + dataset_exists = os.path.exists(os.path.join(dirpwd, "dataset/LJ.pickle")) if args.format == "adios": - dataset_exists = os.path.exists(os.path.join(lookdir, "%s.bp" % modelname)) + fname = os.path.join(dirpwd, "./dataset/%s.bp" % modelname) + dataset_exists = os.path.exists(os.path.join(dirpwd, "dataset", "%s.bp" % modelname)) # Create dataset if preonly specified or dataset does not exist if not dataset_exists: ## local data - create_dataset(os.path.join(lookdir, "data"), config) + create_dataset(os.path.join(dirpwd, "dataset/data"), config) total = LJDataset( - os.path.join(datadir), + os.path.join(dirpwd, "dataset"), + config, dist=True, ) ## This is a local split @@ -314,9 +314,6 @@ def get(self, idx): if args.format == "pickle": ## pickle - basedir = os.path.join( - os.path.dirname(__file__), "dataset", "%s.pickle" % modelname - ) attrs = dict() attrs["pna_deg"] = deg SimplePickleWriter( @@ -347,9 +344,6 @@ def get(self, idx): if args.format == "adios": ## 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) @@ -372,15 +366,11 @@ def get(self, idx): "ddstore": args.ddstore, "ddstore_width": args.ddstore_width, } - fname = os.path.join(os.path.dirname(__file__), "./dataset/%s.bp" % modelname) trainset = AdiosDataset(fname, "trainset", comm, **opt) valset = AdiosDataset(fname, "valset", comm, **opt) testset = AdiosDataset(fname, "testset", comm, **opt) elif args.format == "pickle": info("Pickle load") - basedir = os.path.join( - os.path.dirname(__file__), "dataset", "%s.pickle" % modelname - ) var_config = config["NeuralNetwork"]["Variables_of_interest"] trainset = SimplePickleDataset( basedir=basedir, label="trainset", preload=True, var_config=var_config diff --git a/examples/LennardJones/configurational_data.py b/examples/LennardJones/configurational_data.py index 8ebb1d6f8..ec41f1a8a 100644 --- a/examples/LennardJones/configurational_data.py +++ b/examples/LennardJones/configurational_data.py @@ -212,29 +212,4 @@ def create_configuration( path, "output" + str(configuration + configuration_start) + ".txt" ) with open(filename, "w") as f: - f.write(filetxt) - - -if __name__ == "__main__": - path = "./data" - radius_cutoff = 5.0 - atom_types = [1] - formula = LJpotential(1.0, 3.4) - AtomicStructureHandler = AtomicStructureHandler( - atom_types, - [ - primitive_bravais_lattice_constant_x, - primitive_bravais_lattice_constant_y, - primitive_bravais_lattice_constant_z, - ], - radius_cutoff, - formula, - ) - deterministic_graph_data( - path, - atom_types, - atomic_structure_handler=AtomicStructureHandler, - radius_cutoff=radius_cutoff, - relative_maximum_atomic_displacement=1e-1, - number_configurations=1000, - ) + f.write(filetxt) \ No newline at end of file From 42551b827710211597f7cc7036d8b59efc805166 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 16:07:25 -0400 Subject: [PATCH 28/37] file restructuring and using hydra radius graph function --- examples/LennardJones/AtomicStructure.py | 83 --- examples/LennardJones/LJ.json | 2 +- examples/LennardJones/LJ_data.py | 494 ++++++++++++++++++ examples/LennardJones/LJpotential.py | 41 -- examples/LennardJones/LennardJones.py | 207 ++------ examples/LennardJones/configurational_data.py | 215 -------- examples/LennardJones/distributed_utils.py | 3 - examples/LennardJones/graph_utils.py | 56 -- 8 files changed, 525 insertions(+), 576 deletions(-) delete mode 100644 examples/LennardJones/AtomicStructure.py create mode 100644 examples/LennardJones/LJ_data.py delete mode 100644 examples/LennardJones/LJpotential.py delete mode 100644 examples/LennardJones/configurational_data.py delete mode 100644 examples/LennardJones/distributed_utils.py delete mode 100644 examples/LennardJones/graph_utils.py diff --git a/examples/LennardJones/AtomicStructure.py b/examples/LennardJones/AtomicStructure.py deleted file mode 100644 index b09500a7d..000000000 --- a/examples/LennardJones/AtomicStructure.py +++ /dev/null @@ -1,83 +0,0 @@ -import torch - - -class AtomicStructureHandler: - def __init__( - self, list_atom_types, bravais_lattice_constants, radius_cutoff, formula - ): - - self.bravais_lattice_constants = bravais_lattice_constants - self.radius_cutoff = radius_cutoff - self.formula = formula - - def compute(self, data): - - assert data.pos.shape[0] == data.x.shape[0] - - interatomic_potential = torch.zeros([data.pos.shape[0], 1]) - interatomic_forces = torch.zeros([data.pos.shape[0], 3]) - - for node_id in range(data.pos.shape[0]): - - neighbor_list_indices = torch.where(data.edge_index[0, :] == node_id)[ - 0 - ].tolist() - neighbor_list = data.edge_index[1, neighbor_list_indices] - - for neighbor_id, edge_id in zip(neighbor_list, neighbor_list_indices): - - neighbor_pos = data.pos[neighbor_id, :] - distance_vector = data.pos[neighbor_id, :] - data.pos[node_id, :] - - # Adjust the neighbor position based on periodic boundary conditions (PBC) - ## If the distance between the atoms is larger than the cutoff radius, the edge is because of PBC conditions - if torch.norm(distance_vector) > self.radius_cutoff: - ## At this point, we know that the edge is due to PBC conditions, so we need to adjust the neighbor position. We also know that - ## that this connection MUST be the closest connection possible as a result of the asserted radius_cutoff < supercell_size earlier - ## in the code. Because of this, we can simply adjust the neighbor position coordinate-wise to be closer than - ## as done in the following lines of code. The logic goes that if the distance vector[index] is larger than half the supercell size, - ## then there is a closer distance at +- supercell_size[index], and we adjust to that for each coordinate - if abs(distance_vector[0]) > data.supercell_size[0, 0] / 2: - if distance_vector[0] > 0: - neighbor_pos[0] -= data.supercell_size[0, 0] - else: - neighbor_pos[0] += data.supercell_size[0, 0] - - if abs(distance_vector[1]) > data.supercell_size[1, 1] / 2: - if distance_vector[1] > 0: - neighbor_pos[1] -= data.supercell_size[1, 1] - else: - neighbor_pos[1] += data.supercell_size[1, 1] - - if abs(distance_vector[2]) > data.supercell_size[2, 2] / 2: - if distance_vector[2] > 0: - neighbor_pos[2] -= data.supercell_size[2, 2] - else: - neighbor_pos[2] += data.supercell_size[2, 2] - - # The distance vecor may need to be updated after applying PBCs - distance_vector = data.pos[node_id, :] - neighbor_pos - - # pair_distance = data.edge_attr[edge_id].item() - interatomic_potential[node_id] += self.formula.potential_energy( - distance_vector - ) - - derivative_x = self.formula.derivative_x(distance_vector) - derivative_y = self.formula.derivative_y(distance_vector) - derivative_z = self.formula.derivative_z(distance_vector) - - interatomic_forces_contribution_x = -derivative_x - interatomic_forces_contribution_y = -derivative_y - interatomic_forces_contribution_z = -derivative_z - - interatomic_forces[node_id, 0] += interatomic_forces_contribution_x - interatomic_forces[node_id, 1] += interatomic_forces_contribution_y - interatomic_forces[node_id, 2] += interatomic_forces_contribution_z - - data.x = torch.cat( - (data.x, interatomic_potential, interatomic_forces), - 1, - ) - - return data diff --git a/examples/LennardJones/LJ.json b/examples/LennardJones/LJ.json index f11c66008..d26f2fdc9 100644 --- a/examples/LennardJones/LJ.json +++ b/examples/LennardJones/LJ.json @@ -56,7 +56,7 @@ "output_names": ["graph_energy"] }, "Training": { - "num_epoch": 25, + "num_epoch": 20, "batch_size": 64, "patience": 20, "early_stopping": true, diff --git a/examples/LennardJones/LJ_data.py b/examples/LennardJones/LJ_data.py new file mode 100644 index 000000000..9aa6b4964 --- /dev/null +++ b/examples/LennardJones/LJ_data.py @@ -0,0 +1,494 @@ +############################################################################## +# Copyright (c) 2024, Oak Ridge National Laboratory # +# All rights reserved. # +# # +# This file is part of HydraGNN and is distributed under a BSD 3-clause # +# license. For the licensing terms see the LICENSE file in the top-level # +# directory. # +# # +# SPDX-License-Identifier: BSD-3-Clause # +############################################################################## + +# General +import os +import logging +import numpy +numpy.set_printoptions(threshold=numpy.inf) +numpy.set_printoptions(linewidth=numpy.inf) + +# Torch +import torch +from torch_geometric.data import Data +# torch.set_default_tensor_type(torch.DoubleTensor) +# torch.set_default_dtype(torch.float64) + +# Distributed +import mpi4py +from mpi4py import MPI +mpi4py.rc.thread_level = "serialized" +mpi4py.rc.threads = False + +# HydraGNN +from hydragnn.utils.abstractrawdataset import AbstractBaseDataset +from hydragnn.utils import nsplit +from hydragnn.preprocess.utils import get_radius_graph_pbc + +# Angstrom unit +primitive_bravais_lattice_constant_x = 3.8 +primitive_bravais_lattice_constant_y = 3.8 +primitive_bravais_lattice_constant_z = 3.8 + + +################################################################################################################## + + +"""High-Level Function""" + +def create_dataset(path, config): + radius_cutoff = config["NeuralNetwork"]["Architecture"]["radius"] + number_configurations = config["Dataset"]["number_configurations"] if "number_configurations" in config["Dataset"] else 3000 + atom_types = [1] + formula = LJpotential(1.0, 3.4) + atomic_structure_handler = AtomicStructureHandler( + atom_types, + [ + primitive_bravais_lattice_constant_x, + primitive_bravais_lattice_constant_y, + primitive_bravais_lattice_constant_z, + ], + radius_cutoff, + formula, + ) + deterministic_graph_data( + path, + atom_types, + atomic_structure_handler=atomic_structure_handler, + radius_cutoff=radius_cutoff, + relative_maximum_atomic_displacement=1e-1, + number_configurations=number_configurations, + ) + + +"""Reading/Transforming Data""" + +class LJDataset(AbstractBaseDataset): + """LJDataset dataset class""" + + def __init__(self, dirpath, config, dist=False, sampling=None): + super().__init__() + + self.dist = dist + self.world_size = 1 + self.rank = 1 + if self.dist: + assert torch.distributed.is_initialized() + self.world_size = torch.distributed.get_world_size() + self.rank = torch.distributed.get_rank() + + self.radius = config["NeuralNetwork"]["Architecture"]["radius"] + self.max_neighbours = config["NeuralNetwork"]["Architecture"]["max_neighbours"] + + dirfiles = sorted(os.listdir(dirpath)) + + rx = list(nsplit((dirfiles), self.world_size))[self.rank] + + for file in rx: + filepath = os.path.join(dirpath, file) + self.dataset.append(self.transform_inumpyut_to_data_object_base(filepath)) + + def transform_inumpyut_to_data_object_base(self, filepath): + + # Using readline() + file = open(filepath, "r") + + torch_data = torch.empty((0, 8), dtype=torch.float32) + torch_supercell = torch.zeros((0, 3), dtype=torch.float32) + + count = 0 + + while True: + count += 1 + + # Get next line from file + line = file.readline() + + # if line is empty + # end of file is reached + if not line: + break + + if count == 1: + total_energy = float(line) + elif count == 2: + energy_per_atom = float(line) + elif 2 < count < 6: + array_line = numpy.fromstring(line, dtype=float, sep="\t") + torch_supercell = torch.cat( + [torch_supercell, torch.from_numpy(array_line).unsqueeze(0)], axis=0 + ) + elif count > 5: + array_line = numpy.fromstring(line, dtype=float, sep="\t") + torch_data = torch.cat( + [torch_data, torch.from_numpy(array_line).unsqueeze(0)], axis=0 + ) + # print("Line{}: {}".format(count, line.strip())) + + file.close() + + num_nodes = torch_data.shape[0] + + energy_pre_translation_factor = 0.0 + energy_pre_scaling_factor = 1.0 / num_nodes + energy_per_atom_pretransformed = ( + energy_per_atom - energy_pre_translation_factor + ) * energy_pre_scaling_factor + grad_energy_post_scaling_factor = ( + 1.0 / energy_pre_scaling_factor * torch.ones(num_nodes, 1) + ) + forces = torch_data[:, [5, 6, 7]] + forces_pre_scaling_factor = 1.0 + forces_pre_scaled = forces * forces_pre_scaling_factor + + data = Data( + supercell_size=torch_supercell.to(torch.float32), + num_nodes=num_nodes, + grad_energy_post_scaling_factor=grad_energy_post_scaling_factor, + forces_pre_scaling_factor=torch.tensor(forces_pre_scaling_factor).to( + torch.float32 + ), + forces=forces, + forces_pre_scaled=forces_pre_scaled, + pos=torch_data[:, [1, 2, 3]].to(torch.float32), + x=torch.cat([torch_data[:, [0, 4]]], axis=1).to(torch.float32), + y=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), + energy_per_atom=torch.tensor(energy_per_atom_pretransformed) + .unsqueeze(0) + .to(torch.float32), + energy=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), + ) + + # Create pbc edges and lengths + edge_creation = get_radius_graph_pbc(self.radius, self.max_neighbours) + data = edge_creation(data) + + return data + + def len(self): + return len(self.dataset) + + def get(self, idx): + return self.dataset[idx] + + +"""Create Data""" + +def deterministic_graph_data( + path: str, + atom_types: list, + atomic_structure_handler, + radius_cutoff=float("inf"), + max_num_neighbors=float("inf"), + number_configurations: int = 500, + configuration_start: int = 0, + unit_cell_x_range: list = [3, 4], + unit_cell_y_range: list = [3, 4], + unit_cell_z_range: list = [3, 4], + relative_maximum_atomic_displacement: float = 1e-1, +): + + comm = MPI.COMM_WORLD + comm_size = comm.Get_size() + comm_rank = comm.Get_rank() + torch.manual_seed(comm_rank) + + if 0 == comm_rank: + os.makedirs(path, exist_ok=False) + comm.Barrier() + + # We assume that the unit cell is Simple Center Cubic (SCC) + unit_cell_x = torch.randint( + unit_cell_x_range[0], + unit_cell_x_range[1], + (number_configurations,), + ) + unit_cell_y = torch.randint( + unit_cell_y_range[0], + unit_cell_y_range[1], + (number_configurations,), + ) + unit_cell_z = torch.randint( + unit_cell_z_range[0], + unit_cell_z_range[1], + (number_configurations,), + ) + + configurations_list = range(number_configurations) + rx = list(nsplit(configurations_list, comm_size))[comm_rank] + + for configuration in configurations_list[rx.start : rx.stop]: + uc_x = unit_cell_x[configuration] + uc_y = unit_cell_y[configuration] + uc_z = unit_cell_z[configuration] + create_configuration( + path, + atomic_structure_handler, + configuration, + configuration_start, + uc_x, + uc_y, + uc_z, + atom_types, + radius_cutoff, + max_num_neighbors, + relative_maximum_atomic_displacement, + ) + + +def create_configuration( + path, + atomic_structure_handler, + configuration, + configuration_start, + uc_x, + uc_y, + uc_z, + types, + radius_cutoff, + max_num_neighbors, + relative_maximum_atomic_displacement, +): + ############################################################################################### + ################################### STRUCTURE OF THE DATA ################################## + ############################################################################################### + + # GLOBAL_OUTPUT1 + # GLOBAL_OUTPUT2 + # NODE1_FEATURE NODE1_INDEX NODE1_COORDINATE_X NODE1_COORDINATE_Y NODE1_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 + # NODE2_FEATURE NODE2_INDEX NODE2_COORDINATE_X NODE2_COORDINATE_Y NODE2_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 + # ... + # NODENn_FEATURE NODEn_INDEX NODEn_COORDINATE_X NODEn_COORDINATE_Y NODEn_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 + + ############################################################################################### + ################################# FORMULAS FOR NODAL FEATURE ############################### + ############################################################################################### + + # NODAL_FEATURE = ATOM SPECIES + + ############################################################################################### + ########################## FORMULAS FOR GLOBAL AND NODAL OUTPUTS ########################### + ############################################################################################### + + # GLOBAL_OUTPUT = TOTAL ENERGY + # GLOBAL_OUTPUT = TOTAL ENERGY / NUMBER OF NODES + # NODAL_OUTPUT1(X) = FORCE ACTING ON ATOM IN X DIRECTION + # NODAL_OUTPUT2(X) = FORCE ACTING ON ATOM IN Y DIRECTION + # NODAL_OUTPUT3(X) = FORCE ACTING ON ATOM IN Z DIRECTION + + ############################################################################################### + count_pos = 0 + number_nodes = uc_x * uc_y * uc_z + positions = torch.zeros(number_nodes, 3) + for x in range(uc_x): + for y in range(uc_y): + for z in range(uc_z): + positions[count_pos][0] = ( + x + + relative_maximum_atomic_displacement + * ((torch.rand(1, 1).item()) - 0.5) + ) * primitive_bravais_lattice_constant_x + positions[count_pos][1] = ( + y + + relative_maximum_atomic_displacement + * ((torch.rand(1, 1).item()) - 0.5) + ) * primitive_bravais_lattice_constant_y + positions[count_pos][2] = ( + z + + relative_maximum_atomic_displacement + * ((torch.rand(1, 1).item()) - 0.5) + ) * primitive_bravais_lattice_constant_z + + count_pos = count_pos + 1 + + atom_types = torch.randint(min(types), max(types) + 1, (number_nodes, 1)) + + data = Data() + + data.pos = positions + supercell_size_x = primitive_bravais_lattice_constant_x * uc_x + supercell_size_y = primitive_bravais_lattice_constant_y * uc_y + supercell_size_z = primitive_bravais_lattice_constant_z * uc_z + data.supercell_size = torch.diag( + torch.tensor([supercell_size_x, supercell_size_y, supercell_size_z]) + ) + + create_graph_connectivity_pbc = get_radius_graph_pbc( + radius_cutoff, max_num_neighbors + ) + data = create_graph_connectivity_pbc(data) + + atomic_descriptors = torch.cat( + ( + atom_types, + positions, + ), + 1, + ) + + data.x = atomic_descriptors + + data = atomic_structure_handler.compute(data) + + total_energy = torch.sum(data.x[:, 4]) + energy_per_atom = total_energy / number_nodes + + total_energy_str = numpy.array2string(total_energy.detach().numpy()) + energy_per_atom_str = numpy.array2string(energy_per_atom.detach().numpy()) + filetxt = total_energy_str + "\n" + energy_per_atom_str + + for index in range(0, 3): + numpy_row = data.supercell_size[index, :].detach().numpy() + numpy_string_row = numpy.array2string(numpy_row, precision=64, separator="\t") + filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") + + for index in range(0, number_nodes): + numpy_row = data.x[index, :].detach().numpy() + numpy_string_row = numpy.array2string(numpy_row, precision=64, separator="\t") + filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") + + filename = os.path.join( + path, "output" + str(configuration + configuration_start) + ".txt" + ) + with open(filename, "w") as f: + f.write(filetxt) + + + +"""Function Calculation""" + +class AtomicStructureHandler: + def __init__( + self, list_atom_types, bravais_lattice_constants, radius_cutoff, formula + ): + + self.bravais_lattice_constants = bravais_lattice_constants + self.radius_cutoff = radius_cutoff + self.formula = formula + + def compute(self, data): + + assert data.pos.shape[0] == data.x.shape[0] + + interatomic_potential = torch.zeros([data.pos.shape[0], 1]) + interatomic_forces = torch.zeros([data.pos.shape[0], 3]) + + for node_id in range(data.pos.shape[0]): + + neighbor_list_indices = torch.where(data.edge_index[0, :] == node_id)[ + 0 + ].tolist() + neighbor_list = data.edge_index[1, neighbor_list_indices] + + for neighbor_id, edge_id in zip(neighbor_list, neighbor_list_indices): + + neighbor_pos = data.pos[neighbor_id, :] + distance_vector = data.pos[neighbor_id, :] - data.pos[node_id, :] + + # Adjust the neighbor position based on periodic boundary conditions (PBC) + ## If the distance between the atoms is larger than the cutoff radius, the edge is because of PBC conditions + if torch.norm(distance_vector) > self.radius_cutoff: + ## At this point, we know that the edge is due to PBC conditions, so we need to adjust the neighbor position. We also know that + ## that this connection MUST be the closest connection possible as a result of the asserted radius_cutoff < supercell_size earlier + ## in the code. Because of this, we can simply adjust the neighbor position coordinate-wise to be closer than + ## as done in the following lines of code. The logic goes that if the distance vector[index] is larger than half the supercell size, + ## then there is a closer distance at +- supercell_size[index], and we adjust to that for each coordinate + if abs(distance_vector[0]) > data.supercell_size[0, 0] / 2: + if distance_vector[0] > 0: + neighbor_pos[0] -= data.supercell_size[0, 0] + else: + neighbor_pos[0] += data.supercell_size[0, 0] + + if abs(distance_vector[1]) > data.supercell_size[1, 1] / 2: + if distance_vector[1] > 0: + neighbor_pos[1] -= data.supercell_size[1, 1] + else: + neighbor_pos[1] += data.supercell_size[1, 1] + + if abs(distance_vector[2]) > data.supercell_size[2, 2] / 2: + if distance_vector[2] > 0: + neighbor_pos[2] -= data.supercell_size[2, 2] + else: + neighbor_pos[2] += data.supercell_size[2, 2] + + # The distance vecor may need to be updated after applying PBCs + distance_vector = data.pos[node_id, :] - neighbor_pos + + # pair_distance = data.edge_attr[edge_id].item() + interatomic_potential[node_id] += self.formula.potential_energy( + distance_vector + ) + + derivative_x = self.formula.derivative_x(distance_vector) + derivative_y = self.formula.derivative_y(distance_vector) + derivative_z = self.formula.derivative_z(distance_vector) + + interatomic_forces_contribution_x = -derivative_x + interatomic_forces_contribution_y = -derivative_y + interatomic_forces_contribution_z = -derivative_z + + interatomic_forces[node_id, 0] += interatomic_forces_contribution_x + interatomic_forces[node_id, 1] += interatomic_forces_contribution_y + interatomic_forces[node_id, 2] += interatomic_forces_contribution_z + + data.x = torch.cat( + (data.x, interatomic_potential, interatomic_forces), + 1, + ) + + return data + + +class LJpotential: + def __init__(self, epsilon, sigma): + self.epsilon = epsilon + self.sigma = sigma + + def potential_energy(self, distance_vector): + pair_distance = torch.norm(distance_vector) + return ( + 4 + * self.epsilon + * ((self.sigma / pair_distance) ** 12 - (self.sigma / pair_distance) ** 6) + ) + + def radial_derivative(self, distance_vector): + pair_distance = torch.norm(distance_vector) + return ( + 4 + * self.epsilon + * ( + -12 * (self.sigma / pair_distance) ** 12 * 1 / pair_distance + + 6 * (self.sigma / pair_distance) ** 6 * 1 / pair_distance + ) + ) + + def derivative_x(self, distance_vector): + pair_distance = torch.norm(distance_vector) + radial_derivative = self.radial_derivative(pair_distance) + return radial_derivative * (distance_vector[0].item()) / pair_distance + + def derivative_y(self, distance_vector): + pair_distance = torch.norm(distance_vector) + radial_derivative = self.radial_derivative(pair_distance) + return radial_derivative * (distance_vector[1].item()) / pair_distance + + def derivative_z(self, distance_vector): + pair_distance = torch.norm(distance_vector) + radial_derivative = self.radial_derivative(pair_distance) + return radial_derivative * (distance_vector[2].item()) / pair_distance + + + +"""Etc""" + +def info(*args, logtype="info", sep=" "): + getattr(logging, logtype)(sep.join(map(str, args))) \ No newline at end of file diff --git a/examples/LennardJones/LJpotential.py b/examples/LennardJones/LJpotential.py deleted file mode 100644 index a38d17ce3..000000000 --- a/examples/LennardJones/LJpotential.py +++ /dev/null @@ -1,41 +0,0 @@ -import torch - - -class LJpotential: - def __init__(self, epsilon, sigma): - self.epsilon = epsilon - self.sigma = sigma - - def potential_energy(self, distance_vector): - pair_distance = torch.norm(distance_vector) - return ( - 4 - * self.epsilon - * ((self.sigma / pair_distance) ** 12 - (self.sigma / pair_distance) ** 6) - ) - - def radial_derivative(self, distance_vector): - pair_distance = torch.norm(distance_vector) - return ( - 4 - * self.epsilon - * ( - -12 * (self.sigma / pair_distance) ** 12 * 1 / pair_distance - + 6 * (self.sigma / pair_distance) ** 6 * 1 / pair_distance - ) - ) - - def derivative_x(self, distance_vector): - pair_distance = torch.norm(distance_vector) - radial_derivative = self.radial_derivative(pair_distance) - return radial_derivative * (distance_vector[0].item()) / pair_distance - - def derivative_y(self, distance_vector): - pair_distance = torch.norm(distance_vector) - radial_derivative = self.radial_derivative(pair_distance) - return radial_derivative * (distance_vector[1].item()) / pair_distance - - def derivative_z(self, distance_vector): - pair_distance = torch.norm(distance_vector) - radial_derivative = self.radial_derivative(pair_distance) - return radial_derivative * (distance_vector[2].item()) / pair_distance diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index 7e605529e..334da946d 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -1,197 +1,50 @@ -import mpi4py -from mpi4py import MPI - -mpi4py.rc.thread_level = "serialized" -mpi4py.rc.threads = False - +############################################################################## +# Copyright (c) 2024, Oak Ridge National Laboratory # +# All rights reserved. # +# # +# This file is part of HydraGNN and is distributed under a BSD 3-clause # +# license. For the licensing terms see the LICENSE file in the top-level # +# directory. # +# # +# SPDX-License-Identifier: BSD-3-Clause # +############################################################################## + +# General import os, json -import random - import logging import sys import argparse +# Torch +import torch +# torch.set_default_tensor_type(torch.DoubleTensor) +# torch.set_default_dtype(torch.float64) + +# Distributed +import mpi4py +from mpi4py import MPI +mpi4py.rc.thread_level = "serialized" +mpi4py.rc.threads = False + +# HydraGNN import hydragnn -from hydragnn.utils.print_utils import iterate_tqdm, log +from hydragnn.utils.print_utils import log from hydragnn.utils.time_utils import Timer - +import hydragnn.utils.tracer as tr from hydragnn.preprocess.load_data import split_dataset -from hydragnn.utils.abstractrawdataset import AbstractBaseDataset from hydragnn.utils.distdataset import DistDataset from hydragnn.utils.pickledataset import SimplePickleWriter, SimplePickleDataset from hydragnn.preprocess.utils import gather_deg - -import numpy as np - try: from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset except ImportError: pass -from torch_geometric.data import Data -from torch_geometric.transforms import RadiusGraph, Distance, LocalCartesian -import torch -import torch.distributed as dist - -from hydragnn.utils import nsplit -import hydragnn.utils.tracer as tr - -# Using LJ dataset creation -from configurational_data import deterministic_graph_data -from LJpotential import LJpotential -from AtomicStructure import AtomicStructureHandler - - -def create_dataset(path, config): - # Angstrom unit - primitive_bravais_lattice_constant_x = 3.8 - primitive_bravais_lattice_constant_y = 3.8 - primitive_bravais_lattice_constant_z = 3.8 - radius_cutoff = config["NeuralNetwork"]["Architecture"]["radius"] - number_configurations = config["Dataset"]["number_configurations"] if "number_configurations" in config["Dataset"] else 1000 - atom_types = [1] - formula = LJpotential(1.0, 3.4) - atomic_structure_handler = AtomicStructureHandler( - atom_types, - [ - primitive_bravais_lattice_constant_x, - primitive_bravais_lattice_constant_y, - primitive_bravais_lattice_constant_z, - ], - radius_cutoff, - formula, - ) - deterministic_graph_data( - path, - atom_types, - atomic_structure_handler=atomic_structure_handler, - radius_cutoff=radius_cutoff, - relative_maximum_atomic_displacement=1e-1, - number_configurations=number_configurations, - ) - - -# FIXME: this works fine for now because we train on disordered atomic structures with potentials and forces computed with Lennard-Jones - - -torch.set_default_dtype(torch.float32) - - -def info(*args, logtype="info", sep=" "): - getattr(logging, logtype)(sep.join(map(str, args))) - - - -class LJDataset(AbstractBaseDataset): - """LJDataset dataset class""" - - def __init__(self, dirpath, config, dist=False, sampling=None): - super().__init__() - - self.dist = dist - self.world_size = 1 - self.rank = 1 - if self.dist: - assert torch.distributed.is_initialized() - self.world_size = torch.distributed.get_world_size() - self.rank = torch.distributed.get_rank() - - self.create_graph_fromXYZ = RadiusGraph(r=config["NeuralNetwork"]["Architecture"]["radius"]) # radius cutoff in angstrom - self.compute_edge_lengths = Distance(norm=False, cat=True) - # self.spherical_coordinates = Spherical(norm=False, cat=False) - self.cartesian_coordinates = LocalCartesian(norm=False, cat=False) - - dirfiles = sorted(os.listdir(dirpath)) - - rx = list(nsplit((dirfiles), self.world_size))[self.rank] - - for file in rx: - filepath = os.path.join(dirpath, file) - self.dataset.append(self.transform_input_to_data_object_base(filepath)) - - def transform_input_to_data_object_base(self, filepath): - - # Using readline() - file = open(filepath, "r") - - torch_data = torch.empty((0, 8), dtype=torch.float32) - torch_supercell = torch.zeros((0, 3), dtype=torch.float32) - - count = 0 - - while True: - count += 1 - - # Get next line from file - line = file.readline() - - # if line is empty - # end of file is reached - if not line: - break - - if count == 1: - total_energy = float(line) - elif count == 2: - energy_per_atom = float(line) - elif 2 < count < 6: - array_line = np.fromstring(line, dtype=float, sep="\t") - torch_supercell = torch.cat( - [torch_supercell, torch.from_numpy(array_line).unsqueeze(0)], axis=0 - ) - elif count > 5: - array_line = np.fromstring(line, dtype=float, sep="\t") - torch_data = torch.cat( - [torch_data, torch.from_numpy(array_line).unsqueeze(0)], axis=0 - ) - # print("Line{}: {}".format(count, line.strip())) - - file.close() - - num_nodes = torch_data.shape[0] - - energy_pre_translation_factor = 0.0 - energy_pre_scaling_factor = 1.0 / num_nodes - energy_per_atom_pretransformed = ( - energy_per_atom - energy_pre_translation_factor - ) * energy_pre_scaling_factor - grad_energy_post_scaling_factor = ( - 1.0 / energy_pre_scaling_factor * torch.ones(num_nodes, 1) - ) - forces = torch_data[:, [5, 6, 7]] - forces_pre_scaling_factor = 1.0 - forces_pre_scaled = forces * forces_pre_scaling_factor - - data = Data( - supercell_size=torch_supercell.to(torch.float32), - num_nodes=num_nodes, - grad_energy_post_scaling_factor=grad_energy_post_scaling_factor, - forces_pre_scaling_factor=torch.tensor(forces_pre_scaling_factor).to( - torch.float32 - ), - forces=forces, - forces_pre_scaled=forces_pre_scaled, - pos=torch_data[:, [1, 2, 3]].to(torch.float32), - x=torch.cat([torch_data[:, [0, 4]]], axis=1).to(torch.float32), - y=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), - energy_per_atom=torch.tensor(energy_per_atom_pretransformed) - .unsqueeze(0) - .to(torch.float32), - energy=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), - ) - data = self.create_graph_fromXYZ(data) - data = self.compute_edge_lengths(data) - data.edge_attr = data.edge_attr.to(torch.float32) - # data = self.spherical_coordinates(data) - data = self.cartesian_coordinates(data) - - return data +# Lennard Jones +from LJ_data import create_dataset, LJDataset, info - def len(self): - return len(self.dataset) - def get(self, idx): - return self.dataset[idx] +################################################################################################################## if __name__ == "__main__": @@ -294,7 +147,7 @@ def get(self, idx): ## local data create_dataset(os.path.join(dirpwd, "dataset/data"), config) total = LJDataset( - os.path.join(dirpwd, "dataset"), + os.path.join(dirpwd, "dataset/data"), config, dist=True, ) diff --git a/examples/LennardJones/configurational_data.py b/examples/LennardJones/configurational_data.py deleted file mode 100644 index ec41f1a8a..000000000 --- a/examples/LennardJones/configurational_data.py +++ /dev/null @@ -1,215 +0,0 @@ -############################################################################## -# Copyright (c) 2021, Oak Ridge National Laboratory # -# All rights reserved. # -# # -# This file is part of HydraGNN and is distributed under a BSD 3-clause # -# license. For the licensing terms see the LICENSE file in the top-level # -# directory. # -# # -# SPDX-License-Identifier: BSD-3-Clause # -############################################################################## - -import os -import torch -import numpy - -numpy.set_printoptions(threshold=numpy.inf) -numpy.set_printoptions(linewidth=numpy.inf) - -torch.set_default_tensor_type(torch.DoubleTensor) -torch.set_default_dtype(torch.float64) - -from torch_geometric.data import Data - -from graph_utils import get_radius_graph_pbc -from AtomicStructure import AtomicStructureHandler -from LJpotential import LJpotential - -from distributed_utils import nsplit - -from mpi4py import MPI - -# Angstrom unit -primitive_bravais_lattice_constant_x = 3.8 -primitive_bravais_lattice_constant_y = 3.8 -primitive_bravais_lattice_constant_z = 3.8 - - -def deterministic_graph_data( - path: str, - atom_types: list, - atomic_structure_handler, - radius_cutoff=float("inf"), - max_num_neighbors=float("inf"), - number_configurations: int = 500, - configuration_start: int = 0, - unit_cell_x_range: list = [3, 4], - unit_cell_y_range: list = [3, 4], - unit_cell_z_range: list = [3, 4], - relative_maximum_atomic_displacement: float = 1e-1, -): - - comm = MPI.COMM_WORLD - comm_size = comm.Get_size() - comm_rank = comm.Get_rank() - torch.manual_seed(comm_rank) - - if 0 == comm_rank: - os.makedirs(path, exist_ok=False) - comm.Barrier() - - # We assume that the unit cell is Simple Center Cubic (SCC) - unit_cell_x = torch.randint( - unit_cell_x_range[0], - unit_cell_x_range[1], - (number_configurations,), - ) - unit_cell_y = torch.randint( - unit_cell_y_range[0], - unit_cell_y_range[1], - (number_configurations,), - ) - unit_cell_z = torch.randint( - unit_cell_z_range[0], - unit_cell_z_range[1], - (number_configurations,), - ) - - configurations_list = range(number_configurations) - rx = list(nsplit(configurations_list, comm_size))[comm_rank] - - for configuration in configurations_list[rx.start : rx.stop]: - uc_x = unit_cell_x[configuration] - uc_y = unit_cell_y[configuration] - uc_z = unit_cell_z[configuration] - create_configuration( - path, - atomic_structure_handler, - configuration, - configuration_start, - uc_x, - uc_y, - uc_z, - atom_types, - radius_cutoff, - max_num_neighbors, - relative_maximum_atomic_displacement, - ) - - -def create_configuration( - path, - atomic_structure_handler, - configuration, - configuration_start, - uc_x, - uc_y, - uc_z, - types, - radius_cutoff, - max_num_neighbors, - relative_maximum_atomic_displacement, -): - ############################################################################################### - ################################### STRUCTURE OF THE DATA ################################## - ############################################################################################### - - # GLOBAL_OUTPUT1 - # GLOBAL_OUTPUT2 - # NODE1_FEATURE NODE1_INDEX NODE1_COORDINATE_X NODE1_COORDINATE_Y NODE1_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 - # NODE2_FEATURE NODE2_INDEX NODE2_COORDINATE_X NODE2_COORDINATE_Y NODE2_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 - # ... - # NODENn_FEATURE NODEn_INDEX NODEn_COORDINATE_X NODEn_COORDINATE_Y NODEn_COORDINATE_Z NODAL_OUTPUT1 NODAL_OUTPUT2 NODAL_OUTPUT3 - - ############################################################################################### - ################################# FORMULAS FOR NODAL FEATURE ############################### - ############################################################################################### - - # NODAL_FEATURE = ATOM SPECIES - - ############################################################################################### - ########################## FORMULAS FOR GLOBAL AND NODAL OUTPUTS ########################### - ############################################################################################### - - # GLOBAL_OUTPUT = TOTAL ENERGY - # GLOBAL_OUTPUT = TOTAL ENERGY / NUMBER OF NODES - # NODAL_OUTPUT1(X) = FORCE ACTING ON ATOM IN X DIRECTION - # NODAL_OUTPUT2(X) = FORCE ACTING ON ATOM IN Y DIRECTION - # NODAL_OUTPUT3(X) = FORCE ACTING ON ATOM IN Z DIRECTION - - ############################################################################################### - count_pos = 0 - number_nodes = uc_x * uc_y * uc_z - positions = torch.zeros(number_nodes, 3) - for x in range(uc_x): - for y in range(uc_y): - for z in range(uc_z): - positions[count_pos][0] = ( - x - + relative_maximum_atomic_displacement - * ((torch.rand(1, 1).item()) - 0.5) - ) * primitive_bravais_lattice_constant_x - positions[count_pos][1] = ( - y - + relative_maximum_atomic_displacement - * ((torch.rand(1, 1).item()) - 0.5) - ) * primitive_bravais_lattice_constant_y - positions[count_pos][2] = ( - z - + relative_maximum_atomic_displacement - * ((torch.rand(1, 1).item()) - 0.5) - ) * primitive_bravais_lattice_constant_z - - count_pos = count_pos + 1 - - atom_types = torch.randint(min(types), max(types) + 1, (number_nodes, 1)) - - data = Data() - - data.pos = positions - supercell_size_x = primitive_bravais_lattice_constant_x * uc_x - supercell_size_y = primitive_bravais_lattice_constant_y * uc_y - supercell_size_z = primitive_bravais_lattice_constant_z * uc_z - data.supercell_size = torch.diag( - torch.tensor([supercell_size_x, supercell_size_y, supercell_size_z]) - ) - - create_graph_connectivity_pbc = get_radius_graph_pbc( - radius_cutoff, max_num_neighbors - ) - data = create_graph_connectivity_pbc(data) - - atomic_descriptors = torch.cat( - ( - atom_types, - positions, - ), - 1, - ) - - data.x = atomic_descriptors - - data = atomic_structure_handler.compute(data) - - total_energy = torch.sum(data.x[:, 4]) - energy_per_atom = total_energy / number_nodes - - total_energy_str = numpy.array2string(total_energy.detach().numpy()) - energy_per_atom_str = numpy.array2string(energy_per_atom.detach().numpy()) - filetxt = total_energy_str + "\n" + energy_per_atom_str - - for index in range(0, 3): - numpy_row = data.supercell_size[index, :].detach().numpy() - numpy_string_row = numpy.array2string(numpy_row, precision=64, separator="\t") - filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") - - for index in range(0, number_nodes): - numpy_row = data.x[index, :].detach().numpy() - numpy_string_row = numpy.array2string(numpy_row, precision=64, separator="\t") - filetxt += "\n" + numpy_string_row.lstrip("[").rstrip("]") - - filename = os.path.join( - path, "output" + str(configuration + configuration_start) + ".txt" - ) - with open(filename, "w") as f: - f.write(filetxt) \ No newline at end of file diff --git a/examples/LennardJones/distributed_utils.py b/examples/LennardJones/distributed_utils.py deleted file mode 100644 index 8c367bc48..000000000 --- a/examples/LennardJones/distributed_utils.py +++ /dev/null @@ -1,3 +0,0 @@ -def nsplit(a, n): - k, m = divmod(len(a), n) - return (a[i * k + min(i, m) : (i + 1) * k + min(i + 1, m)] for i in range(n)) diff --git a/examples/LennardJones/graph_utils.py b/examples/LennardJones/graph_utils.py deleted file mode 100644 index 8e9c0698f..000000000 --- a/examples/LennardJones/graph_utils.py +++ /dev/null @@ -1,56 +0,0 @@ -import torch -from torch_geometric.transforms import RadiusGraph -import ase -import ase.neighborlist -from torch_geometric.utils import remove_self_loops, degree - - -class RadiusGraphPBC(RadiusGraph): - r"""Creates edges based on node positions :obj:`pos` to all points within a - given distance, including periodic images. - """ - - def __call__(self, data): - data.edge_attr = None - assert ( - "batch" not in data - ), "Periodic boundary conditions not currently supported on batches." - assert hasattr( - data, "supercell_size" - ), "The data must contain the size of the supercell to apply periodic boundary conditions." - ase_atom_object = ase.Atoms( - positions=data.pos, - cell=data.supercell_size, - pbc=True, - ) - # ā€˜iā€™ : first atom index - # ā€˜jā€™ : second atom index - # https://wiki.fysik.dtu.dk/ase/ase/neighborlist.html#ase.neighborlist.neighbor_list - edge_src, edge_dst, edge_length = ase.neighborlist.neighbor_list( - "ijd", a=ase_atom_object, cutoff=self.r, self_interaction=self.loop - ) - data.edge_index = torch.stack( - [torch.LongTensor(edge_src), torch.LongTensor(edge_dst)], dim=0 - ) - - # ensure no duplicate edges - num_edges = data.edge_index.size(1) - data.coalesce() - assert num_edges == data.edge_index.size( - 1 - ), "Adding periodic boundary conditions would result in duplicate edges. Cutoff radius must be reduced or system size increased." - - data.edge_attr = torch.tensor(edge_length, dtype=torch.float).unsqueeze(1) - - return data - - def __repr__(self) -> str: - return f"{self.__class__.__name__}(r={self.r})" - - -def get_radius_graph_pbc(radius, max_neighbours, loop=False): - return RadiusGraphPBC( - r=radius, - loop=loop, - max_num_neighbors=max_neighbours, - ) From ee20cf761ad5696a98e609e75705580729ac0fae Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 16:11:10 -0400 Subject: [PATCH 29/37] formatting --- examples/LennardJones/LJ_data.py | 24 +++++++++++++++++------- examples/LennardJones/LennardJones.py | 7 ++++++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/examples/LennardJones/LJ_data.py b/examples/LennardJones/LJ_data.py index 9aa6b4964..ce9519e34 100644 --- a/examples/LennardJones/LJ_data.py +++ b/examples/LennardJones/LJ_data.py @@ -13,18 +13,21 @@ import os import logging import numpy + numpy.set_printoptions(threshold=numpy.inf) numpy.set_printoptions(linewidth=numpy.inf) # Torch import torch from torch_geometric.data import Data + # torch.set_default_tensor_type(torch.DoubleTensor) # torch.set_default_dtype(torch.float64) # Distributed import mpi4py from mpi4py import MPI + mpi4py.rc.thread_level = "serialized" mpi4py.rc.threads = False @@ -44,9 +47,14 @@ """High-Level Function""" + def create_dataset(path, config): radius_cutoff = config["NeuralNetwork"]["Architecture"]["radius"] - number_configurations = config["Dataset"]["number_configurations"] if "number_configurations" in config["Dataset"] else 3000 + number_configurations = ( + config["Dataset"]["number_configurations"] + if "number_configurations" in config["Dataset"] + else 3000 + ) atom_types = [1] formula = LJpotential(1.0, 3.4) atomic_structure_handler = AtomicStructureHandler( @@ -71,6 +79,7 @@ def create_dataset(path, config): """Reading/Transforming Data""" + class LJDataset(AbstractBaseDataset): """LJDataset dataset class""" @@ -84,7 +93,7 @@ def __init__(self, dirpath, config, dist=False, sampling=None): assert torch.distributed.is_initialized() self.world_size = torch.distributed.get_world_size() self.rank = torch.distributed.get_rank() - + self.radius = config["NeuralNetwork"]["Architecture"]["radius"] self.max_neighbours = config["NeuralNetwork"]["Architecture"]["max_neighbours"] @@ -166,7 +175,7 @@ def transform_inumpyut_to_data_object_base(self, filepath): .to(torch.float32), energy=torch.tensor(total_energy).unsqueeze(0).to(torch.float32), ) - + # Create pbc edges and lengths edge_creation = get_radius_graph_pbc(self.radius, self.max_neighbours) data = edge_creation(data) @@ -182,6 +191,7 @@ def get(self, idx): """Create Data""" + def deterministic_graph_data( path: str, atom_types: list, @@ -360,11 +370,11 @@ def create_configuration( ) with open(filename, "w") as f: f.write(filetxt) - """Function Calculation""" + class AtomicStructureHandler: def __init__( self, list_atom_types, bravais_lattice_constants, radius_cutoff, formula @@ -486,9 +496,9 @@ def derivative_z(self, distance_vector): radial_derivative = self.radial_derivative(pair_distance) return radial_derivative * (distance_vector[2].item()) / pair_distance - - + """Etc""" + def info(*args, logtype="info", sep=" "): - getattr(logging, logtype)(sep.join(map(str, args))) \ No newline at end of file + getattr(logging, logtype)(sep.join(map(str, args))) diff --git a/examples/LennardJones/LennardJones.py b/examples/LennardJones/LennardJones.py index 334da946d..045b1d251 100644 --- a/examples/LennardJones/LennardJones.py +++ b/examples/LennardJones/LennardJones.py @@ -17,12 +17,14 @@ # Torch import torch + # torch.set_default_tensor_type(torch.DoubleTensor) # torch.set_default_dtype(torch.float64) # Distributed import mpi4py from mpi4py import MPI + mpi4py.rc.thread_level = "serialized" mpi4py.rc.threads = False @@ -35,6 +37,7 @@ from hydragnn.utils.distdataset import DistDataset from hydragnn.utils.pickledataset import SimplePickleWriter, SimplePickleDataset from hydragnn.preprocess.utils import gather_deg + try: from hydragnn.utils.adiosdataset import AdiosWriter, AdiosDataset except ImportError: @@ -139,7 +142,9 @@ dataset_exists = os.path.exists(os.path.join(dirpwd, "dataset/LJ.pickle")) if args.format == "adios": fname = os.path.join(dirpwd, "./dataset/%s.bp" % modelname) - dataset_exists = os.path.exists(os.path.join(dirpwd, "dataset", "%s.bp" % modelname)) + dataset_exists = os.path.exists( + os.path.join(dirpwd, "dataset", "%s.bp" % modelname) + ) # Create dataset if preonly specified or dataset does not exist if not dataset_exists: From 1fa77660841f1b75e32d939047e465865590f741 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 16:13:01 -0400 Subject: [PATCH 30/37] renaming --- .../{inference_derivative_energy.py => LJ_inference_plots.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/LennardJones/{inference_derivative_energy.py => LJ_inference_plots.py} (100%) diff --git a/examples/LennardJones/inference_derivative_energy.py b/examples/LennardJones/LJ_inference_plots.py similarity index 100% rename from examples/LennardJones/inference_derivative_energy.py rename to examples/LennardJones/LJ_inference_plots.py From e8a4a4d80c54291a7e8b21d1d209d3db252ed100 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 16:14:32 -0400 Subject: [PATCH 31/37] remove qm9 test --- examples/qm9/qm9.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/qm9/qm9.py b/examples/qm9/qm9.py index 76cec549c..19bdf7dba 100644 --- a/examples/qm9/qm9.py +++ b/examples/qm9/qm9.py @@ -62,11 +62,6 @@ def qm9_pre_filter(data): ) # Check for dataset filepath datadir = os.path.join(os.getcwd(), "dataset/qm9") -if os.path.exists(datadir): - print("----------------------------DATASET FOUND----------------------------") -else: - print("----------------------------DATASET NOT FOUND----------------------------") - raise FileNotFoundError train, val, test = hydragnn.preprocess.split_dataset( dataset, config["NeuralNetwork"]["Training"]["perc_train"], False ) From 5d358a31d2e503461cf158fdfe7fe024677a3de8 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 16:15:07 -0400 Subject: [PATCH 32/37] remove qm9 test --- examples/qm9/qm9.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/qm9/qm9.py b/examples/qm9/qm9.py index 19bdf7dba..2e6c3da8e 100644 --- a/examples/qm9/qm9.py +++ b/examples/qm9/qm9.py @@ -60,8 +60,6 @@ def qm9_pre_filter(data): dataset = torch_geometric.datasets.QM9( root="dataset/qm9", pre_transform=qm9_pre_transform, pre_filter=qm9_pre_filter ) -# Check for dataset filepath -datadir = os.path.join(os.getcwd(), "dataset/qm9") train, val, test = hydragnn.preprocess.split_dataset( dataset, config["NeuralNetwork"]["Training"]["perc_train"], False ) From 06dad510b20f4b61833adb1b69c40832d84edaaf Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 16:29:01 -0400 Subject: [PATCH 33/37] smaller number samples for test --- examples/LennardJones/LJ.json | 2 +- examples/LennardJones/LJ_data.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/LennardJones/LJ.json b/examples/LennardJones/LJ.json index d26f2fdc9..c857f93c9 100644 --- a/examples/LennardJones/LJ.json +++ b/examples/LennardJones/LJ.json @@ -56,7 +56,7 @@ "output_names": ["graph_energy"] }, "Training": { - "num_epoch": 20, + "num_epoch": 15, "batch_size": 64, "patience": 20, "early_stopping": true, diff --git a/examples/LennardJones/LJ_data.py b/examples/LennardJones/LJ_data.py index ce9519e34..6226ff6f8 100644 --- a/examples/LennardJones/LJ_data.py +++ b/examples/LennardJones/LJ_data.py @@ -53,7 +53,7 @@ def create_dataset(path, config): number_configurations = ( config["Dataset"]["number_configurations"] if "number_configurations" in config["Dataset"] - else 3000 + else 300 ) atom_types = [1] formula = LJpotential(1.0, 3.4) From 393976ccaa59567210e3a4257cc8f9af4fd04c25 Mon Sep 17 00:00:00 2001 From: Massimiliano Lupo Pasini Date: Tue, 17 Sep 2024 16:49:30 -0400 Subject: [PATCH 34/37] Update examples/LennardJones/LJ_inference_plots.py --- examples/LennardJones/LJ_inference_plots.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/LennardJones/LJ_inference_plots.py b/examples/LennardJones/LJ_inference_plots.py index a3a5f2bf3..88b510ad8 100644 --- a/examples/LennardJones/LJ_inference_plots.py +++ b/examples/LennardJones/LJ_inference_plots.py @@ -1,5 +1,5 @@ ############################################################################## -# Copyright (c) 2021, Oak Ridge National Laboratory # +# Copyright (c) 2024, Oak Ridge National Laboratory # # All rights reserved. # # # # This file is part of HydraGNN and is distributed under a BSD 3-clause # From 85f44ab43af2aed21327eef83ee6a6abd9c7676d Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 17:00:57 -0400 Subject: [PATCH 35/37] use info function --- examples/LennardJones/LJ_inference_plots.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/examples/LennardJones/LJ_inference_plots.py b/examples/LennardJones/LJ_inference_plots.py index 88b510ad8..324da425f 100644 --- a/examples/LennardJones/LJ_inference_plots.py +++ b/examples/LennardJones/LJ_inference_plots.py @@ -39,6 +39,8 @@ except ImportError: pass +from LJ_data import info + import matplotlib.pyplot as plt plt.rcParams.update({"font.size": 16}) @@ -99,10 +101,6 @@ def getcolordensity(xdata, ydata): return hist2d_norm -def info(*args, logtype="info", sep=" "): - getattr(logging, logtype)(sep.join(map(str, args))) - - if __name__ == "__main__": modelname = "LJ" From 81992afe5885b0c44580dbd70638954619fbbf0a Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 17:04:15 -0400 Subject: [PATCH 36/37] Unnecessary __init__ file --- examples/LennardJones/__init__.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 examples/LennardJones/__init__.py diff --git a/examples/LennardJones/__init__.py b/examples/LennardJones/__init__.py deleted file mode 100644 index 266d92653..000000000 --- a/examples/LennardJones/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .LennardJones import LJpotential From bc93b9b8d281551fc48dfcc96d2099e3f2083aa7 Mon Sep 17 00:00:00 2001 From: Rylie Weaver Date: Tue, 17 Sep 2024 19:51:46 -0400 Subject: [PATCH 37/37] Unecessary json args --- examples/LennardJones/LJ.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/examples/LennardJones/LJ.json b/examples/LennardJones/LJ.json index c857f93c9..a79c5f41d 100644 --- a/examples/LennardJones/LJ.json +++ b/examples/LennardJones/LJ.json @@ -4,9 +4,7 @@ }, "Dataset": { "name": "LJdataset", - "path": {"total": "./dataset/data"}, "format": "XYZ", - "rotational_invariance": true, "node_features": { "name": ["atom_type"], "dim": [1], @@ -22,7 +20,6 @@ "Architecture": { "periodic_boundary_conditions": true, "model_type": "DimeNet", - "equivariance": false, "radius": 5.0, "max_neighbours": 5, "int_emb_size": 32,