v1.5
Highlights
We are excited to announce the release of OpenFL 1.5! This release brings the following changes:
- New Workflows Interface (Experimental) - a new way of composing federated learning experiments inspired by Metaflow. Enables the creation of custom aggregator and collaborators tasks. This initial release is intended for simulation on a single node (using the LocalRuntime); distributed execution (FederatedRuntime) to be enabled in a future release.
- New use cases enabled by the workflow interface:
- End-of-round validation with aggregator dataset
- Privacy Meter - Privacy meter, based on state-of-the-art membership inference attacks, provides a tool to quantitatively audit data privacy in statistical and machine learning algorithms. The objective of a membership inference attack is to determine whether a given data record was in the training dataset of the target model. Measures of success (accuracy, area under the ROC curve, true positive rate at a given false positive rate ...) for particular membership inference attacks against a target model are used to estimate privacy loss for that model (how much information a target model leaks about its training data). Since stronger attacks may be possible, these measures serve as lower bounds of the actual privacy loss. The Privacy Meter workflow example generates privacy loss reports for all party's local model updates as well as the global models throughout all rounds of the FL training.
- Vertical Federated Learning Examples
- Federated Model Watermarking using the WAFFLE method
- Differential Privacy – Global differentially private federated learning using Opacus library to achieve a differentially private result w.r.t the inclusion or exclusion of any collaborator in the training process. At each round, a subset of collaborators are selected using a Poisson distribution over all collaborators, the selected collaborators perform local training with periodic clipping of their model delta (with respect to the current global model) to bound their contribution to the average of local model updates. Gaussian noise is then added to the average of these local models at the aggregator. This example is implemented in two different but statistically equivalent ways – the lower level API utilizes RDPAccountant and DPDataloader Opacus objects to perform privacy accounting and collaborator selection respectively, whereas the higher level API uses PrivacyEngine Opacus object for collaborator selection and internally utilizes RDPAccountant for privacy accounting.
- Habana Accelerator Support
- Official support for Python 3.9 and 3.10
- EDEN Compression Pipeline: Communication-Efficient and Robust Distributed Mean Estimation for Federated Learning (paper link)
- FLAX Framework Support
- Improvements to the resiliency and security of the director / envoy infrastructure:
- Optional notification to plan participants to agree to experiment sent to their infrastructure
- Improved resistance to loss of network connectivity and failure at various stages of execution
- Windows Support (Experimental): Continuous Integration now tests OpenFL on Windows, but certain features may not work as expected. Full Windows support will be added in a future release.
Breaking Changes
- Removal of Python 3.6 support due to numpy requirements
- Removal of FastEstimator examples due to dependency package incompatibility with OpenFL
What's Changed
- Remove CLA from OpenFL Repo by @psfoley in #504
- Introduce parameters to tune gRPC max message size by @igor-davidyuk in #494
- [Snyk] Security upgrade protobuf from 3.20.1 to 3.20.2 by @snyk-bot in #508
- Bump protobuf from 3.19.4 to 3.19.5 by @dependabot in #507
- Tutorials fixes by @igor-davidyuk in #516
- Pin TF version in CI tests by @mansishr in #517
- OpenFL Roadmap by @psfoley in #514
- Add ISV product ID and ISV SVN fields to manifest by @DL8 in #502
- citation updated to IOP source by @sarthakpati in #526
- Tutorial Improvements by @mkurisoo in #493
- Flax CIFAR10 CNN Interactive API Example by @acharyasunil in #482
- Break apart CI tests by @psfoley in #528
- Support Python 3.9 and 3.10 by @psfoley in #532
- Contributing EDEN compression pipeline by @yanivbi in #527
- Gramine manifest update by @igor-davidyuk in #537
- Configurable enclave size by @DL8 in #569
- For gramine set write logs to false by @mansishr in #547
- Add flake8 extensions to linter CI workflow by @itrushkin in #560
- Removed Protobuf 3.19.4 dependency by @acharyasunil in #558
- [Snyk] Fix for 2 vulnerabilities by @Einse57 in #598
- Fix log metric callback settings by @mansishr in #538
- Convert protobuf model to native format by @psfoley in #550
- Fix linter issues by @itrushkin in #619
- Update OpenFL 1.5 features on roadmap by @psfoley in #626
- Add random delay in authentication failures by @igor-davidyuk in #620
- [Windows] UnicodeDecodeError by @itrushkin in #610
- Introduce the
install requirements
option in director and envoy configs by @igor-davidyuk in #536 - Update Jenkins pipeline to support publishing to PyPI by @soda480 in #634
- Update pytest_coverage.yml by @Einse57 in #635
- Handling envoy disconnections on getting experiment. by @aleksandr-mokrov in #623
- Versions of zlib before 1.2.12 have several CVEs lodged against them.… by @Einse57 in #631
- Tensorboard documentation by @mansishr in #520
- Envoys to review plan before experiment starts by @mansishr in #489
- PKI testing by @itrushkin in #621
- Fix logging in Numpy Linear model + Colab example by @igor-davidyuk in #535
- Fix FeTS Challenge CI by @psfoley in #641
- HPU Adaptations for PyTorch TinyImagenet Interactive API by @Supriya-Krishnamurthi in #636
- build(deps): bump pillow from 9.0.1 to 9.3.0 in /openfl-tutorials/interactive_api/HPU/PyTorch_TinyImageNet/envoy by @dependabot in #643
- Envoy can reconnect to current experiment after restarting for the du… by @aleksandr-mokrov in #640
- Adapt
torch_cnn_mnist
example to testing pipeline by @igor-davidyuk in #644 - Jenkins Pipeline updates by @soda480 in #645
- Resending Shard Info if the director has lost the information by @aleksandr-mokrov in #624
- Fix TensorFlow version comparison by @itrushkin in #649
- Write keys with restricted permissions (#637) by @DL8 in #648
- [Feature] Timing Fed Components by @acharyasunil in #530
- [Examples] Update Tensorflow to 2.8.4 by @psfoley in #650
- Update to Pillow 9.3.0 by @psfoley in #651
- Suppress pandas FutureWarning by @itrushkin in #664
- CI for Windows by @itrushkin in #587
- Enable PEP8 naming extension for flake8 by @itrushkin in #668
- [CI] Process GitHub API rate limit error by @itrushkin in #669
- Fix straggler handling to identify stragglers for a round by @mansishr in #628
- Add tag name argument to graminize by @DL8 in #662
- Cleanup temporary files (SDLE task) by @mansishr in #665
- CI badges by @itrushkin in #673
- Experimental Workflow interface by @psfoley in #632
- Workflow interface: Fix documentation and colab instructions by @psfoley in #680
- Fix python path in workspace context manager by @igor-davidyuk in #682
- Fix missing NumPy int attribute by @itrushkin in #683
- Updating pytorch versions, renaming deprecated on_epoch_end hook by @aleksandr-mokrov in #687
- Update eden_pipeline.py by @yanivbi in #681
- ci: bandit to fail only on high severity vulns by @soda480 in #696
- Remove FastEstimator until compatible dependencies are available by @psfoley in #697
- Pytorch version is updated to 1.13.1 by @aleksandr-mokrov in #698
- Update kc_pipeline.py by @ishant162 in #694
- Hashing function update by @psfoley in #700
- Added HPU adaptations to Kvasir_UNet example by @Supriya-Krishnamurthi in #675
- Cleanup FastEstimator references by @psfoley in #702
- Update Copyright to 2023 by @psfoley in #704
- Docker: Pull all GPL package sources by @psfoley in #705
- Update copyright year for tests, documentation by @psfoley in #706
- Update version to 1.5 by @psfoley in #703
- Add tests for EDEN Compression Pipeline by @psfoley in #707
- Align graminize process with setup documentation by @DL8 in #695
- Added HPU adaptations for Pytorch_MedMNIST_2D by @Supriya-Krishnamurthi in #652
- Removes SNYK scan for FastEstimator by @psfoley in #712
- Updated python version details in readme file by @Supriya-Krishnamurthi in #709
- Remove Python 3.6 support due to numpy requirements @psfoley #713
- [Snyk] Fixes for dependency vulnerabilities
New Contributors
- @DL8 made their first contribution in #502
- @yanivbi and @shayvar made their first contribution in #527
- @Supriya-Krishnamurthi made their first contribution in #636
- @ishant162 made their first contribution in #694
Full Changelog: v1.4...v1.5