Flower 1.7.0
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
andNumPyClient
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 (viastart_simulation
) and networked clients (viastart_client
). It's also the first preview of new abstractions likeContext
andRecordSet
. Clients can access state of typeRecordSet
viastate: RecordSet = self.context.state
. Changes to thisRecordSet
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 Appple 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). Thexgboost-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
andprotobuf
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 viastart_numpy_client
. In our efforts to consolidate framework APIs, we have introduced changes, and now all client types should start viastart_client
. To continue usingNumPyClient
clients, you simply need to first call the.to_client()
method and then pass returnedClient
object tostart_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
inflower-client
a required positional arg (#2673) -
Rename
certificates
toroot_certificates
inDriver
(#2890) -
Drop experimental
Task
fields (#2866, #2865)Experimental fields
sa
,legacy_server_message
andlegacy_client_message
were removed fromTask
message. The removed fields are superseded by the newRecordSet
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.