Table of Contents

Flower

Installation

Conda is not needed to install Flower and just loads additional complexity - it works quite happily with the standard pip command including in later versions of the Python 3 modules installed on our HPC facilities.

The easiest approach is to load one of our Python software modules, and then create a new python venv area to hold it. In the example below we create the flowers folder with a new Python venv and use pip to install the latest Flowers package:

$ module load Python/3.11
$ python -m venv flower
$ cd flower
$ source bin/activate
$ pip install flwr
Collecting flwr
  Downloading flwr-1.16.0-py3-none-any.whl (532 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 532.1/532.1 kB 6.1 MB/s eta 0:00:00
Collecting cryptography<45.0.0,>=44.0.1
  Downloading cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 28.4 MB/s eta 0:00:00
...
...
Installing collected packages:  ...
$

If you need to install the ray dependency, just substitute the pip command for the one which installs flwr[simulation] instead:

$ module load Python/3.11
$ python -m venv flower
$ cd flower
$ source bin/activate
$ pip install "flwr[simulation]"
Collecting flwr
  Downloading flwr-1.16.0-py3-none-any.whl (532 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 532.1/532.1 kB 6.1 MB/s eta 0:00:00
Collecting cryptography<45.0.0,>=44.0.1
  Downloading cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 28.4 MB/s eta 0:00:00
Collecting ray==2.31.0
  Downloading ray-2.31.0-cp311-cp311-manylinux2014_x86_64.whl (66.7 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.7/66.7 MB 19.3 MB/s eta 0:00:00
...
...
Installing collected packages:  ...
$

Testing

$ module load Python/3.11
$ cd flower
$ source bin/activate
$ python -c "import flwr;print(flwr.__version__)"
1.16.0
$

Using Flower

You will need to load the required Python software module, then activate the Flowers virtual environment:

$ module load Python/3.11
$ cd flower
$ source bin/activate
$ bin/flower-simulation --help
usage: flower-simulation [-h] --app APP --num-supernodes NUM_SUPERNODES [--run-config RUN_CONFIG] [--backend BACKEND] [--backend-config BACKEND_CONFIG]
                         [--enable-tf-gpu-growth] [--verbose] [--flwr-dir FLWR_DIR] [--run-id RUN_ID]

Start a Flower simulation

options:
  -h, --help            show this help message and exit
  --app APP             Path to a directory containing a FAB-like structure with a pyproject.toml.
  --num-supernodes NUM_SUPERNODES
                        Number of simulated SuperNodes.
  --run-config RUN_CONFIG
                        Override configuration key-value pairs.
  --backend BACKEND     Simulation backend that executes the ClientApp.
  --backend-config BACKEND_CONFIG
                        A JSON formatted stream, e.g '{"<keyA>":<value>, "<keyB>":<value>}' to configure a backend. Values supported in <value> are
                        those included by `flwr.common.typing.ConfigsRecordValues`.
  --enable-tf-gpu-growth
                        Enables GPU growth on the main thread. This is desirable if you make use of a TensorFlow model on your `ServerApp` while having
                        your `ClientApp` running on the same GPU. Without enabling this, you might encounter an out-of-memory error because TensorFlow
                        by default allocates all GPU memory.Read more about how `tf.config.experimental.set_memory_growth()` works in the TensorFlow
                        documentation: https://www.tensorflow.org/api/stable.
  --verbose             When unset, only INFO, WARNING and ERROR log messages will be shown. If set, DEBUG-level logs will be displayed.
  --flwr-dir FLWR_DIR   The path containing installed Flower Apps. By default, this value is equal to: - `$FLWR_HOME/` if `$FLWR_HOME` is defined -
                        `$XDG_DATA_HOME/.flwr/` if `$XDG_DATA_HOME` is defined - `$HOME/.flwr/` in all other cases
  --run-id RUN_ID       Sets the ID of the run started by the Simulation Engine.
$


Back to FAQ