Federated Learning Frugality and Efficiency via Simulation (FaLaFEℓS 🧆).
├── beagle Analysis tool making use of the fryer and the simulator
├── diagrams
├── fryer Tool and library to manage Simgrid platforms and FaLaFEℓS config files
├── simulator The simulator based on Simgrid
│ ├── cmake Contains cmake utils to find the libraries
│ ├── doc Simulator documentation
│ └── src Simulator source code
└── xml
├── fried
├── platform
└── raw
The beagle
and the fryer
are built with Cargo which is Rust's package manager.
The simulator
is developed in C++ and we use CMake to build it.
You can either use docker and docker-compose to build everything, or build it from source.
Using docker-compose:
cd falafels
docker-compose build
Two images will be built: falafels-simulator
that only contains the simulator itself, and falafels-beagle
that packages the simulator
, the fryer
and the beagle
.
Download Simgrid directly from their repository and checkout this specific commit:
git clone https://framagit.org/simgrid/simgrid.git
git checkout 534ecd55c0558492fff7560baa516b78f971f20a
Simgrid release 3.35 is not working because of some bugs and features that are only implemented into recent developments.
Take a look at this page to download Simgrid dependencies. Here we only use mandatory ones.
Then compile and install:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr \
-Denable_compile_optimizations=ON \
-Denable_lto=OFF \
-Denable_smpi=OFF \
-Denable_documentation=OFF \
-Denable_python=OFF
make -j $(nproc)
make install
# You may have to re-link libraries
sudo ldconfig
Build the simulator:
cd simulator
mkdir build
cd build
cmake ..
make
make install
Test a run:
make && ./main ../xml/simgrid-platform.xml ../xml/fried-falafels.xml
See Rust installation to install Rust and Cargo.
The following dependencies are required to build the beagle: pkg-config
libssl-dev
cd beagle
cargo install --path .
Some experiments can be found in the folder experiments
and you can run them yourself.
cd experiments/evolution/simulation_time_criteria/
./exec-w-docker.sh
# or without docker
./exec.sh