- Introduced new intrinsics:
federated_selectandfederated_secure_select. - New
tff.structure_from_tensor_type_treeto help manipulate structures oftff.TensorTypeinto structures of values. - Many new
tff.aggregatorsfactory implementations. - Introduced
tf.dataconcept for data URIs. - New
tff.typepackage with utilities for working withtff.Typevalues. - Initial experimental support for
tff.jax_computation. - Extend
tff.tf_computationsupport toSpareTensorandRaggedTensor.
- Update gRPC dependency to 1.34.
- Moved
ClientDatainterface and implementations totff.simulation.datasets. - Renamed
tff.utils.update_statetotff.structure.update_struct. - Removed the
tff.utilsnamespace, all symbols have migrated, many totff.aggregators. - Moved infinite EMNIST dataset to federated research repository.
- Removes
rpc_modeargument to remote executors, along with streaming mode. - Removes deprecated
tff.federated_apply. - Removes
tff.federated_reduce, all usages can usetff.federated_aggregate. - Removes
HDF5ClientDataandh5pypip dependency. - Removes
setattrfunctionality ontff.ValueImpl.
- Improved
tf.GraphDefcomparisons. - Force close generators used for sending functions to computation wrappers, avoiding race conditions in Colab.
- Fix tracing libraries asyncio usage to be Python3.9 compatible.
- Fix issue with destruction of type intern pool destructing and
abc. - Fix type interning for tensors with unknown dimensions.
- Fix
ClientData.create_dataset_from_all_clientsconsuming unreasonable amounts of memory/compute time.
- Extended the
tff.simulationpackage to add many new tools for running simulations (checkpoints and metrics managers, client sampling functions). - Extended the
tff.aggregatorspackage with a number of new aggregation factories. - Added the
tff.structureAPI to expose theStructclass and related functions. - Added the
tff.profilerAPI to expose useful profiling related functions. - Added the
tff.backends.testpackage to expose backends that focused on testing specifically a way to test a computation with afederated_secure_sumintrinsic. - Added the
tff.experimentalpackage to expose less stable API.
- Replaced the
tff.aggregators.AggregationProcessFactoryabstract base class with thetff.aggregators.UnweightedAggregationFactoryand thetff.aggregators.WeightedAggregationFactoryclasses. - Replaced the
tff.aggregators.ZeroingFactoryclass with atff.aggregators.zeroing_factoryfunction with the same input arguments. - Replaced the
tff.aggregators.ClippingFactoryclass with atff.aggregators.clipping_factoryfunction with the same input arguments. - Updated
tensorflowpackage dependency to2.4.0. - Updated
absl-pypackage dependency to0.10. - Updated
grpciopackage dependency to1.32.0. - Added a
jaxlibpackage dependency at0.1.55. - Updated
numpypackage dependency to1.19.2. - Updated
tensorflow-addonspackage dependency to0.12.0. - Updated
tensorflow-model-optimizationpackage dependency to0.5.0.
- Fixed issue with the
sequence_reduceintrinsic handling federated types.
- New
tff.aggregatorspackage with interfaces for stateful aggregation compositions. - New Google Landmark Dataset
tff.simulations.dataset.gldv2 - New convenience APIs
tff.type_clientsandtff.type_at_server - Invert control of computation tracing methods to produce clearer Python stack traces on error.
- Move executor creation to a factory pattern in executor service, allowing distributed runtimes to be agnostic to number of clients.
- Significant improvements of type serialization/deserialization
- New
tff.simulations.compose_dataset_computation_with_iterative_processAPI to move execution of client dataset construction to executor stack leaves. - Extend parameterization of
tff.learning.build_federated_averaging_processwithuse_experimental_simulation_loopargument to better utilize multi-GPU setups.
- Removed
tff.utils.StatefulFn, replaced bytff.templates.MeasuredProcess. - Removed
tff.learning.assign_weights_to_keras_model - Stop removing
OptimizeDatasetops fromtff.tf_computations. - The
research/directory has been moved to http://github.com/google-research/federated. - Updates to
input_specargument fortff.learning.from_keras_model. - Updated TensorFlow dependency to
2.3.0. - Updated TensorFlow Model Optimization dependency to
0.4.0.
- Fixed streaming mode hang in remote executor.
- Wrap
collections.namedtuple._asdictcalls incollections.OrderedDictto support Python 3.8. - Correctly serialize/deserialize
tff.TensorTypewith unknown shapes. - Cleanup TF lookup HashTable resources in TFF execution.
- Fix bug in Shakespeare dataset where OOV and last vocab character were the same.
- Fix TFF ingestion of Keras models with shared embeddings.
- Closed hole in compilation to CanonicalForm.
- "Federated Learning for Image Classification" tutorial fails to load
projectorplugin for tensorboard. (https://github.com/tensorflow/federated/issues/914) - Certain Keras models with activity regularization fail in execution with unliftable error (https://github.com/tensorflow/federated/issues/913).
This release contains contributions from many people at Google, as well as:
amitport, ronaldseoh
- Fixed issue preventing Python
lists from beingall_equalvalues.
- Mirrored user-provided types and minimize usage of
AnonymousTuple.
- Renamed
AnonymousTupletoStruct.
- Updated
tensorflow-addonspackage dependency to0.9.0. - Added API to expose the native backend more conveniently. See
tff.backends.native.*for more information. - Added a compiler argument to the
tff.framework.ExecutionContextAPI and provided a compiler for the native execution environment, which improves TFF’s default concurrency pattern. - Introduced a new
tff.templates.MeasuredProcessconcept, a specialization oftff.templates.IterativeProcess. - Extends
tff.learninginterfaces to accepttff.templates.MeasuredProcessobjects for aggregation and broadcast computations. - Introduce new convenience method
tff.learning.weights_type_from_model. - Introduced the concept of a
tff.framework.FederatingStrategy, which parameterizes thetff.framework.FederatingExecutorso that the implementation of a specific intrinsic is easier to provide. - Reduced duplication in TFF’s generated ASTs.
- Enabled usage of GPUs on remote workers.
- Documentation improvements.
- The
IterativeProcessreturn fromtff.learning.build_federated_averaging_processandtff.learning.build_federated_sgd_processnow zip the second tuple output (the metrics) to change the result from a structure of federated values to to a federated structure of values. - Removed
tff.framework.set_default_executorfunction, instead you should use the more convenienttff.backends.native.set_local_execution_contextfunction or manually construct a context an set it usingtff.framework.set_default_context. - The
tff.Computationbase class now contains an abstract__hash__method, to ensure compilation results can be cached. Any custom implementations of this interface should be updated accordingly.
- Fixed issue for missing variable initialization for variables explicitly not added to any collections.
- Fixed issue where table initializers were not run if the
tff.tf_computationdecorated function used no variables.
This release contains contributions from many people at Google, as well as:
jvmcns@
- Multiple TFF execution speedups.
- New
tff.templates.MeasuredProcessspecialization ofIterativeProcess. - Increased optimization of the
tff.templates.IterativeProcess->tff.backends.mapreduce.CanonicalFormcompiler.
- Moved
tff.utils.IterativeProcesstotff.templates.IterativeProcess. - Removed
tff.learning.TrainableModel, client optimizers are now arguments on thetff.learning.build_federated_averaging_process. - Bump required version of pip packages for tensorflow (2.2), numpy (1.18), pandas (0.24), grpcio (1.29).
- Issue with GPUs in multimachine simulations not being utilized, and bug on deserializing datasets with GPU-backed runtime.
- TensorFlow lookup table initialization failures.
- In some situations, TF will attempt to push Datasets inside of tf.functions over GPU device boundaries, which fails by default. This can be hit by certain usages of TFF, e.g. as tracked here.
This release contains contributions from many people at Google, as well as:
jvmcns@
- Fixed issues in tutorial notebooks.
- Updated
absl-pypackage dependency to0.9.0. - Updated
h5pypackage dependency to2.8.0. - Updated
numpypackage dependency to1.17.5. - Updated
tensorflow-privacypackage dependency to0.2.2.
- Deprecated
dummy_batchparameter of thetff.learning.from_keras_modelfunction.
- Fixed issues with executor service using old executor API.
- Fixed issues with remote executor test using old executor API.
- Fixed issues in tutorial notebooks.
- Upgraded tensorflow dependency from
2.0.0to2.1.0. - Upgraded tensorflow-addons dependency from
0.6.0to0.7.0. - Upgraded attr dependency from
18.2to19.3. - Upgraded tfmot dependency from
0.1.3to0.2.1. - Added a federated partition of the CIFAR-100 dataset to
tff.simulation.datasets.cifar100. - Made the high performance, parallel executor the default (replacing the reference executor).
- Added a new
tff.learning.build_personalization_evalfor evaluating model personalization strategies. - Added new federated intrinsic
tff.federated_secure_sum. tff.learning.build_federated_averaing_process()now takes aclient_optimizer_fnand atff.learning.Model.tff.learning.TrainableModelis now deprecated.- Improved performance in the high performance executor stack.
- Implemented and exposed
tff.framework.ExecutorFactory; alltff.framework...executor_factorycalls now return an instance of this class. - Added
remote_executor_examplebinary which demonstrates using the RemoteExecutor across multi-machine deployments. - Added
close()method to the Executor, allowing subclasses to proactively release resources. - Updated documentation and scripts for creating Docker images of the TFF runtime.
- Automatically call
tff.federated_zipon inputs to other federated intrinsics.
- Dropped support for Python2.
- Renamed
tff.framework.create_local_executor(and similar methods) totff.framework.local_executor_factory. - Deprecated
federated_apply(), instead usefederated_map()for all placements.
- Fixed problem with different instances of the same model having different
named types.
tff.learning.ModelWeightsno longer names the tuple fields returned for model weights, instead relying on an ordered list. tff.sequence_*on unplaced types now correctly returns atff.Value.
tff.sequence_*.. operations are not implemented yet on the new high-performance executor stack.- A subset of previously-allowed lambda captures are no longer supported on the new execution stack.
- Python 2 support is now deprecated and will be removed in a future release.
federated_mapnow works with bothtff.SERVERandtff.CLIENTplacements.federated_zipreceived significant performance improvements and now works recursively.- Added retry logic to gRPC calls in the execution stack.
collections.OrderedDictis now required in many places rather than standard Python dictionaries.
- Fixed computation of the number of examples when Keras is using multiple inputs.
- Fixed an assumption that
tff.framework.Tupleis returned fromIterativeProcess.next. - Fixed argument packing in polymorphic invocations on the new executor API.
- Fixed support for
dir()inValueImpl. - Fixed a number of issues in the Colab / Jupyter notebook tutorials.
- Updated to use
grpcio1.24.3.
- Add a
federated_sampleaggregation that is used to collect a sample of client values on the server using reservoir sampling. - Updated to use
tensorflow2.0.0andtensorflow-addons0.6.0instead of the coorisponding nightly package in thesetup.pyfor releasing TFF Python packages. - Updated to use
tensorflow-privacy0.2.0. - Added support for
attr.sclasses type annotations. - Updated streaming
Executemethod ontff.framework.ExecutorServiceto be asynchronous. - PY2 and PY3 compatability.
- TFF is now fully compatible and dependent on TensorFlow 2.0
- Add stateful aggregation with differential privacy using TensorFlow Privacy (https://pypi.org/project/tensorflow-privacy/).
- Additional stateful aggregation lwith compression using TensorFlow Model Optimization (https://pypi.org/project/tensorflow-model-optimization/).
- Improved executor stack for simulations, documentation and scripts for starting simulations on GCP.
- New libraries for creating synthetic IID and non-IID datsets in simulation.
examplespackage split tosimulationandresearch.
- Various error message string improvements.
- Dataset serialization fixed for V1/V2 datasets.
tff.federated_aggregatesupportsaccumulate,mergeandreportmethods with signatures containing tensors with undefined dimensions.
- Improvements in the executor stack: caching, deduplication, bi-directional streaming mode, ability to specify physical devices.
- Components for integration with custom mapreduce backends
(
tff.backends.mapreduce). - Improvements in simulation dataset APIs: ConcreteClientData, random seeds, stack overflow dataset, updated documentation.
- Utilities for encoding and various flavors of aggregation.
- Removed support for the deprecated
tf.data.Datasetstring iterator handle. - Bumps the required versions of grpcio and tf-nightly.
- Fixes in notebooks, typos, etc.
- Assorted fixes to align with TF 2.0.
- Fixes thread cleanup on process exit in the high-performance executor.
This release contains contributions from many people at Google, as well as:
Gui-U@, Krishna Pillutla, Sergii Khomenko.
- High-performance simulation components and tutorials.
- Refactoring/consolidation in utility functions in tff.framework.
- Switches some of the tutorials to new PY3-only executor stack components.
- Includes the
examplesdirectory in the pip package. - Pip installs for TensorFlow and TFF in turorials.
- Patches for asyncio in tutorials for use in Jupyter notebooks.
- Python 3 compatibility issues.
- Support for
federated_map_all_equalin the reference executor. - Adds missing implementations of generic constants and operator intrinsics.
- Fixes missed link in compatibility section of readme.
- Adds some of the missing intrinsic reductions.
This release contains contributions from many people at Google.
- Support for multiple outputs and loss functions in
kerasmodels. - Support for stateful broadcast and aggregation functions in federated averaging and federated SGD APIs.
tff.utils.update_stateextended to handle more generalstatearguments.- Addition of
tff.utils.federated_minandtff.utils.federated_max. - Shuffle
client_idsincreate_tf_dataset_from_all_clientsby default to aid optimization.
- Dependencies added to
requirements.txt; in particular,grpcioandportpicker.
- Removes dependency on
tf.data.experimental.NestedStructure.
This release contains contributions from many people at Google, as well as:
Dheeraj R Reddy, @Squadrick.
- Removed source level TF dependencies and switched from
tensorflowtotf-nightlydependency. - Add support for
attrmodule in TFF type system. - Introduced new
tff.frameworkinterface layer. - New AST transformations and optimizations.
- Preserve Python container usage in
tff.tf_computation.
- Updated TFF model to reflect Keras
tf.keras.model.weightsorder. - Keras model with multiple inputs. #416
- New
tff.simulation.TransformingClientDataAPI and associated inifinite EMNIST dataset (see http://tensorflow.org/federated/api_docs/python/tff for details)
- Normalized
functofnacross the repository (rename some parameters and functions)
- Wrapped Keras models can now be used with
tff.learning.build_federated_evaluation - Keras models with non-trainable variables in intermediate layers (e.g.
BatchNormalization) can be assigned back to Keras models with
tff.learning.ModelWeights.assign_weights_to
- Rename
tff.learning.federated_averagetotff.learning.federated_mean. - Rename 'func' arguments to 'fn' throughout the API.
- Assorted fixes to typos in documentation and setup scripts.
- Updated to use TensorFlow version 1.13.1.
- Implemented Federated SGD in
tff.learning.build_federated_sgd_process().
next()function oftff.utils.IteratedProcesss returned bybuild_federated_*_process()no longer unwraps single value tuples (always returns a tuple).
- Modify setup.py to require TensorFlow 1.x and not upgrade to 2.0 alpha.
- Stop unpacking single value tuples in
next()function of objects returned bybuild_federated_*_process(). - Clear cached Keras sessions when wrapping Keras models to avoid referencing stale graphs.
Initial public release.