Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions .github/workflows/cpp-linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: cpp-linter

on:
pull_request:

jobs:
cpp-linter:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
defaults:
run:
shell: bash -el {0}
steps:
- uses: actions/checkout@v4
- name: Install deps (APT)
run: |
sudo apt-get update
sudo apt-get update
sudo apt-get install -y \
lsb-release \
gnupg \
software-properties-common \
git \
python3 \
python3-pip \
mariadb-server \
mariadb-client \
curl \
rabbitmq-server \
supervisor \
python3-venv \
nlohmann-json3-dev \
build-essential \
cmake \
libopenmpi-dev \
libmetis-dev \
libhypre-dev \
libblas-dev \
liblapack-dev \
libhdf5-dev \
hdf5-tools
- name: Install clang-llvm
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 18
- name: Install AMQCPP
run: |
git clone --depth=1 https://github.com/CopernicaMarketingSoftware/AMQP-CPP.git
cd AMQP-CPP/
mkdir -p build/
cd build/
cmake -DCMAKE_CXX_FLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" -DAMQP-CPP_LINUX_TCP=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DAMQP-CPP_BUILD_SHARED=On ..
make && sudo make install
- name: Install caliper
run: |
git clone --depth 1 https://github.com/LLNL/Caliper.git
cd Caliper
mkdir build && cd build
cmake ..
make && sudo make install
- name: Install Torch and HDF5
run: |
pip3 install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
pip3 install h5py
- name: Install AMS
run: |
mkdir build
cd build
cmake -DWITH_RMQ=On \
-DCMAKE_EXPORT_COMPILE_COMMANDS=on \
-DTorch_DIR=$(python -c 'import torch; print(torch.__path__[0])')/share/cmake/Torch \
-DBUILD_SHARED_LIBS=On \
-DCMAKE_C_COMPILER=clang-18 \
-DCMAKE_CXX_COMPILER=clang++-18 \
-DWITH_CALIPER=On \
-DWITH_HDF5=On \
-DWITH_RMQ=On \
-DWITH_TESTS=On \
-DWITH_AMS_DEBUG=On \
-DWITH_CUDA=Off \
-DWITH_MPI=On ..
- uses: cpp-linter/cpp-linter-action@v2
id: linter
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
version: 18
ignore: .github | .gitlab | scripts | build | .git
database: build
extra-args: '-D__AMS_ENABLE_CALIPER__ -D__AMS_ENABLE_HDF5__ -D__AMS_ENABLE_MPI__ -D__AMS_ENABLE_RMQ__'
style: file
tidy-checks: ''
lines-changed-only: true
format-review: true
tidy-review: false
passive-reviews: true
thread-comments: true
- name: Check clang-format linter status
if: steps.linter.outputs.clang-format-checks-failed != 0
run: exit 1
8 changes: 6 additions & 2 deletions src/AMSlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,12 @@ if (WITH_RMQ)
target_link_libraries(AMS PUBLIC $<BUILD_INTERFACE:amqpcpp> PRIVATE $<INSTALL_INTERFACE:amqpcpp>)

if (OPENSSL_FOUND)
target_link_libraries(AMS PUBLIC $<BUILD_INTERFACE:OpenSSL::SSL OpenSSL::Crypto> PRIVATE
$<INSTALL_INTERFACE:OpenSSL::SSL OpenSSL::Crypto>)
target_link_libraries(AMS PUBLIC
$<BUILD_INTERFACE:OpenSSL::SSL>
$<BUILD_INTERFACE:OpenSSL::Crypto>
PRIVATE
$<INSTALL_INTERFACE:OpenSSL::SSL>
$<INSTALL_INTERFACE:OpenSSL::Crypto>)
endif()
# NOTE: We set here the event/event pthreads as public. As there is no easy way
# to do a find package(libevent) and RMQ is not exposing that properly.
Expand Down
23 changes: 16 additions & 7 deletions src/AMSlib/ml/surrogate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ SurrogateModel::SurrogateModel(std::string& model_path, bool isDeltaUQ)

if (!std::experimental::filesystem::exists(Path, ec)) {
FATAL(Surrogate,
"Path to Surrogate Model (%s) Does not exist",
"Path to Surrogate Model (%s) Does not "
"exist",
model_path.c_str())
}

Expand All @@ -69,7 +70,8 @@ SurrogateModel::SurrogateModel(std::string& model_path, bool isDeltaUQ)
auto method_ptr = module.find_method("get_ams_info");
if (!method_ptr) {
FATAL(Surrogate,
"The Surrogate %s is not a valid AMSModel",
"The Surrogate %s is not a valid "
"AMSModel",
model_path.c_str());
}

Expand Down Expand Up @@ -121,7 +123,10 @@ std::tuple<AMSResourceType, torch::DeviceType> SurrogateModel::
return std::make_tuple(AMS_DEVICE, c10::DeviceType::CUDA);
}
// If no parameters or buffers are found, default to unknown
FATAL(Surrogate, "Cannot determine device type of model %s", value.c_str());
FATAL(Surrogate,
"Cannot determine device type of model "
"%s",
value.c_str());
return std::make_tuple(AMS_UNKNOWN,
c10::DeviceType::COMPILE_TIME_MAX_DEVICE_TYPES);
}
Expand Down Expand Up @@ -184,7 +189,8 @@ std::tuple<torch::Tensor, torch::Tensor> SurrogateModel::_evaluate(
{
if (inputs.dtype() != torch_dtype) {
throw std::runtime_error(
"Received inputs of wrong dType. Model is expecting " +
"Received inputs of wrong dType. Model "
"is expecting " +
getDTypeAsString(torch::typeMetaToScalarType(inputs.dtype())) +
" and model is " + getDTypeAsString(torch_dtype));
}
Expand Down Expand Up @@ -214,7 +220,8 @@ std::tuple<torch::Tensor, torch::Tensor> SurrogateModel::evaluate(
{
if (Inputs.size() == 0) {
throw std::invalid_argument(
"Input Vector should always contain at least one tensor");
"Input Vector should always contain at "
"least one tensor");
}

torch::DeviceType InputDevice = Inputs[0].device().type();
Expand All @@ -225,12 +232,14 @@ std::tuple<torch::Tensor, torch::Tensor> SurrogateModel::evaluate(
for (auto& In : Inputs) {
if (InputDevice != In.device().type()) {
throw std::invalid_argument(
"Unsupported feature, application domain tensors are on different "
"Unsupported feature, application "
"domain tensors are on different "
"devices\n");
}
if (InputDType != torch::typeMetaToScalarType(In.dtype())) {
throw std::invalid_argument(
"Unsupported feature, application domain tensors have different data "
"Unsupported feature, application "
"domain tensors have different data "
"types\n");
}
}
Expand Down