- Introduced new intrinsics:
federated_select
andfederated_secure_select
. - New
tff.structure_from_tensor_type_tree
to help manipulate structures oftff.TensorType
into structures of values. - Many new
tff.aggregators
factory implementations. - Introduced
tf.data
concept for data URIs. - New
tff.type
package with utilities for working withtff.Type
values. - Initial experimental support for
tff.jax_computation
. - Extend
tff.tf_computation
support toSpareTensor
andRaggedTensor
.
- Update gRPC dependency to 1.34.
- Moved
ClientData
interface and implementations totff.simulation.datasets
. - Renamed
tff.utils.update_state
totff.structure.update_struct
. - Removed the
tff.utils
namespace, all symbols have migrated, many totff.aggregators
. - Moved infinite EMNIST dataset to federated research repository.
- Removes
rpc_mode
argument to remote executors, along with streaming mode. - Removes deprecated
tff.federated_apply
. - Removes
tff.federated_reduce
, all usages can usetff.federated_aggregate
. - Removes
HDF5ClientData
andh5py
pip dependency. - Removes
setattr
functionality ontff.ValueImpl
.
- Improved
tf.GraphDef
comparisons. - 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_clients
consuming unreasonable amounts of memory/compute time.
- Extended the
tff.simulation
package to add many new tools for running simulations (checkpoints and metrics managers, client sampling functions). - Extended the
tff.aggregators
package with a number of new aggregation factories. - Added the
tff.structure
API to expose theStruct
class and related functions. - Added the
tff.profiler
API to expose useful profiling related functions. - Added the
tff.backends.test
package to expose backends that focused on testing specifically a way to test a computation with afederated_secure_sum
intrinsic. - Added the
tff.experimental
package to expose less stable API.
- Replaced the
tff.aggregators.AggregationProcessFactory
abstract base class with thetff.aggregators.UnweightedAggregationFactory
and thetff.aggregators.WeightedAggregationFactory
classes. - Replaced the
tff.aggregators.ZeroingFactory
class with atff.aggregators.zeroing_factory
function with the same input arguments. - Replaced the
tff.aggregators.ClippingFactory
class with atff.aggregators.clipping_factory
function with the same input arguments. - Updated
tensorflow
package dependency to2.4.0
. - Updated
absl-py
package dependency to0.10
. - Updated
grpcio
package dependency to1.32.0
. - Added a
jaxlib
package dependency at0.1.55
. - Updated
numpy
package dependency to1.19.2
. - Updated
tensorflow-addons
package dependency to0.12.0
. - Updated
tensorflow-model-optimization
package dependency to0.5.0
.
- Fixed issue with the
sequence_reduce
intrinsic handling federated types.
- New
tff.aggregators
package with interfaces for stateful aggregation compositions. - New Google Landmark Dataset
tff.simulations.dataset.gldv2
- New convenience APIs
tff.type_clients
andtff.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_process
API to move execution of client dataset construction to executor stack leaves. - Extend parameterization of
tff.learning.build_federated_averaging_process
withuse_experimental_simulation_loop
argument to better utilize multi-GPU setups.
- Removed
tff.utils.StatefulFn
, replaced bytff.templates.MeasuredProcess
. - Removed
tff.learning.assign_weights_to_keras_model
- Stop removing
OptimizeDataset
ops fromtff.tf_computation
s. - The
research/
directory has been moved to http://github.com/google-research/federated. - Updates to
input_spec
argument 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._asdict
calls incollections.OrderedDict
to support Python 3.8. - Correctly serialize/deserialize
tff.TensorType
with 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
projector
plugin 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
list
s from beingall_equal
values.
- Mirrored user-provided types and minimize usage of
AnonymousTuple
.
- Renamed
AnonymousTuple
toStruct
.
- Updated
tensorflow-addons
package 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.ExecutionContext
API and provided a compiler for the native execution environment, which improves TFF’s default concurrency pattern. - Introduced a new
tff.templates.MeasuredProcess
concept, a specialization oftff.templates.IterativeProcess
. - Extends
tff.learning
interfaces to accepttff.templates.MeasuredProcess
objects 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.FederatingExecutor
so 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
IterativeProcess
return fromtff.learning.build_federated_averaging_process
andtff.learning.build_federated_sgd_process
now 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_executor
function, instead you should use the more convenienttff.backends.native.set_local_execution_context
function or manually construct a context an set it usingtff.framework.set_default_context
. - The
tff.Computation
base 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_computation
decorated function used no variables.
This release contains contributions from many people at Google, as well as:
jvmcns@
- Multiple TFF execution speedups.
- New
tff.templates.MeasuredProcess
specialization ofIterativeProcess
. - Increased optimization of the
tff.templates.IterativeProcess
->tff.backends.mapreduce.CanonicalForm
compiler.
- Moved
tff.utils.IterativeProcess
totff.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-py
package dependency to0.9.0
. - Updated
h5py
package dependency to2.8.0
. - Updated
numpy
package dependency to1.17.5
. - Updated
tensorflow-privacy
package dependency to0.2.2
.
- Deprecated
dummy_batch
parameter of thetff.learning.from_keras_model
function.
- 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.0
to2.1.0
. - Upgraded tensorflow-addons dependency from
0.6.0
to0.7.0
. - Upgraded attr dependency from
18.2
to19.3
. - Upgraded tfmot dependency from
0.1.3
to0.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_eval
for evaluating model personalization strategies. - Added new federated intrinsic
tff.federated_secure_sum
. tff.learning.build_federated_averaing_process()
now takes aclient_optimizer_fn
and atff.learning.Model
.tff.learning.TrainableModel
is now deprecated.- Improved performance in the high performance executor stack.
- Implemented and exposed
tff.framework.ExecutorFactory
; alltff.framework...executor_factory
calls now return an instance of this class. - Added
remote_executor_example
binary 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_zip
on 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.ModelWeights
no 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_map
now works with bothtff.SERVER
andtff.CLIENT
placements.federated_zip
received significant performance improvements and now works recursively.- Added retry logic to gRPC calls in the execution stack.
collections.OrderedDict
is 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.Tuple
is 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
grpcio
1.24.3
.
- Add a
federated_sample
aggregation that is used to collect a sample of client values on the server using reservoir sampling. - Updated to use
tensorflow
2.0.0
andtensorflow-addons
0.6.0
instead of the coorisponding nightly package in thesetup.py
for releasing TFF Python packages. - Updated to use
tensorflow-privacy
0.2.0
. - Added support for
attr.s
classes type annotations. - Updated streaming
Execute
method ontff.framework.ExecutorService
to 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.
examples
package split tosimulation
andresearch
.
- Various error message string improvements.
- Dataset serialization fixed for V1/V2 datasets.
tff.federated_aggregate
supportsaccumulate
,merge
andreport
methods 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.Dataset
string 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
examples
directory 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_equal
in 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
keras
models. - Support for stateful broadcast and aggregation functions in federated averaging and federated SGD APIs.
tff.utils.update_state
extended to handle more generalstate
arguments.- Addition of
tff.utils.federated_min
andtff.utils.federated_max
. - Shuffle
client_ids
increate_tf_dataset_from_all_clients
by default to aid optimization.
- Dependencies added to
requirements.txt
; in particular,grpcio
andportpicker
.
- 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
tensorflow
totf-nightly
dependency. - Add support for
attr
module in TFF type system. - Introduced new
tff.framework
interface layer. - New AST transformations and optimizations.
- Preserve Python container usage in
tff.tf_computation
.
- Updated TFF model to reflect Keras
tf.keras.model.weights
order. - Keras model with multiple inputs. #416
- New
tff.simulation.TransformingClientData
API and associated inifinite EMNIST dataset (see http://tensorflow.org/federated/api_docs/python/tff for details)
- Normalized
func
tofn
across 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_average
totff.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.IteratedProcess
s 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.