https://github.com/amirabbasasadi/rockyml
⛰️ RockyML - A High-Performance Scientific Computing Framework for Non-smooth Machine Learning Problems
https://github.com/amirabbasasadi/rockyml
cplusplus cpp deep-learning deep-neural-networks distributed-computing high-performance machine-learning mpi optimization parallel-computing scientific-computing
Last synced: about 1 year ago
JSON representation
⛰️ RockyML - A High-Performance Scientific Computing Framework for Non-smooth Machine Learning Problems
- Host: GitHub
- URL: https://github.com/amirabbasasadi/rockyml
- Owner: amirabbasasadi
- License: apache-2.0
- Created: 2022-11-22T22:43:54.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-04-07T01:53:16.000Z (about 3 years ago)
- Last Synced: 2025-04-13T16:30:14.531Z (about 1 year ago)
- Topics: cplusplus, cpp, deep-learning, deep-neural-networks, distributed-computing, high-performance, machine-learning, mpi, optimization, parallel-computing, scientific-computing
- Language: C++
- Homepage: https://amirabbasasadi.github.io/RockyML
- Size: 18.6 MB
- Stars: 19
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
README

📔 Documentation : amirabbasasadi.github.io/RockyML
## Tutorials
### Zagros Tutorials
- [Using with CMake](https://amirabbasasadi.github.io/RockyML/build.html)
- [Create your first optimizer with Dena and Zagros](https://amirabbasasadi.github.io/RockyML/zagros_minimal.html)
- [Define a custom optimization problem in Zagros](https://amirabbasasadi.github.io/RockyML/zagros_system.html)
- [Block optimization for large problems](https://amirabbasasadi.github.io/RockyML/block_optimization.html)
- [Distributed optimization](https://amirabbasasadi.github.io/RockyML/zagros_distributed.html)
- [Designing search algorithms using Dena](https://amirabbasasadi.github.io/RockyML/dena.html)
- [Test problems for benchmarking optimizers](https://amirabbasasadi.github.io/RockyML/landscapes.html)
## Components
### Zagros
Design Goals:
- Providing a language called Dena for designing arbitrary complex optimizers by combining
- Modular and parallel search strategies: Genetic, PSO, EDA, ...
- Communication strategies for distributed optimization on top of MPI
- Analyzer strategies for analyzing objective functions
- Blocking strategies for block optimization
- Logging strategies for tracking optimization experiments on local system or a remote server
- Hybrid parallelism: multi-threading in each node and message passing across nodes (MPI)
- Block optimization for using memory-intensive optimizers for large number of variables
```cpp
#include
#include
#include
using namespace rocky::zagros;
using namespace rocky::zagros::dena;
int main(int argc, char* argv[]){
MPI_Init(&argc, &argv);
// define the optimization problem
const int dim = 100;
benchmark::rastrigin problem(dim);
// recording the result of optimization
local_log_handler log_handler("result.csv");
// define the optimizer
auto optimizer = container::create("A", 300)
>> init::uniform("A")
>> run::n_times(500,
mutate::gaussian("A")
>> run::with_probability(0.2,
crossover::differential_evolution("A")
)
>> log::local::best("A", log_handler)
);
// create a runtime for executing the optimizer
basic_runtime runtime(&problem);
runtime.run(optimizer);
MPI_Finalize();
return 0;
}
```
### Etna (Work in progress)
Building blocks for designing non-differentiable neural networks
- Fast, low overhead, and thread-safe
- Various components:
- Standard deep learning layers
- Discrete and integer layers
- Combinatorial layers
- Stochastic layers
- Dynamic layers
## About
### Publications
If you use RockyML in your research, please cite it as follows:
```bib
@software{RockyML,
author = {Asadi, Amirabbas},
doi = {10.5281/zenodo.7612838},
month = {2},
title = {{RockyML, A Scientific Computing Framework for Non-smooth Machine Learning Problems}},
url = {https://github.com/amirabbasasadi/RockyML},
year = {2023}
}
```