Quickstart fastai¶
In this federated learning tutorial we will learn how to train a SqueezeNet model on MNIST using Flower and fastai. It is recommended to create a virtual environment and run everything within a virtualenv.
Then, clone the code example directly from GitHub:
git clone --depth=1 https://github.com/adap/flower.git _tmp \
&& mv _tmp/examples/quickstart-fastai . \
&& rm -rf _tmp && cd quickstart-fastai
This will create a new directory called quickstart-fastai containing the following files:
quickstart-fastai
├── fastai_example
│ ├── client_app.py # Defines your ClientApp
│ ├── server_app.py # Defines your ServerApp
│ └── task.py # Defines your model, training and data loading
├── pyproject.toml # Project metadata like dependencies and configs
└── README.md
Next, activate your environment, then run:
# Navigate to the example directory
$ cd path/to/quickstart-fastai
# Install project and dependencies
$ pip install -e .
This example by default runs the Flower Simulation Engine, creating a federation of 10 nodes using FedAvg as the aggregation strategy. The dataset will be partitioned using Flower Dataset’s IidPartitioner. Let’s run the project:
# Run with default arguments
$ flwr run .
With default arguments you will see an output like this one:
Loading project configuration...
Success
INFO : Starting Flower ServerApp, config: num_rounds=3, no round_timeout
INFO :
INFO : [INIT]
INFO : Using initial global parameters provided by strategy
INFO : Starting evaluation of initial global parameters
INFO : Evaluation returned no results (`None`)
INFO :
INFO : [ROUND 1]
INFO : configure_fit: strategy sampled 5 clients (out of 10)
INFO : aggregate_fit: received 5 results and 0 failures
WARNING : No fit_metrics_aggregation_fn provided
INFO : configure_evaluate: strategy sampled 5 clients (out of 10)
INFO : aggregate_evaluate: received 5 results and 0 failures
INFO :
INFO : [ROUND 2]
INFO : configure_fit: strategy sampled 5 clients (out of 10)
INFO : aggregate_fit: received 5 results and 0 failures
INFO : configure_evaluate: strategy sampled 5 clients (out of 10)
INFO : aggregate_evaluate: received 5 results and 0 failures
INFO :
INFO : [ROUND 3]
INFO : configure_fit: strategy sampled 5 clients (out of 10)
INFO : aggregate_fit: received 5 results and 0 failures
INFO : configure_evaluate: strategy sampled 5 clients (out of 10)
INFO : aggregate_evaluate: received 5 results and 0 failures
INFO :
INFO : [SUMMARY]
INFO : Run finished 3 round(s) in 143.02s
INFO : History (loss, distributed):
INFO : round 1: 2.699497365951538
INFO : round 2: 0.9549586296081543
INFO : round 3: 0.6627192616462707
INFO : History (metrics, distributed, evaluate):
INFO : {'accuracy': [(1, 0.09766666889190674),
INFO : (2, 0.6948333323001862),
INFO : (3, 0.7721666693687439)]}
INFO :
You can also override the parameters defined in the [tool.flwr.app.config]
section
in pyproject.toml
like this:
# Override some arguments
$ flwr run . --run-config num-server-rounds=5
참고
Check the source code of this
tutorial in examples/quickstart-fasai
in the Flower GitHub repository.