Announcing Flower 1.7

4 min read Original article ↗

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.

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

  • 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)

  • 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.