Published

Announcing Flower 1.5

Photo of Taner Topal
Taner Topal
COO at Flower Labs

The Flower Team is excited to announce the release of Flower 1.5 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):

achiverram28, Adam Narozniak, Anass Anhari, Charles Beauville, Dana-Farber, Daniel J. Beutel, Daniel Nata Nugraha, Edoardo Gabrielli, eunchung, Gustavo Bertoli, Heng Pan, Javier, Mahdi, Ruth Galindo, Steven Hé (Sīchàng), Taner Topal

What's new?

  • Introduce new simulation engine (#1969, #2221, #2248)

    The new simulation engine has been rewritten from the ground up, yet it remains fully backwards compatible. It offers much improved stability and memory handling, especially when working with GPUs. Simulations transparently adapt to different settings to scale simulation in CPU-only, CPU+GPU, multi-GPU, or multi-node multi-GPU environments.

    Comprehensive documentation includes a new how-to run simulations guide, new simulation-pytorch and simulation-tensorflow notebooks, and a new YouTube tutorial series.

  • Restructure Flower Docs (#1824, #1865, #1884, #1887, #1919, #1922, #1920, #1923, #1924, #1962, #2006, #2133, #2203, #2215, #2122, #2223, #2219, #2232, #2233, #2234, #2235, #2237, #2238, #2242, #2231, #2243, #2227)

    Much effort went into a completely restructured Flower docs experience. The documentation on flower.ai/docs is now divided into Flower Framework, Flower Baselines, Flower Android SDK, Flower iOS SDK, and code example projects.

  • Introduce Flower Swift SDK (#1858, #1897)

    This is the first preview release of the Flower Swift SDK. Flower support on iOS is improving, and alongside the Swift SDK and code example, there is now also an iOS quickstart tutorial.

  • Introduce Flower Android SDK (#2131)

    This is the first preview release of the Flower Kotlin SDK. Flower support on Android is improving, and alongside the Kotlin SDK and code example, there is now also an Android quickstart tutorial.

  • Introduce new end-to-end testing infrastructure (#1842, #2071, #2072, #2068, #2067, #2069, #2073, #2070, #2074, #2082, #2084, #2093, #2109, #2095, #2140, #2137, #2165)

    A new testing infrastructure ensures that new changes stay compatible with existing framework integrations or strategies.

  • Deprecate Python 3.7

    Since Python 3.7 reached its end of life (EOL) on 2023-06-27, support for Python 3.7 is now deprecated and will be removed in an upcoming release.

  • Add new FedTrimmedAvg strategy (#1769, #1853)

    The new FedTrimmedAvg strategy implements Trimmed Mean by Dong Yin, 2018.

  • Introduce start_driver (#1697)

    In addition to start_server and using the raw Driver API, there is a new start_driver function that allows for running start_server scripts as a Flower driver with only a single-line code change. Check out the mt-pytorch code example to see a working example using start_driver.

  • Add parameter aggregation to mt-pytorch code example (#1785)

    The mt-pytorch example shows how to aggregate parameters when writing a driver script. The included driver.py and server.py have been aligned to demonstrate both the low-level way and the high-level way of building server-side logic.

  • Migrate experimental REST API to Starlette (2171)

    The (experimental) REST API used to be implemented in FastAPI, but it has now been migrated to use Starlette directly.

    Please note: The REST request-response API is still experimental and will likely change significantly over time.

  • Introduce experimental gRPC request-response API (#1867, #1901)

    In addition to the existing gRPC API (based on bidirectional streaming) and the experimental REST API, there is now a new gRPC API that uses a request-response model to communicate with client nodes.

    Please note: The gRPC request-response API is still experimental and will likely change significantly over time.

  • Replace the experimental start_client(rest=True) with the new start_client(transport="rest") (#1880)

    The (experimental) start_client argument rest was deprecated in favour of a new argument transport. start_client(transport="rest") will yield the same behaviour as start_client(rest=True) did before. All code should migrate to the new argument transport. The deprecated argument rest will be removed in a future release.

  • Add a new gRPC option (#2197)

    We now start a gRPC server with the grpc.keepalive_permit_without_calls option set to 0 by default. This prevents the clients from sending keepalive pings when there is no outstanding stream.

  • Improve example notebooks (#2005)

    There's a new 30min Federated Learning PyTorch tutorial!

  • Example updates (#1772, #1873, #1981, #1988, #1984, #1982, #2112, #2144, #2174, #2225, #2183)

    Many examples have received significant updates, including simplified advanced-tensorflow and advanced-pytorch examples, improved macOS compatibility of TensorFlow examples, and code examples for simulation. A major upgrade is that all code examples now have a requirements.txt (in addition to pyproject.toml).

  • General improvements (#1872, #1866, #1884, #1837, #1477, #2171)

    Flower received many improvements under the hood, too many to list here.

Incompatible changes

None