An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          








DOI






📔 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}
}
```