Published

Announcing Flower 1.7

Photo of Charles Beauville
Charles Beauville
Data Scientist at Flower Labs

The Flower Team is excited to announce the release of Flower 1.7 stable! Flower is a friendly framework for collaborative AI and data science. It makes novel approaches such as federated learning, federated evaluation, federated analytics, and fleet learning accessible to a wide audience of researchers and engineers.

Thanks to our contributors

We would like to give our special thanks to all the contributors who made the new version of Flower possible (in git shortlog order):

Aasheesh Singh, Adam Narozniak, Aml Hassan Esmil, Charles Beauville, Daniel J. Beutel, Daniel Nata Nugraha, Edoardo Gabrielli, Gustavo Bertoli, HelinLin, Heng Pan, Javier, M S Chaitanya Kumar, Mohammad Naseri, Nikos Vlachakis, Pritam Neog, Robert Kuska, Robert Steiner, Taner Topal, Yahia Salaheldin Shaaban, Yan Gao, Yasar Abbas

What's new?

  • Introduce stateful clients (experimental) (#2770, #2686, #2696, #2643, #2769)

    Subclasses of Client and NumPyClient can now store local state that remains on the client. Let's start with the highlight first: this new feature is compatible with both simulated clients (via start_simulation) and networked clients (via start_client). It's also the first preview of new abstractions like Context and RecordSet. Clients can access state of type RecordSet via state: RecordSet = self.context.state. Changes to this RecordSet are preserved across different rounds of execution to enable stateful computations in a unified way across simulation and deployment.

  • Improve performance (#2293)

    Flower is faster than ever. All FedAvg-derived strategies now use in-place aggregation to reduce memory consumption. The Flower client serialization/deserialization has been rewritten from the ground up, which results in significant speedups, especially when the client-side training time is short.

  • Support Federated Learning with Apple MLX and Flower (#2693)

    Flower has official support for federated learning using Apple MLX via the new quickstart-mlx code example.

  • Introduce new XGBoost cyclic strategy (#2666, #2668)

    A new strategy called FedXgbCyclic supports a client-by-client style of training (often called cyclic). The xgboost-comprehensive code example shows how to use it in a full project. In addition to that, xgboost-comprehensive now also supports simulation mode. With this, Flower offers best-in-class XGBoost support.

  • Support Python 3.11 (#2394)

    Framework tests now run on Python 3.8, 3.9, 3.10, and 3.11. This will ensure better support for users using more recent Python versions.

  • Update gRPC and ProtoBuf dependencies (#2814)

    The grpcio and protobuf dependencies were updated to their latest versions for improved security and performance.

  • Introduce Docker image for Flower server (#2700, #2688, #2705, #2695, #2747, #2746, #2680, #2682, #2701)

    The Flower server can now be run using an official Docker image. A new how-to guide explains how to run Flower using Docker. An official Flower client Docker image will follow.

  • Introduce flower-via-docker-compose example (#2626)

  • Introduce quickstart-sklearn-tabular example (#2719)

  • Introduce custom-metrics example (#1958)

  • Update code examples to use Flower Datasets (#2450, #2456, #2318, #2712)

    Several code examples were updated to use Flower Datasets.

  • General updates to Flower Examples (#2381, 2805, 2782, 2806, 2829, 2825, 2816, #2726, #2659, #2655)

    Many Flower code examples received substantial updates.

  • Update Flower Baselines

  • Improve documentation (#2674, #2480, #2826, #2727, #2761, #2900)

  • Improved testing and development infrastructure (#2797, #2676, #2644, #2656, #2848, #2675, #2735, #2767, #2732, #2744, #2681, #2699, #2745, #2734, #2731, #2652, #2720, #2721, #2717, #2864, #2694, #2709, #2658, #2796, #2692, #2657, #2813, #2661, #2398)

    The Flower testing and development infrastructure has received substantial updates. This makes Flower 1.7 the most tested release ever.

  • Update dependencies (#2753, #2651, #2739, #2837, #2788, #2811, #2774, #2790, #2751, #2850, #2812, #2872, #2736, #2756, #2857, #2757, #2810, #2740, #2789)

  • General improvements (#2803, 2847, 2877, 2690, 2889, 2874, 2819, 2689, 2457, 2870, 2669, 2876, 2885, 2858, 2867, 2351, 2886, 2860, 2828, 2869, 2875, 2733, 2488, 2646, 2879, 2821, 2855, 2800, 2807, 2801, 2804, 2851, 2787, 2852, #2672, #2759)

Incompatible changes

  • Deprecate start_numpy_client (#2563, #2718)

    Until now, clients of type NumPyClient needed to be started via start_numpy_client. In our efforts to consolidate framework APIs, we have introduced changes, and now all client types should start via start_client. To continue using NumPyClient clients, you simply need to first call the .to_client() method and then pass returned Client object to start_client. The examples and the documentation have been updated accordingly.

  • Deprecate legacy DP wrappers (#2749)

    Legacy DP wrapper classes are deprecated, but still functional. This is in preparation for an all-new pluggable version of differential privacy support in Flower.

  • Make optional arg --callable in flower-client a required positional arg (#2673)

  • Rename certificates to root_certificates in Driver (#2890)

  • Drop experimental Task fields (#2866, #2865)

    Experimental fields sa, legacy_server_message and legacy_client_message were removed from Task message. The removed fields are superseded by the new RecordSet abstraction.

  • Retire MXNet examples (#2724)

    The development of the MXNet fremework has ended and the project is now archived on GitHub. Existing MXNet examples won't receive updates.