From a55a7ae095c5c86e58926283b6214000c644213a Mon Sep 17 00:00:00 2001 From: hans Date: Mon, 27 May 2024 09:09:01 +0200 Subject: [PATCH] feat: Add AI Surrogate functions to V.03 --- R_lib/ai_surrogate_model.R | 71 +++++++++++++ R_lib/init_r_lib.R | 2 +- R_lib/kin_r_library.R | 11 +- bench/CMakeLists.txt | 2 - bench/barite/barite_200.R | 3 +- .../barite_200ai_surrogate_input_script.R | 48 +++++++++ bench/barite/min_max_bounds.rds | Bin 0 -> 301 bytes bench/barite/model_min_max_float64.keras | Bin 0 -> 235440 bytes src/CMakeLists.txt | 1 + src/Chemistry/ChemistryDefs.hpp | 2 +- src/Chemistry/ChemistryModule.cpp | 4 + src/Chemistry/ChemistryModule.hpp | 14 ++- src/Chemistry/MasterFunctions.cpp | 38 +++++-- src/Chemistry/WorkerFunctions.cpp | 20 +++- src/Init/ChemistryInit.cpp | 6 ++ src/Init/InitialList.cpp | 3 + src/Init/InitialList.hpp | 12 ++- src/poet.cpp | 95 ++++++++++++++++-- src/poet.hpp.in | 7 +- 19 files changed, 306 insertions(+), 33 deletions(-) create mode 100644 R_lib/ai_surrogate_model.R create mode 100644 bench/barite/barite_200ai_surrogate_input_script.R create mode 100644 bench/barite/min_max_bounds.rds create mode 100644 bench/barite/model_min_max_float64.keras diff --git a/R_lib/ai_surrogate_model.R b/R_lib/ai_surrogate_model.R new file mode 100644 index 000000000..268fb3098 --- /dev/null +++ b/R_lib/ai_surrogate_model.R @@ -0,0 +1,71 @@ +## This file contains default function implementations for the ai surrogate. +## To load pretrained models, use pre-/postprocessing or change hyperparameters +## it is recommended to override these functions with custom implementations via +## the input script. The path to the R-file containing the functions mus be set +## in the variable "ai_surrogate_input_script". See the barite_200.R file as an +## example and the general README for more information. + +library(keras) +library(tensorflow) + +initiate_model <- function() { + hidden_layers <- c(48, 96, 24) + activation <- "relu" + loss <- "mean_squared_error" + + input_length <- length(ai_surrogate_species) + output_length <- length(ai_surrogate_species) + ## Creates a new sequential model from scratch + model <- keras_model_sequential() + + ## Input layer defined by input data shape + model %>% layer_dense(units = input_length, + activation = activation, + input_shape = input_length, + dtype = "float32") + + for (layer_size in hidden_layers) { + model %>% layer_dense(units = layer_size, + activation = activation, + dtype = "float32") + } + + ## Output data defined by output data shape + model %>% layer_dense(units = output_length, + activation = activation, + dtype = "float32") + + model %>% compile(loss = loss, + optimizer = "adam") + return(model) +} + +gpu_info <- function() { + msgm(tf_gpu_configured()) +} + +prediction_step <- function(model, predictors) { + prediction <- predict(model, as.matrix(predictors)) + colnames(prediction) <- colnames(predictors) + return(as.data.frame(prediction)) +} + +preprocess <- function(df, backtransform = FALSE, outputs = FALSE) { + return(df) +} + +set_valid_predictions <- function(temp_field, prediction, validity) { + temp_field[validity == 1, ] <- prediction[validity == 1, ] + return(temp_field) +} + +training_step <- function(model, predictor, target, validity) { + msgm("Training:") + + x <- as.matrix(predictor) + y <- as.matrix(target[colnames(x)]) + + model %>% fit(x, y) + + model %>% save_model_tf(paste0(out_dir, "/current_model.keras")) +} diff --git a/R_lib/init_r_lib.R b/R_lib/init_r_lib.R index 640c0e07b..d0971e9da 100644 --- a/R_lib/init_r_lib.R +++ b/R_lib/init_r_lib.R @@ -53,4 +53,4 @@ add_missing_transport_species <- function(init_grid, new_names) { new_grid <- cbind(new_grid, append_df) return(new_grid) -} \ No newline at end of file +} diff --git a/R_lib/kin_r_library.R b/R_lib/kin_r_library.R index 58941a032..cb8eaecd3 100644 --- a/R_lib/kin_r_library.R +++ b/R_lib/kin_r_library.R @@ -70,14 +70,19 @@ master_iteration_end <- function(setup, state_T, state_C) { if (setup$store_result) { if (iter %in% setup$out_save) { nameout <- paste0(setup$out_dir, "/iter_", sprintf(fmt = fmt, iter), ".rds") - state_T <- data.frame(state_T, check.names = FALSE) state_C <- data.frame(state_C, check.names = FALSE) - + + ai_surrogate_info <- list( + prediction_time = if(exists("ai_prediction_time")) as.integer(ai_prediction_time) else NULL, + training_time = if(exists("ai_training_time")) as.integer(ai_training_time) else NULL, + valid_predictions = if(exists("validity_vector")) validity_vector else NULL) saveRDS(list( T = state_T, C = state_C, - simtime = as.integer(setup$simulation_time) + simtime = as.integer(setup$simulation_time), + totaltime = as.integer(totaltime), + ai_surrogate_info = ai_surrogate_info ), file = nameout) msgm("results stored in <", nameout, ">") } diff --git a/bench/CMakeLists.txt b/bench/CMakeLists.txt index 17045c31b..d407713ba 100644 --- a/bench/CMakeLists.txt +++ b/bench/CMakeLists.txt @@ -1,4 +1,3 @@ - function(ADD_BENCH_TARGET TARGET POET_BENCH_LIST RT_FILES OUT_PATH) set(bench_install_dir share/poet/${OUT_PATH}) @@ -41,4 +40,3 @@ add_custom_target(${BENCHTARGET} ALL) add_subdirectory(barite) add_subdirectory(dolo) add_subdirectory(surfex) - diff --git a/bench/barite/barite_200.R b/bench/barite/barite_200.R index 337f903eb..a6c87c749 100644 --- a/bench/barite/barite_200.R +++ b/bench/barite/barite_200.R @@ -47,7 +47,8 @@ dht_species <- c( ) chemistry_setup <- list( - dht_species = dht_species + dht_species = dht_species, + ai_surrogate_input_script = "./barite_200ai_surrogate_input_script.R" ) # Define a setup list for simulation configuration diff --git a/bench/barite/barite_200ai_surrogate_input_script.R b/bench/barite/barite_200ai_surrogate_input_script.R new file mode 100644 index 000000000..63b8f66ad --- /dev/null +++ b/bench/barite/barite_200ai_surrogate_input_script.R @@ -0,0 +1,48 @@ +## load a pretrained model from tensorflow file +## Use the global variable "ai_surrogate_base_path" when using file paths +## relative to the input script +initiate_model <- function() { + init_model <- normalizePath(paste0(ai_surrogate_base_path, + "model_min_max_float64.keras")) + return(load_model_tf(init_model)) +} + +scale_min_max <- function(x, min, max, backtransform) { + if (backtransform) { + return((x * (max - min)) + min) + } else { + return((x - min) / (max - min)) + } +} + +preprocess <- function(df, backtransform = FALSE, outputs = FALSE) { + minmax_file <- normalizePath(paste0(ai_surrogate_base_path, + "min_max_bounds.rds")) + global_minmax <- readRDS(minmax_file) + for (column in colnames(df)) { + df[column] <- lapply(df[column], + scale_min_max, + global_minmax$min[column], + global_minmax$max[column], + backtransform) + } + return(df) +} + +mass_balance <- function(predictors, prediction) { + dBa <- abs(prediction$Ba + prediction$Barite - + predictors$Ba - predictors$Barite) + dSr <- abs(prediction$Sr + prediction$Celestite - + predictors$Sr - predictors$Celestite) + return(dBa + dSr) +} + +validate_predictions <- function(predictors, prediction) { + epsilon <- 0.00003 + mb <- mass_balance(predictors, prediction) + msgm("Mass balance mean:", mean(mb)) + msgm("Mass balance variance:", var(mb)) + msgm("Rows where mass balance meets threshold", epsilon, ":", + sum(mb < epsilon)) + return(mb < epsilon) +} diff --git a/bench/barite/min_max_bounds.rds b/bench/barite/min_max_bounds.rds new file mode 100644 index 0000000000000000000000000000000000000000..9760387d4ef82acdb492f99eee1d1bdbc4ac396c GIT binary patch literal 301 zcmV+|0n+{-iwFP!000001B>8dU|?WoU}0urU}gm}8CXL@+;lA%7?^~C93~**1Jaxh z(G90H(cmJOKBvT@%o3PBPUqB|)Z!A500YB6gwOU(wWvB< z=iq%%R^;)XYx_i=hL*>*N7(O}Jpc8yRXglYY`3(lEOoJW33>Lv^i;Eb?Kj literal 0 HcmV?d00001 diff --git a/bench/barite/model_min_max_float64.keras b/bench/barite/model_min_max_float64.keras new file mode 100644 index 0000000000000000000000000000000000000000..7f5b1fa5cfb57eb8cabd0819669c9ebabfd0f783 GIT binary patch literal 235440 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 &in_buffer, } } } + +void poet::ChemistryModule::set_ai_surrogate_validity_vector(std::vector r_vector) { + this->ai_surrogate_validity_vector = r_vector; +} diff --git a/src/Chemistry/ChemistryModule.hpp b/src/Chemistry/ChemistryModule.hpp index 7260422fb..c06293572 100644 --- a/src/Chemistry/ChemistryModule.hpp +++ b/src/Chemistry/ChemistryModule.hpp @@ -83,6 +83,7 @@ public: std::uint32_t interp_bucket_size; std::uint32_t interp_size_mb; std::uint32_t interp_min_entries; + bool ai_surrogate_enabled; }; void masterEnableSurrogates(const SurrogateSetup &setup) { @@ -92,6 +93,7 @@ public: this->dht_enabled = setup.dht_enabled; this->interp_enabled = setup.interp_enabled; + this->ai_surrogate_enabled = setup.ai_surrogate_enabled; if (this->dht_enabled || this->interp_enabled) { this->initializeDHT(setup.dht_size_mb, this->params.dht_species); @@ -219,6 +221,11 @@ public: this->print_progessbar = enabled; }; + /** + * **Master only** Set the ai surrogate validity vector from R + */ + void set_ai_surrogate_validity_vector(std::vector r_vector); + std::vector GetWorkerInterpolationCalls() const; std::vector GetWorkerInterpolationWriteTimings() const; @@ -228,6 +235,8 @@ public: std::vector GetWorkerPHTCacheHits() const; + std::vector ai_surrogate_validity_vector; + protected: void initializeDHT(uint32_t size_mb, const NamedVector &key_species); @@ -249,7 +258,8 @@ protected: CHEM_IP_SIGNIF_VEC, CHEM_WORK_LOOP, CHEM_PERF, - CHEM_BREAK_MAIN_LOOP + CHEM_BREAK_MAIN_LOOP, + CHEM_AI_BCAST_VALIDITY }; enum { LOOP_WORK, LOOP_END }; @@ -348,6 +358,8 @@ protected: bool interp_enabled{false}; std::unique_ptr interp; + bool ai_surrogate_enabled{false}; + static constexpr uint32_t BUFFER_OFFSET = 5; inline void ChemBCast(void *buf, int count, MPI_Datatype datatype) const { diff --git a/src/Chemistry/MasterFunctions.cpp b/src/Chemistry/MasterFunctions.cpp index 9ee52be82..fce7b4139 100644 --- a/src/Chemistry/MasterFunctions.cpp +++ b/src/Chemistry/MasterFunctions.cpp @@ -159,6 +159,20 @@ std::vector poet::ChemistryModule::GetWorkerPHTCacheHits() const { return ret; } +inline std::vector shuffleVector(const std::vector &in_vector, + uint32_t size_per_prop, + uint32_t wp_count) { + std::vector out_buffer(in_vector.size()); + uint32_t write_i = 0; + for (uint32_t i = 0; i < wp_count; i++) { + for (uint32_t j = i; j < size_per_prop; j += wp_count) { + out_buffer[write_i] = in_vector[j]; + write_i++; + } + } + return out_buffer; +} + inline std::vector shuffleField(const std::vector &in_field, uint32_t size_per_prop, uint32_t prop_count, @@ -247,8 +261,10 @@ inline void poet::ChemistryModule::MasterSendPkgs( send_buffer[end_of_wp + 2] = dt; // current time of simulation (age) in seconds send_buffer[end_of_wp + 3] = this->simtime; - // placeholder for work_package_count - send_buffer[end_of_wp + 4] = 0.; + // current work package start location in field + uint32_t wp_start_index = std::accumulate(wp_sizes_vector.begin(), std::next(wp_sizes_vector.begin(), count_pkgs), 0); + send_buffer[end_of_wp + 4] = wp_start_index; + /* ATTENTION Worker p has rank p+1 */ // MPI_Send(send_buffer, end_of_wp + BUFFER_OFFSET, MPI_DOUBLE, p + 1, @@ -352,8 +368,21 @@ void poet::ChemistryModule::MasterRunParallel(double dt) { int pkg_to_send, pkg_to_recv; int free_workers; int i_pkgs; + int ftype; - int ftype = CHEM_WORK_LOOP; + const std::vector wp_sizes_vector = + CalculateWPSizesVector(this->n_cells, this->wp_size); + + if (this->ai_surrogate_enabled) { + ftype = CHEM_AI_BCAST_VALIDITY; + PropagateFunctionType(ftype); + this->ai_surrogate_validity_vector = shuffleVector(this->ai_surrogate_validity_vector, + this->n_cells, + wp_sizes_vector.size()); + ChemBCast(&this->ai_surrogate_validity_vector.front(), this->n_cells, MPI_INT); + } + + ftype = CHEM_WORK_LOOP; PropagateFunctionType(ftype); MPI_Barrier(this->group_comm); @@ -363,9 +392,6 @@ void poet::ChemistryModule::MasterRunParallel(double dt) { /* start time measurement of sequential part */ seq_a = MPI_Wtime(); - const std::vector wp_sizes_vector = - CalculateWPSizesVector(this->n_cells, this->wp_size); - /* shuffle grid */ // grid.shuffleAndExport(mpi_buffer); std::vector mpi_buffer = diff --git a/src/Chemistry/WorkerFunctions.cpp b/src/Chemistry/WorkerFunctions.cpp index e436b6f13..0e74f0875 100644 --- a/src/Chemistry/WorkerFunctions.cpp +++ b/src/Chemistry/WorkerFunctions.cpp @@ -47,6 +47,14 @@ void poet::ChemistryModule::WorkerLoop() { switch (func_type) { case CHEM_FIELD_INIT: { ChemBCast(&this->prop_count, 1, MPI_UINT32_T); + if (this->ai_surrogate_enabled) { + this->ai_surrogate_validity_vector.reserve(this->n_cells); + } + break; + } + case CHEM_AI_BCAST_VALIDITY: { + // Receive the index vector of valid ai surrogate predictions + MPI_Bcast(&this->ai_surrogate_validity_vector.front(), this->n_cells, MPI_INT, 0, this->group_comm); break; } case CHEM_WORK_LOOP: { @@ -118,7 +126,7 @@ void poet::ChemistryModule::WorkerDoWork(MPI_Status &probe_status, uint32_t iteration; double dt; double current_sim_time; - + uint32_t wp_start_index; int count = double_count; std::vector mpi_buffer(count); @@ -170,6 +178,16 @@ void poet::ChemistryModule::WorkerDoWork(MPI_Status &probe_status, interp->tryInterpolation(s_curr_wp); } + if (this->ai_surrogate_enabled) { + // Map valid predictions from the ai surrogate in the workpackage + for (int i = 0; i < s_curr_wp.size; i++) { + if (this->ai_surrogate_validity_vector[wp_start_index + i] == 1) { + s_curr_wp.mapping[i] = CHEM_AISURR; + } + } + } + + phreeqc_time_start = MPI_Wtime(); WorkerRunWorkPackage(s_curr_wp, current_sim_time, dt); diff --git a/src/Init/ChemistryInit.cpp b/src/Init/ChemistryInit.cpp index 5eb0d01f4..0e512023e 100644 --- a/src/Init/ChemistryInit.cpp +++ b/src/Init/ChemistryInit.cpp @@ -32,6 +32,11 @@ void InitialList::initChemistry(const Rcpp::List &chem) { } } + if (chem.containsElementNamed("ai_surrogate_input_script")) { + std::string ai_surrogate_input_script_path = chem["ai_surrogate_input_script"]; + this->ai_surrogate_input_script = Rcpp::as(Rcpp::Function("normalizePath")(Rcpp::wrap(ai_surrogate_input_script_path))); + } + this->field_header = Rcpp::as>(this->initial_grid.names()); this->field_header.erase(this->field_header.begin()); @@ -65,6 +70,7 @@ InitialList::ChemistryInit InitialList::getChemistryInit() const { chem_init.dht_species = dht_species; chem_init.interp_species = interp_species; + chem_init.ai_surrogate_input_script = ai_surrogate_input_script; if (this->chem_hooks.size() > 0) { if (this->chem_hooks.containsElementNamed("dht_fill")) { diff --git a/src/Init/InitialList.cpp b/src/Init/InitialList.cpp index e4bae7093..1aced099e 100644 --- a/src/Init/InitialList.cpp +++ b/src/Init/InitialList.cpp @@ -82,6 +82,8 @@ void InitialList::importList(const Rcpp::List &setup, bool minimal) { this->chem_hooks = Rcpp::as(setup[static_cast(ExportList::CHEM_HOOKS)]); + + this->ai_surrogate_input_script = Rcpp::as(setup[static_cast(ExportList::AI_SURROGATE_INPUT_SCRIPT)]); } Rcpp::List InitialList::exportList() { @@ -129,6 +131,7 @@ Rcpp::List InitialList::exportList() { out[static_cast(ExportList::CHEM_INTERP_SPECIES)] = Rcpp::wrap(this->interp_species); out[static_cast(ExportList::CHEM_HOOKS)] = this->chem_hooks; + out[static_cast(ExportList::AI_SURROGATE_INPUT_SCRIPT)] = this->ai_surrogate_input_script; return out; } diff --git a/src/Init/InitialList.hpp b/src/Init/InitialList.hpp index bc9555329..3e6ae7654 100644 --- a/src/Init/InitialList.hpp +++ b/src/Init/InitialList.hpp @@ -35,7 +35,7 @@ public: void importList(const Rcpp::List &setup, bool minimal = false); Rcpp::List exportList(); - Field getInitialGrid() const { return Field(this->initial_grid); } + Field getInitialGrid() const { return Field(this->initial_grid); } private: RInside &R; @@ -66,8 +66,9 @@ private: CHEM_DHT_SPECIES, CHEM_INTERP_SPECIES, CHEM_HOOKS, - ENUM_SIZE - }; + AI_SURROGATE_INPUT_SCRIPT, + ENUM_SIZE // Hack: Last element of the enum to show enum size + }; // Grid members static constexpr const char *grid_key = "Grid"; @@ -203,6 +204,9 @@ private: NamedVector dht_species; NamedVector interp_species; + + // Path to R script that the user defines in the input file + std::string ai_surrogate_input_script; Rcpp::List chem_hooks; @@ -233,6 +237,8 @@ public: NamedVector dht_species; NamedVector interp_species; ChemistryHookFunctions hooks; + + std::string ai_surrogate_input_script; }; ChemistryInit getChemistryInit() const; diff --git a/src/poet.cpp b/src/poet.cpp index 48142cbf8..65264c746 100644 --- a/src/poet.cpp +++ b/src/poet.cpp @@ -146,10 +146,13 @@ ParseRet parseInitValues(char **argv, RuntimeParameters ¶ms) { cmdl("interp-min", 5) >> params.interp_min_entries; cmdl("interp-bucket-entries", 20) >> params.interp_bucket_entries; + params.use_ai_surrogate = cmdl["ai-surrogate"]; + if (MY_RANK == 0) { // MSG("Complete results storage is " + BOOL_PRINT(simparams.store_result)); MSG("Work Package Size: " + std::to_string(params.work_package_size)); MSG("DHT is " + BOOL_PRINT(params.use_dht)); + MSG("AI Surrogate is " + BOOL_PRINT(params.use_ai_surrogate)); if (params.use_dht) { // MSG("DHT strategy is " + std::to_string(simparams.dht_strategy)); @@ -253,9 +256,9 @@ static Rcpp::List RunMasterLoop(RInsidePOET &R, const RuntimeParameters ¶ms, if (params.print_progressbar) { chem.setProgressBarPrintout(true); } - + R["TMP_PROPS"] = Rcpp::wrap(chem.getField().GetProps()); + /* SIMULATION LOOP */ - double dSimTime{0}; for (uint32_t iter = 1; iter < maxiter + 1; iter++) { double start_t = MPI_Wtime(); @@ -273,12 +276,71 @@ static Rcpp::List RunMasterLoop(RInsidePOET &R, const RuntimeParameters ¶ms, chem.getField().update(diffusion.getField()); - // chem.getfield().update(diffusion.getfield()); - MSG("Chemistry step"); + if (params.use_ai_surrogate) { + double ai_start_t = MPI_Wtime(); + // Save current values from the tug field as predictor for the ai step + R["TMP"] = Rcpp::wrap(chem.getField().AsVector()); + R.parseEval(std::string( + "predictors <- setNames(data.frame(matrix(TMP, nrow=" + + std::to_string(chem.getField().GetRequestedVecSize()) + ")), TMP_PROPS)")); + R.parseEval("predictors <- predictors[ai_surrogate_species]"); + + // Predict + R.parseEval("predictors_scaled <- preprocess(predictors)"); + + R.parseEval("print('PREDICTORS:')"); + R.parseEval("print(head(predictors))"); + + R.parseEval("prediction <- preprocess(prediction_step(model, predictors_scaled),\ + backtransform = TRUE,\ + outputs = TRUE)"); + + // Validate prediction and write valid predictions to chem field + R.parseEval("validity_vector <- validate_predictions(predictors,\ + prediction)"); + chem.set_ai_surrogate_validity_vector(R.parseEval("validity_vector")); + + std::vector> RTempField = R.parseEval("set_valid_predictions(predictors,\ + prediction,\ + validity_vector)"); + + Field predictions_field = Field(R.parseEval("nrow(predictors)"), + RTempField, + R.parseEval("names(predictors)")); + chem.getField().update(predictions_field); + double ai_end_t = MPI_Wtime(); + R["ai_prediction_time"] = ai_end_t - ai_start_t; + } chem.simulate(dt); + /* AI surrogate iterative training*/ + if (params.use_ai_surrogate) { + double ai_start_t = MPI_Wtime(); + + R["TMP"] = Rcpp::wrap(chem.getField().AsVector()); + R.parseEval(std::string( + "targets <- setNames(data.frame(matrix(TMP, nrow=" + + std::to_string(chem.getField().GetRequestedVecSize()) + ")), TMP_PROPS)")); + R.parseEval("targets <- targets[ai_surrogate_species]"); + + // TODO: Check how to get the correct columns + R.parseEval("target_scaled <- preprocess(targets, outputs = TRUE)"); + + R.parseEval("print('TARGET:')"); + R.parseEval("print(head(target_scaled))"); + + R.parseEval("training_step(model, predictors_scaled, target_scaled, validity_vector)"); + double ai_end_t = MPI_Wtime(); + R["ai_training_time"] = ai_end_t - ai_start_t; + } + + // MPI_Barrier(MPI_COMM_WORLD); + double end_t = MPI_Wtime(); + dSimTime += end_t - start_t; + R["totaltime"] = dSimTime; + // MDL master_iteration_end just writes on disk state_T and // state_C after every iteration if the cmdline option // --ignore-results is not given (and thus the R variable @@ -290,10 +352,6 @@ static Rcpp::List RunMasterLoop(RInsidePOET &R, const RuntimeParameters ¶ms, MSG("End of *coupling* iteration " + std::to_string(iter) + "/" + std::to_string(maxiter)); MSG(); - - // MPI_Barrier(MPI_COMM_WORLD); - double end_t = MPI_Wtime(); - dSimTime += end_t - start_t; } // END SIMULATION LOOP Rcpp::List chem_profiling; @@ -384,16 +442,15 @@ int main(int argc, char *argv[]) { run_params.use_interp, run_params.interp_bucket_entries, run_params.interp_size, - run_params.interp_min_entries}; + run_params.interp_min_entries, + run_params.use_ai_surrogate}; chemistry.masterEnableSurrogates(surr_setup); if (MY_RANK > 0) { chemistry.WorkerLoop(); } else { - init_global_functions(R); - // R.parseEvalQ("mysetup <- setup"); // // if (MY_RANK == 0) { // get timestep vector from // // grid_init function ... // @@ -404,6 +461,22 @@ int main(int argc, char *argv[]) { // MDL: store all parameters // MSG("Calling R Function to store calling parameters"); // R.parseEvalQ("StoreSetup(setup=mysetup)"); + if (run_params.use_ai_surrogate) { + /* Incorporate ai surrogate from R */ + R.parseEvalQ(ai_surrogate_r_library); + /* Use dht species for model input and output */ + R["ai_surrogate_species"] = init_list.getChemistryInit().dht_species.getNames(); + R["out_dir"] = run_params.out_dir; + + const std::string ai_surrogate_input_script_path = init_list.getChemistryInit().ai_surrogate_input_script; + + if (!ai_surrogate_input_script_path.empty()) { + R["ai_surrogate_base_path"] = ai_surrogate_input_script_path.substr(0, ai_surrogate_input_script_path.find_last_of('/') + 1); + R.parseEvalQ("source('" + ai_surrogate_input_script_path + "')"); + } + R.parseEval("model <- initiate_model()"); + R.parseEval("gpu_info()"); + } MSG("Init done on process with rank " + std::to_string(MY_RANK)); diff --git a/src/poet.hpp.in b/src/poet.hpp.in index f9a86be77..cca89e264 100644 --- a/src/poet.hpp.in +++ b/src/poet.hpp.in @@ -20,7 +20,7 @@ ** Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#pragma once +#pragma once #include #include @@ -35,11 +35,11 @@ static const char *poet_version = "@POET_VERSION@"; static const inline std::string kin_r_library = R"(@R_KIN_LIB@)"; static const inline std::string init_r_library = R"(@R_INIT_LIB@)"; - +static const inline std::string ai_surrogate_r_library = R"(@R_AI_SURROGATE_LIB@)"; static const inline std::string r_runtime_parameters = "mysetup"; const std::set flaglist{"ignore-result", "dht", "P", "progress", - "interp"}; + "interp", "ai-surrogate"}; const std::set paramlist{ "work-package-size", "dht-strategy", "dht-size", "dht-snaps", "dht-file", "interp-size", "interp-min", "interp-bucket-entries"}; @@ -66,6 +66,7 @@ struct RuntimeParameters { std::uint32_t interp_min_entries; std::uint32_t interp_bucket_entries; + bool use_ai_surrogate; struct ChemistryParams { // std::string database_path; // std::string input_script;