From 319a352c4cb80eeaae4d330650e257cdd6c70a5c Mon Sep 17 00:00:00 2001 From: Rudolf Weeber Date: Mon, 12 Aug 2024 12:55:57 +0200 Subject: [PATCH] s --- CMakeLists.txt | 60 ++++++++++++++++--------- src/core/CMakeLists.txt | 6 +++ src/core/ml_metatensor/CMakeLists.txt | 3 +- src/core/ml_metatensor/load_model.hpp | 65 --------------------------- src/core/ml_metatensor/stub.cpp | 2 - 5 files changed, 47 insertions(+), 89 deletions(-) delete mode 100644 src/core/ml_metatensor/load_model.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 662ec25815..2cc06edb38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -605,27 +605,45 @@ if(ESPRESSO_BUILD_WITH_METATENSOR) # expression from `metatensor_torch` find_package(Torch REQUIRED) - # cmake-format: off - set(METATENSOR_URL_BASE "https://github.com/lab-cosmo/metatensor/releases/download") - set(METATENSOR_CORE_VERSION "0.1.8") - - include(FetchContent) - FetchContent_Declare( - metatensor - URL "${METATENSOR_URL_BASE}/metatensor-core-v${METATENSOR_CORE_VERSION}/metatensor-core-cxx-${METATENSOR_CORE_VERSION}.tar.gz" - URL_HASH SHA1=3ed389770e5ec6dbb8cbc9ed88f84d6809b552ef - ) - - # workaround for https://gitlab.kitware.com/cmake/cmake/-/issues/21146 - if(NOT DEFINED metatensor_SOURCE_DIR OR NOT EXISTS "${metatensor_SOURCE_DIR}") - message(STATUS "Fetching metatensor v${METATENSOR_CORE_VERSION} from github") - FetchContent_Populate(metatensor) - endif() - # cmake-format: on - - set(BUILD_SHARED_LIBS on CACHE BOOL "") - set(METATENSOR_INSTALL_BOTH_STATIC_SHARED off CACHE BOOL "") - add_subdirectory("${metatensor_SOURCE_DIR}") +# # cmake-format: off +# set(METATENSOR_URL_BASE "https://github.com/lab-cosmo/metatensor/releases/download") +# set(METATENSOR_CORE_VERSION "0.1.8") +# set(METATENSOR_TORCH_VERSION "0.5.3") +# +# include(FetchContent) +# set(BUILD_SHARED_LIBS on CACHE BOOL "") +# FetchContent_Declare( +# metatensor +# URL "${METATENSOR_URL_BASE}/metatensor-core-v${METATENSOR_CORE_VERSION}/metatensor-core-cxx-${METATENSOR_CORE_VERSION}.tar.gz" +# URL_HASH SHA1=3ed389770e5ec6dbb8cbc9ed88f84d6809b552ef +# ) +# set(BUILD_SHARED_LIBS on CACHE BOOL "") +# +# # workaround for https://gitlab.kitware.com/cmake/cmake/-/issues/21146 +# if(NOT DEFINED metatensor_SOURCE_DIR OR NOT EXISTS "${metatensor_SOURCE_DIR}") +# message(STATUS "Fetching metatensor v${METATENSOR_CORE_VERSION} from github") +# FetchContent_Populate(metatensor) +# endif() +# set(BUILD_SHARED_LIBS on CACHE BOOL "") +# +# FetchContent_Declare( +# metatensor_torch +# URL "${METATENSOR_URL_BASE}/metatensor-torch-v${METATENSOR_TORCH_VERSION}/metatensor-torch-cxx-${METATENSOR_TORCH_VERSION}.tar.gz" +# ) +# set(BUILD_SHARED_LIBS on CACHE BOOL "") +# if(NOT DEFINED metatensor_torch_SOURCE_DIR OR NOT EXISTS "${metatensor_torch_SOURCE_DIR}") +# message(STATUS "Fetching metatensor torch v${METATENSOR_CORE_VERSION} from github") +# FetchContent_Populate(metatensor_torch) +# endif() +# # cmake-format: on +# set(BUILD_SHARED_LIBS on CACHE BOOL "") +# +# set(METATENSOR_INSTALL_BOTH_STATIC_SHARED on CACHE BOOL "") +# add_subdirectory("${metatensor_SOURCE_DIR}") +# add_subdirectory("${metatensor_torch_SOURCE_DIR}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") + find_package(metatensor) + find_package(metatensor_torch) endif() # diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ce44167449..8e613015fe 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -73,6 +73,11 @@ if(ESPRESSO_BUILD_WITH_CUDA) install(TARGETS espresso_cuda LIBRARY DESTINATION ${ESPRESSO_INSTALL_PYTHON}/espressomd) endif() +if(ESPRESSO_BUILD_WITH_METATENSOR) + target_link_libraries(espresso_core PUBLIC "${TORCH_LIBRARIES}") + target_link_libraries(espresso_core PUBLIC metatensor::shared) + target_link_libraries(espresso_core PUBLIC metatensor_torch) +endif() install(TARGETS espresso_core LIBRARY DESTINATION ${ESPRESSO_INSTALL_PYTHON}/espressomd) @@ -111,6 +116,7 @@ add_subdirectory(immersed_boundary) add_subdirectory(integrators) add_subdirectory(io) add_subdirectory(lb) +add_subdirectory(ml_metatensor) add_subdirectory(magnetostatics) add_subdirectory(nonbonded_interactions) add_subdirectory(object-in-fluid) diff --git a/src/core/ml_metatensor/CMakeLists.txt b/src/core/ml_metatensor/CMakeLists.txt index fa3eb2b411..e7c3e6b474 100644 --- a/src/core/ml_metatensor/CMakeLists.txt +++ b/src/core/ml_metatensor/CMakeLists.txt @@ -17,4 +17,5 @@ # along with this program. If not, see . # -#target_sources(espresso_core PRIVATE bonded_interaction_data.cpp) +target_sources(espresso_core PRIVATE stub.cpp) +target_sources(espresso_core PRIVATE load_model.cpp) diff --git a/src/core/ml_metatensor/load_model.hpp b/src/core/ml_metatensor/load_model.hpp deleted file mode 100644 index e358ff8162..0000000000 --- a/src/core/ml_metatensor/load_model.hpp +++ /dev/null @@ -1,65 +0,0 @@ -using ModelPtr = std::unique_ptr; -using NeighborListRequest = - std::pair; - - -ModelPtr load_model(const std::string& path, const std::string& extensions_directory, torch::device device) { - - return std::make_unique( - metatensor_torch::load_atomistic_model(path, extensions) - ); -} - - -metatensor_torch::ModelCapabilitiesHolder -get_model_capabilites(const ModelPtr& model) { - auto capabilities_ivalue = model->run_method("capabilities"); - return capabilities_ivalue.toCustomClass(); -}; - -bool modle_provides_energy(const torch_metatensor::ModelCapabilitiesHolder& capabilities) { - return (capabilities->outputs().contains("energy")); -} - - -metatensor_toch::ModelMetadataHolder get_model_metadata(ModelPtr& model) { - auto metadata_ivalue = model->run_method("metadata"); - return metadata_ivalue.toCustomClass(); -} - - - -double required_range(const metatensor_torch::ModelCapabilities& capabilities, const metatensor_torch::ModelEvaluatoinOptoins& evaluation_optoins) { - return range = mts_data->capabilities->engine_interaction_range(evaluation_options->length_unit()); -} - -std::vector get_requested_neighbor_lists(ModelPtr& model) { - - std::vector res; - auto requested_nl = mts_data->model->run_method("requested_neighbor_lists"); - for (const auto& ivalue: requested_nl.toList()) { - auto options = ivalue.get().toCustomClass(); - auto cutoff = options->engine_cutoff(mts_data->evaluation_options->length_unit()); - - res.push_back({cutoff, options}); - } - return res; -} - - -torch_metatensor::ModelEvaluationOptions -init_evaluation_optoins(std::string length_unit, std::string energy_unit, torch_metatensor::ModelCapabilities& capabilities) { - torch_metatensor::ModelEvaluationOptoins evaluaoitn_optoins = torch::make_intrusive(); - this->evaluation_options->set_length_unit(std::move(length_unit)); - - auto output = torch::make_intrusive(); - output->explicit_gradients = {}; - output->set_quantity("energy"); - output->set_unit(std::move(energy_unit)); - output->per_atom = capabilities->outputs.at("energy").per_atom; - - evaluation_options->outputs.insert("energy", output); - return evaluation_options; -} - - diff --git a/src/core/ml_metatensor/stub.cpp b/src/core/ml_metatensor/stub.cpp index 67eb68ef77..806d0ec8a3 100644 --- a/src/core/ml_metatensor/stub.cpp +++ b/src/core/ml_metatensor/stub.cpp @@ -12,6 +12,4 @@ #include #include -torch::Tensor test_tensor{}; - #endif