Flower Android Client Example with Kotlin and TensorFlow Lite 2022#
This example is similar to the Flower Android Example in Java:
This example demonstrates a federated learning setup with Android Clients. The training on Android is done on a CIFAR10 dataset using TensorFlow Lite. The setup is as follows:
The CIFAR10 dataset is randomly split across 10 clients. Each Android client holds a local dataset of 5000 training examples and 1000 test examples.
The FL server runs in Python but all the clients run on Android.
We use a strategy called FedAvgAndroid for this example.
The strategy is vanilla FedAvg with a custom serialization and deserialization to handle the Bytebuffers sent from Android clients to Python server.
Start by cloning the example project. We prepared a single-line command that you can copy into your shell which will checkout the example for you:
git clone --depth=1 https://github.com/adap/flower.git && mv flower/examples/android-kotlin . && rm -rf flower && cd android-kotlin
Download the training and testing data from https://www.dropbox.com/s/coeixr4kh8ljw6o/cifar10.zip?dl=1 and extract them to
Download the TFLite model from https://github.com/FedCampus/dyn_flower_android_drf/files/11858642/cifar10.zip to
gen_tflite/README.md for information on how to convert the CIFAR10 models to a
Project dependencies (such as
flwr) are defined in
pyproject.toml. We recommend Poetry to install those dependencies and manage your virtual environment (Poetry installation), but feel free to use a different way of installing dependencies and managing virtual environments if you have other preferences.
poetry install poetry shell
Poetry will install all your dependencies in a newly created virtual environment. To verify that everything works correctly you can run the following command:
poetry run python3 -c "import flwr"
If you don’t see any errors you’re good to go!
Alternatively, with Pip.
python3 -m pip install -r requirements.txt
Run the demo#
Start the Flower server at
Or without the "3" on windows.
Install the app on physical Android devices and launch it.
Note: the highest tested JDK version the app supports is 16; it fails to build using JDK 19 on macOS.
In the user interface, fill in:
Device number: a unique number among 1 ~ 10. This number is used to choose the partition of the training dataset.
Server IP: an IPv4 address of the computer your backend server is running on. You can probably find it in your system network settings.
Server port: 8080.
Push the first button and load the dataset. This may take a minute.
Push the second button and start the training.