All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
tff.StructType.items()
, this API makes it easier to iterate overtff.StrucType
without having to deal with hard to discover and usetff.structure.*
APIs.- The abstract class
DPTensorAggregator
and the childDPQuantileAggregator
(along with the factory class).DPQuantileAggregator
is currently a skeleton; future CLs will implement the member functions. DPQuantileAggregator::AggregateTensors
performs either apush_back
or reservoir sampling, depending on size of memberbuffer_
. The reservoir sampling functionality is performed by::InsertWithReservoirSampling
.DPQuantileAggregator::MergeWith
copies as much data over from the other aggregator'sbuffer_
until capacity is hit, then performs reservoir sampling.tff.program.ComputationArg
, which is helpful when creating a federated platform.DPQuantileAggregator::ReportWithEpsilonAndDelta
implements a DP algorithm to find quantiles by looping over a histogram with growing bucket size.DPQuantileAggregator::Serialize
and the correspondingDPQuantileAggregatorFactory::Deserialze
to save and load aggregator state.- Ability to disable DP when
epsilon
is sufficiently large inDPQuantileAggregator::ReportWithEpsilonAndDelta
. DPTensorAggregatorBundle
, a wrapper around one or more instances ofDPTensorAggregator
, and its factory.DPTensorAggregatorBunde::AggregateTensors
checks inputs before delegating work to the inner aggregators.- A new constructor for
InputTensorList
that takes as input anstd::vector
ofconst Tensor*
.DPTensorAggregatorBunde::AggregateTensors
uses this to split its input across its inner aggregators, which may expect varying sizes. DPTensorAggregator::IsCompatible
will allowDPTensorAggregatorBundle
to check if all inner aggregators are compatible for merge prior to calling theirMergeWith
functions.DPTensorAggregatorBundle::MergeWith
checks compatibility before delegating merging to inner aggregators. The compatibility check is done byDPTensorAggregatorBundle::IsCompatible
.DPTensorAggregatorBundle::Serialize
andDPTensorAggregatorBundleFactory::Deserialize
enable storage and retrieval of the state of aDPTensorAggregatorBundle
.DPTensorAggregatorBundle::TakeOutputs
calls the inner aggregator'sReportWithEpsilonAndDelta
methods and stitches the outputs together.- Number of round retries to training metrics in
tff.learning.programs.train_model
.
- Buffer overrun in
AggVectorIterator
when passing in an emptyTensorData
.
DPTensorAggregatorBundleFactory::CreateInternal
now checks validity of the epsilon and delta parameters of its given intrinsic.- When
DPGroupByFactory::CreateInternal
receives anepsilon
at or abovekEpsilonThreshold
, it no longer bothers splitting it across the inner aggregators. - Moved the tests of input validity from
DPQuantileAggregator
to the parent classDPTensorAggregator
. This will enableDPTensorAggregatorBundle
to check that the input is valid before passing to the aggregators it contains. - Moved the tests of compatibility from
DPQuantileAggregator::MergeWith
toDPQuantileAggregator::IsCompatible
. - Updated
MeasuredProcessOutput
to be aNamedTuple
.
tff.types.tensorflow_to_type
, this function is no longer used.tff.program.X
, usefederated_language.program
instead, for each:FederatedDataSource
FederatedDataSourceIterator
check_in_federated_context
ComputationArg
contains_only_server_placed_data
FederatedContext
LoggingReleaseManager
MemoryReleaseManager
ProgramStateExistsError
ProgramStateManager
ProgramStateNotFoundError
ProgramStateStructure
ProgramStateValue
DelayedReleaseManager
FilteringReleaseManager
GroupingReleaseManager
NotFilterableError
PeriodicReleaseManager
ReleasableStructure
ReleasableValue
ReleaseManager
MaterializableStructure
MaterializableTypeSignature
MaterializableValue
MaterializableValueReference
materialize_value
MaterializedStructure
MaterializedValue
tff.tensorflow.to_type
.- Added
pack_args_into_struct
andunpack_args_from_struct
to the public API underframework
.
- Add round end timestamp to train metrics in
tff.learning.programs.train_model
.
tff.types.tensorflow_to_type
, usetff.tensorflow.to_type
instead.
- Updated to use an environment-agnostic way to represent a sequence of data.
- Updated JAX computations and contexts to be able to handle sequence types.
- Moved
tff.types.structure_from_tensor_type_tree
andtff.types.type_to_tf_tensor_specs
to thetff.tensorflow
package.
tff.framework.merge_cardinalities
tff.framework.CardinalityCarrying
tff.framework.CardinalityFreeDataDescriptor
tff.framework.CreateDataDescriptor
tff.framework.DataDescriptor
tff.framework.Ingestable
- An implementation of AdamW to
tff.learning.optimizers
. - Added Executor class to public API.
- Support
None
gradients intff.learning.optimizers
. This mimics the behavior oftf.keras.optimizers
- gradients that areNone
will be skipped, and their corresponding optimizer output (e.g. momentum and weights) will not be updated. - The behavior of
DPGroupingFederatedSum::Clamp
: it now sets negatives to 0. Associated test code has been updated. Reason: sensitivity calculation for DP noise was calibrated for non-negative values. - Change tutorials to use
tff.learning.optimizers
in conjunction withtff.learning
computations. tff.simulation.datasets.TestClientData
only accepts dictionaries whose leaf nodes are nottf.Tensor
s.
- A bug where
tff.learning.optimizers.build_adafactor
would update its step counter twice upon every invocation of.next()
. - A bug where tensor learning rates for
tff.learning.optimizers.build_sgdm
would fail with mixed dtype gradients. - A bug where different optimizers had different behavior on empty weights structures. TFF optimizers now consistently accept and function as no-ops on empty weight structures.
- A bug where
tff.simulation.datasets.TestClientData.dataset_computation
yielded datasets of indeterminate shape.
tff.jax_computation
, usetff.jax.computation
instead.tff.profiler
, this API is not used.- Removed various stale tutorials.
- Removed
structure
fromtff.program.SavedModelFileReleaseManager
'sget_value
method parameters. - Removed support for
tf.keras.optimizers
intff.learning
.
tff.tensorflow.transform_args
andtff.tensorflow.transform_result
, these functions are intended to be used when instantiating and execution context in a TensorFlow environment.
- Replaced the
tensor
on theValue
protobuf with anarray
field and updated the serialization logic to use this new field. tff.program.FileProgramStateManager
to be able to keep program states at a specified interval (every k states).
- The
dp_noise_mechanisms
header and source files: contains functions that generatedifferential_privacy::LaplaceMechanism
ordifferential_privacy::GaussianMechanism
, based upon privacy parameters and norm bounds. Each of these functions return aDPHistogramBundle
struct, which contains the mechanism, the threshold needed for DP open-domain histograms, and a boolean indicating whether Laplace noise was used. - Added some TFF executor classes to the public API (CPPExecutorFactory, ResourceManagingExecutorFactory, RemoteExecutor, RemoteExecutorGrpcStub).
- Added support for
bfloat16
dtypes from theml_dtypes
package.
- A bug where
tf.string
was mistakenly allowed as a dtype totff.types.TensorType
. This now must benp.str_
.
tff.Computation
andtff.framework.ConcreteComputation
to be able to transform the arguments to the computation and result of the computation.DPClosedDomainHistogram::Report
andDPOpenDomainHistogram::Report
: they both use theDPHistogramBundles
produced by theCreateDPHistogramBundle
function indp_noise_mechanisms
.DPGroupByFactory::CreateInternal
: whendelta
is not provided, check if the right norm bounds are provided to compute L1 sensitivity (for the Laplace mech).- CreateRemoteExecutorStack now allows the composing executor to be specified and assigns client values to leaf executors such that all leaf executors receive the same number of clients, except for potentially the last leaf executor, which may receive fewer clients.
- Allow
tff.learning.programs.train_model
to accept ashould_discard_round
function to decide whether a round should be discarded and retried.
tff.structure.to_container_recursive
, this should not be used externally.
- TFF executor classes to the public API (
ComposingExecutor
,ExecutorTestBase
,MockExecutor
,ThreadPool
). - Compiler transformation helper functions to the public API
(
replace_intrinsics_with_bodies
,unique_name_generator
,transform_preorder
,to_call_dominant
). - A method to get the number of checkpoints aggregated to the
CheckpointAggregator
API. - The function
DPClosedDomainHistogram::IncrementDomainIndices
. It allows calling code to iterate through the domain of composite keys (in a do-while loop).
- Renamed the boolean
use_experimental_simulation_loop
parameter toloop_implementation
that accepts antff.learning.LoopImplementation
enum for alltff.learning.algorithms
methods. - Modified the model output release frequency to every 10 rounds and the final
round in
tff.learning.programs.train_model
. - Loosened the
kEpsilonThreshold
constant and updated the tests ofDPOpenDomainHistogram
accordingly. - The behavior of
DPClosedDomainHistogram::Report()
: it now produces an aggregate for each possible combinations of keys. Those composite keys thatGroupByAggregator
did not already assign an aggregate to are assigned 0. Future CL will add noise. - Modified
tff.learning.algorithms.build_weighted_fed_avg
to generate different training graphs whenuse_experimental_simulation_loop=True
andmodel_fn
is of typetff.learning.models.FunctionalModel
.
tff.learning.programs.EvaluationManager
raised an error when the version IDs of two state-saving operations were the same.tff.jax.computation
raised an error when the computation has unused arguments.- The
tff.backends.xla
execution stack raised an error when single element structures are returned fromtff.jax.computation
wrapped methods.
- The
tff.learning.programs.train_model
program logic to save a deep copy of the data source iterator within the program state. - The file-backed native program components to not flatten and unflatten values.
- Unused functions from
tensorflow_utils
. - Serializing raw
tf.Tensor
values to theValue
protobuf. - Partial support for
dataclasses
.
- A serialized raw array content field to the Array proto.
- A function to
DPCompositeKeyCombiner
that allows retrieval of an ordinal. Intended for use by the closed-domain DP histogram aggregation core. - Constants for invalid ordinals and default
l0_bound_
. - New
DPClosedDomainHistogram
class. Sibling ofDPOpenDomainHistogram
that is constructed from DP parameters plus domain information. No noising yet.
- How
DPCompositeKeyCombiner
handles invalidl0_bound_
values. - The default
l0_bound_
value inDPCompositeKeyCombiner
to new constant. - Organization of DP histogram code. Previously, open-domain histogram class +
factory class lived side-by-side in
dp_group_by_aggregator.h/cc
. Now split intodp_open_domain_histogram.h/cc
anddp_group_by_factory.h/cc
, which will ease future addition of code for closed-domain histogram. - Moved
tff.federated_secure_modular_sum
to the mapreduce backend, usetff.backends.mapreduce.federated_secure_modular_sum
instead. DPGroupByAggregator
changes how it checks the intrinsic based on number of domain tensors in the parameter field.DPGroupByFactory
is now responsible for checking number and type of the parameters in theDPGroupingFederatedSum
intrinsic, since the factory is now accessing those parameters.- Type of
domain_tensors
inDPCompositeKeyCombiner::GetOrdinal
is nowTensorSpan
(alias ofabsl::Span<const Tensor>
). This will make it possible to retrieve the slice ofintrinsic.parameters
that contains the domain information and pass it toDPClosedDomainHistogram
. - Switched type of
indices
inGetOrdinal
fromFixedArray<size_t>
toFixedArray<int64_t>
, to better align with internal standards.
- A helper function to get a vector of strings for the elements of a tensor in order to aid in formatting.
- A field
string_val
to thetensor
proto to allow representing string values explicitly.
- The format of the release notes (i.e.,
RELEASE.md
) to be based on https://keepachangelog.com/en/1.1.0/. - Moved constraint on
linfinity_bound
fromDPGroupingFederatedSumFactory
toDPGroupByFactory
, because closed-domain histogram algorithm will useDPGroupingFederatedSum
but not demand a positivelinfinity_bound
.
- The dependency on
semantic-version
. - The
tff.async_utils
package, useasyncio
instead.
- Moved the
tools
package to the root of the repository. - Updated
bazel
to version6.5.0
. - Updated
rules_python
to version0.31.0
. - Deleted deprecated
tff.learning.build_federated_evaluation
, which was superseded bytff.learning.algorithms.build_fed_eval
.
- Enabled support for models with non-trainable variables in
tff.learning.models.functional_model_from_keras
.
- Removed
farmhashpy
dependency. - Updated
com_github_grpc_grpc
to version1.50.0
. - Moved the TFF repository from https://github.com/tensorflow/federated to https://github.com/google-parfait/tensorflow-federated.
- Moved aggregation from https://github.com/google-parfait/federated-compute to TFF to consolidate the federated language and remove circular dependencies.
- Updated
rules_license
to version0.0.8
. - Removed
elias_gamma_encode
module. - Removed
tensorflow_compression
dependency.
- Added an implementation of
__eq__()
onbuilding blocks
. - Added a new field,
content
, to theData
building block and updated tests.
- Fixed #4588: Target Haswell CPU architectures (
-march=haswell
) instead of whatever is native to the build infrastructure to ensure that binaries in the pip package and executable on Colab CPU runtimes.
- Added a
Literal
to the TFF language, part 2. This change updates the tracing and execution portions of TFF to begin using theLiteral
. - Added an implementation of the Adafactor optimizer to
tff.learning.optimizers.build_adafactor
- Added a new field,
content
, to theData
proto.
- Removed the
check_foo()
methods on building blocks. - Removed
tff.data
, this symbol is not used.
- Fixed a bug where the pip package default executor stack cannot execute
computations that have
Lambda
s undersequence_*
intrinsics.
- Updated the type annotation for MaterializedValue to include the Python scalar types in addition to the numpy scalar types.
- Added a
Literal
to the TFF language, part 1. - Added
Literal
to the framework package. - Extended
tff.learning.algorithms.build_weighted_fed_avg_with_optimizer_schedule
to supporttff.learning.models.FunctionalModel
.
- Deleted the
tff.learning.framework
namespace⚰️.
- Fixed logic for determining if a value can be cast to a specific dtype.
- Fixed a bug where repeated calls to
FilePerUserClientData.create_tf_dataset_for_client
could blow up memory usage
- Make some of the C++ executor APIs public visibility for downstream repos.
- Moved the
DataType
protobuf object into its own module. Moving theDataType
object into its own module allowsDataType
to be used outside of aComputation
more easily and prevents a circular dependency betweenComputation
andArray
which both require aDataType
. - Updated
build_apply_optimizer_finalizer
to allow custom reject update function. - Relaxed the type requirement of the attributes of
ModelWeights
to allow assigning list or tuples of matching values to other sequence types ontf.keras.Model
instances. - Improved the errors raised by JAX computations for various types.
- Updated tutorials to use recommended
tff.learning
APIs.
- Removed the runtime-agnostic support for
tf.RaggedTensor
andtf.SparseTensor
.
- Make some of the C++ executor APIs public visibility for downstream repos.
tff.learning.algorithms.build_fed_kmeans
supports floating point weights, enabling compatibility withtff.aggregators
using differential privacy.- Added two new metrics aggregators:
tff.learning.metrics.finalize_then_sample
andtff.learning.metrics.FinalizeThenSampleFactory
.
- Remove the ability to return
SequenceType
fromtff.federated_computation
decorated callables.
tff.learning
algorithms now correctly do not include metrics for clients that had zero weight due to model updates containing non-finite values. Previously the update was rejected, but the metrics still aggregated.
- Added an async XLA runtime under
tff.backends.xla
.
- Updated
tensorflow-privacy
version to0.9.0
. - Removed the deprecated
type_signature
parameter from thetff.program.ReleaseManager.release
method.
- Added new environment-specific packages to TFF.
- Temporarily disable
tff.program.PrefetchingDataSource
due to flakiness from a lack of determinism. - Removed support for invoking
infer_type
with TensorFlow values. - Removed deprecated
tff.aggregators.federated_(min|max)
symbols, please usetff.federated_(min|max)
instead. - Removed support for creating a
tff.TensorType
using atf.dtypes.DType
. - Removed
tff.check_return_type
.
- Declared
OwnedValueId::INVALID_ID
as a static constexpr.
- The
local_unfinalized_metrics_type
argument to tff.learning.metrics.(secure_)sum_then_finalize is now optional (and is not actually used). It will be removed in a future release.
- tff.learning.metrics.(secure_)sum_then_finalize now return polymorphic computations. They can still be passed into algorithm builders (e.g. tff.learning.algorithms.build_weighted_fed_avg) but to be called directly they must first be traced with explicit types.
- Removed support for handling
tf.TensorSpec
usingto_type
, usetensorflow_to_type
instead. - Removed support for calling
tff.TensorType
using atf.dtypes.DType
.
- Added
tff.types.tensorflow_to_type
function to convert structures containing tensorflow type specs into atff.Type
. - Deprecated
tff.types.infer_unplaced_type
. - Updated
tff.types.ArrayShape
to be defined as aSequence
not anIterable
, this is because thelen
of antff.types.ArrayShape
is used for comparison. - Deprecated the
type_signature
parameter for thetff.program.ReleaseManager.release
method.
- Removed the implementation of
tff.Value.__add__
. - Removed the deprecated
tff.Type.check_*()
functions, useisinstance
instead. - Removed
tff.types.at_clients
andtff.types.at_server
functions, use thetff.FederatedType
constructor instead. - Removed support for handling
tf.data.DatasetSpec
,tf.RaggedTensorSpec
, andtf.SparseTensorSpec
usingtff.to_type
, usetff.types.tensorflow_to_type
instead. - Removed support for handling
tf.RaggedTensor
andtf.SparseTensor
usinginfer_type
.
- Updated the representation of a tff.TensorType.dtype to be a
np.dtype
instead oftf.dtypes.Dtype
. - Added
tff.program.DelayedReleaseManager
.
- Removed
check_allowed_ops
from theframework
package. - Removed
check_disallowed_ops
from theframework
package. - Removed
replace_intrinsics_with_bodies
from theframework
package. - Removed
get_session_token
from theframework
package. - Added a workspace dependency on
pybind11_bazel
. - Removed
type_from_tensors
from theframework
package. - Updated the version of
rules_python
to0.23.0
.
- Temporary pin
googleapis-common-protos
to version1.61.0
to work around an issue with a transitive dependency.
- Removed the capability to pass a
tf.TensorShape
as the shape of atff.TensorType
.
- Correctly materialize
SERVER
placed values out of the C++ execution stack when using StreamingRemoteExecutor instead of returning an error about placement not found.
-
Update the representation of a
tff.TensorType.shape
to be atff.types.ArrayShape
instead oftf.TensorShape
. -
Updated
type_to_py_container``to be able to handle
tff.SequenceTypes` with an unknown Python type.
- Moved
tff.structure_from_tensor_type_tree
totff.types.structure_from_tensor_type_tree
. - Remove the capability to pass an
int
as the shape of atff.TensorType
.
- Updated the TFF project and the Python package to be compatible with Python 3.11.
- Updated
train_process
totrain_process_factory
in vizier program logic to support multiple trials in parallel. - Added support for using non-OrderedDict mapping types.
- Updated the version of
grpc
tov1.59.1
. - Updated the version of
bazel
to6.1.0
. - Updated the version of
tensorflow
to2.14.0
. - Updated the version of
numpy
to~=1.25
. - Updated the version of
com_google_googletest
to1.12.1
.
- Fixed import path for Vizier in federated program example.
- Fixed serialization of TenshorShape in error message to be human readable.
- Fixed bug in
tff.program.FileProgramStateManager
removing old program state.
- Added
tff.federated_min
andtff.federated_max
intrinsics. - Added a
get_value()
method totff.program.SavedModelFileReleaseManager,
for retrieving values that were previously released. - Added
tff.program.PeriodicReleaseManager
to release values at regular intervals. - Learning program logic now saves next evaluation time so that it can be loaded upon computation restarts.
DistributeAggregateForm
now skips normalizing the all_equal bit.- Added parallelism to Vizier program logic.
- Enabled building protos with certain Bazel versions.
- Updated the version of
attrs
to23.1
. - Updated the version of
cachetools
to~=5.3
. - Updated the version of
dp-accounting
to0.4.3
. - Updated the version of
google-vizier
to0.1.11
. - Updated the version of
jax
to0.4.14
. - Updated the version of
portpicker
to~=1.6
. - Updated the version of
tensorflow
to2.13.0
. - Updated the version of
tensorflow-model-optimization
to0.7.5
. - Updated the version of
tensorflow-privacy
to0.8.11
. - Updated the version of
typing-extensions
to~=4.5.0
. - Increased
TF_CUDA_VERSION
to12
. - Removed the
tff.program.Capabilities
enum from the iterator. - Deleted Python executors.
- Removed the deprecated
is_{foo}
functions fromtff.Type
s. Users should useisinstance
checks instead. - Deleted go-related BUILD targets for TFF proto files.
- Removed non-existent GCP doc from TFF guides.
- Cleaned up exceptions in the
tff.program
package for consistency and clarity. - Fixed various pytype errors.
- Fixed various
undefined-variable
lint errors. - Fixed a
UnicodeDecodeError
in the FedRecon tutorial. - Fixed Python 3.11 related errors.
- Removed
context
argument fromtff.learning.algorithms.build_personalization_eval_computation
. Now a personalization function only takes a model, a train dataset, and a test dataset as arguments.
- Fix a rare infinite loop issue caused by very small float values when using
tff.learning.ddp_secure_aggregator
.
- Updated the type annotation for the
dtype
parameter totff.TensorType
. - Added adaptive tuning function to
ThresholdSampling
class. - Added
tff.learning.models.ReconstructionModel.from_keras_model_and_variables
, which provides a way to get aReconstructionModel
from a Keras model and lists of global and local trainable/non_trainable variables. - Switched
tff.learning.algorithms.build_fed_recon_eval
to use a stateful metrics aggregator.
- Removed
tff.learning.models.ReconstructionModel.from_keras_model
, which has been replaced bytff.learning.models.ReconstructionModel.from_keras_model_and_layers
. - Removed the following functions from the py_typecheck module:
check_len
,check_callable
,is_dataclass
,is_attrs
,check_subclass
andcheck_not_none
. They are unused or can be replaced by Python type annotations.
- Fixed a small bug in the TFF SGDM optimizer, to only track momentum as a hparam if it is both specified and nonzero.
- DTensor TF executor is now integrated with the default TFF C++ worker.
- Added federated program documentation and guidelines.
- Removed the
pytype
dependency from TFF. tff.learning.algorithms.build_fed_recon_eval
now supports TFF optimizers.
- Updated
tff.types.deserialize_type
to not accept/returnNone
. - Removed the
tff.framework.ComputationBuildingBlock.is_foo
methods. - Renamed
tff.learning.algorithms.build_personalization_eval
totff.learning.algorithms.build_personalization_eval_computation
tff.learning.models.ReconstructionModel.from_keras_model
will now check that global and local variables are disjoint, raise ValueError if they are not.
- Fixed
tff.learning.models.ReconstructionModel.has_only_global_variables
(it was returning incorrect value).
- Removed compression for
worker_binary
. - Allowed tensor and numpy float-like objects in optimizer hyperparameters.
- Improved API/filtering logic in
FilteringReleaseManager
.
- Renamed
build_personalization_eval
tobuild_personalization_eval_computation
. - Updated
tff.to_type
implementation and type annotation to not accept/returnNone
.
- Fixed and documented pytype errors in the
program
package. - Fixed bug in how
tff.program.NativeFederatedContext
handles arguments of various types.
- Updated algorithms built from
tff.learning.models.FunctionalModel
to allow nested outputs. - Added the
PrefetchingDataSource
back to thetff.program
API now that the flakiness has been fixed.
- Changed return type of
tff.simulation.compose_dataset_computation_with_learning_process
to be atff.learning.templates.LearningProcess
. - Fixed flaky tests in
prefetching_data_source_test
. - Fixed type annotations and lint errors.
- Cleaned up error messages and typing information in
tff.learning.optimizers
.
- Allow functional models to return a structure.
- Removed support for handling
attrs
as containers in thetff.program
API. - Migrated the
personalization_eval
module to the algorithms package. - Deleted the
tff.learning.build_local_evaluation
API. - Migrated
tff.learning.reconstruction
to thetff.learning.algorithms
package. - Updated to
dm-tree
version0.1.8
. - Updated to
dp-accounting
version0.4.1
. - Updated to
tensorflow-privacy
version0.8.9
.
- Added Vizier backed tuning program logic to
tff.learning
. - Updated the
tff.learning.programs.EvaluationManager
to clean up states after recording the evaluation is completed.
- Removed deprecated
tff.learning.framework.ServerState
symbol.
- Removed
nest_asyncio
dependency from tutorials. - Added a new
aggregatorr
tff.aggregators.DifferentiallyPrivateFactory.tree_adaptive
for combining DP-FTRL (https://arxiv.org/abs/2103.00039) and adaptive clipping (https://arxiv.org/abs/1905.03871). - Updated
tff.learning.programs.EvaluationManager
to set the evaluation deadline from the start time.
- Python runtime deleted; C++ runtime covers all known use-cases.
- Fixed a bug attempting to push
tf.data.Dataset
iterator ops onto GPUs.
- Added attributes to
tff.learning.programs.EvaluationManager
, this enables constructing newEvaluationManager
s from existing ones. - Added Subsample Process abstract class and the implementation of Threshold Sampling Process Remove introducing dependency on relayout op for control edges.
- Replaced usage of
attrs
intff.aggregators
withtyping.NamedTuple
. - Removed introducing dependency on relayout op for control edges.
- Removed
run_server
andserver_context
from thetff.simulation
API. - Removed the following symbols from the
tff.framework
API:tff.framework.local_executor_factory
tff.framework.DataBackend
tff.framework.DataExecutor
tff.framework.EagerTFExecutor
- Removed use of deprecated tff.learning symbols, and clear cell image outputs.
- Updated TF version to 2.12.0.
- Relaxed runtime type checks on
tff.learning.templates.LearningProcess
to allow non-sequence CLIENTS arguments. tff.simulation.compose_dataset_computation_with_learning_process
now returns atff.learning.templates.LearningProcess
.- Updated the
tff.program.FederatedDataSourceIterator
s so that they can be serialized.
- Deleted the
forward_pass
attribute from theFunctionalModel
interface. - Removed
from_keras_model
,MetricsFinalizersType
,BatchOutput
,Model
, andModelWeights
symbols from thetff.learning
package. Users should instead use thetff.learning.models
package for these symbols. - Removed deprecated
tff.learning.federated_aggregate_keras_metric
function. - Removed implicit attribute forwarding on
tff.simulation.compose_dataset_computation_with_learning_process
. - Removed deprecated
tff.framework.remote_executor_factory_from_stubs
. - Removed deprecated
tff.backends.xla
APIs. - Renamed the
tff.backends.test
APIs to:tff.backends.test.(create|set)_(sync|async)_test_cpp_execution_context
.
- Exposed
tff.backends.mapreduce.consolidate_and_extract_local_processing
as public API. - Updated the federated program API to be able to handle
tff.Serializable
objects.
- Deprecated handling
attrs
classes as containers in thetff.program
API. - Updated
tff.learning.algorithms
implementations to usetff.learning.models.FunctionalModel.loss
instead ofFunctionalModel.forward_pass
.
- Avoid using
sys.stdout
andsys.stderr
insubprocess.Popen
when executing inside an IPython context. - Added a
SequenceExecutor
to the C++ execution stack to handlesequence_*
intrinsics.
- Enabled, improved, and fixed Python type annotations in some modules.
- Added the interface of
loss_fn
totff.learning.models.FunctionalModel
, along with serialization and deserialization methods. - Updated the composing executor to forward the
type
field ofIntrinsic
protos that are sent to child executors. - Added an executor binding for
DTensor
based executor.
- Deprecated
tff.framework.DataBackend
. Python execution is deprecated instead use CPP Execution.
- Fixed the formulation of the JIT constructed mapped selection computation that is sent to the remote machine in streaming mode.
- Fixed the usage of
np.bytes_
types that incorrectly truncate byte string with null terminator.
- Added client learning rate measurements to
tff.learning.algorithms.build_weighted_fed_avg_with_optimizer_schedule
- Added support for streaming federated structure values to the C++ RemoteExecutor.
- Added a C++ executor for executing TF graphs using TF2 DTensor APIs when layout information is specified for input parameters or variables in the graph.
- Deprecated the following API, Python execution is deprecated instead use CPP
execution:
tff.framework.local_executor_factory
tff.framework.remote_executor_factory_from_stubs
tff.framework.DataExecutor
tff.framework.EagerTFExecutor
- Removed the following API, Python execution is deprecated instead use CPP
execution:
tff.backends.native.create_local_python_execution_context
- `tff.backends.native.create_remote_python_execution_context
tff.framework.remote_executor_factory
- Remove the
executors_errors
module from thetff.framework
API, usetff.framework.RetryableError
instead.
- Fixed potential lifetime issue in C++ RemoteExecutor
- Enabled and fixed python type annotations in many packages.
- Fixed one-off error in evaluation criteria in training program logic.
- Created the Baselines API of the GLDv2 (landmark) dataset for simulation, with a GLDv2 preprocessing function, a GLDv2 tasks function, and a Google mirror of the GLDv2 baselines tasks.
- Temporarily removed
tff.program.PrefetchingDataSource
, the PrefetchingDataSourceIterator tests are flaky and it's not immediately clear if this is due to the implementation of the PrefetchingDataSourceIterator or due to a bug in the test. - Deprecated the following API, Python execution is deprecated instead use CPP
execution:
tff.backends.native.create_local_python_execution_context
tff.backends.native.create_remote_python_execution_context
tff.backends.native.create_remote_async_python_execution_context
tff.backends.native.set_remote_async_python_execution_context
- Removed the following API, Python execution is deprecated instead use CPP
execution:
tff.backends.native.set_local_python_execution_context
tff.backends.native.set_remote_python_execution_context
tff.framework.FederatingExecutor
tff.framework.ComposingExecutorFactory
tff.framework.ExecutorValue
tff.framework.Executor
tff.framework.FederatedComposingStrategy
tff.framework.FederatedResolvingStrategy
tff.framework.FederatingStrategy
tff.framework.ReconstructOnChangeExecutorFactory
tff.framework.ReferenceResolvingExecutor
tff.framework.RemoteExecutor
tff.framework.ResourceManagingExecutorFactory
tff.framework.ThreadDelegatingExecutor
tff.framework.TransformingExecutor
tff.framework.UnplacedExecutorFactory
- Removed duplicate API from
tff.framework
, instead use:tff.types.type_from_tensors
tff.types.type_to_tf_tensor_specs
tff.types.deserialize_type
tff.types.serialize_type
- Renamed
tff.learning.Model
totff.learning.models.VariableModel
. - Renamed the
cpp_execution_context.(create|set)_local_async_cpp_execution_context
function to match the name ofexecution_context.(create|set)_(sync|async)_local_cpp_execution_context
.
- Fixed bug in FLAIR download URLs.
- Enabled and fixed python type annotations in many packages.
- Implemented divisive split logic needed by DistributeAggregateForm, which is currently under development and will replace MapReduceForm and BroadcastForm in the future.
- Renamed the
cpp_execution_context.(create|set)_local_cpp_execution_context
function to match the name ofexecution_context.(create|set)_(sync|async)_local_cpp_execution_context
. - Deleted the sizing Python execution context and executor.
- Deleted the thread debugging Python execution context and executor.
- Removed
ExecutorService
from the public API. - Deleted the local async python execution context.
- Enabled and fixed python type annotations in some modules in the
executors
,types
, andcore
package.
- Added a
LayoutMap
message in the computation proto for TensorFlowDTensor
based execution.
- Removed the
compiler_fn
parameter from the high level*_mergeable_execution_context
functions.
- Aligned the context types allowed by the
tff.program.NativeFederatedContext
and thetff.program.PrefetchingDataSource
. - Updated
build_functional_model_delta_update
to useReduceDataset
ops to rely on MLIR Bridge for XLA compilation and TPU usage.
- Added parameter and implementation for C++ remote executor to stream the values in a structure across the gRPC interface.
- Added
tff.backends.native.desugar_and_transform_to_native
to the public API. - Replaced
GroupNorm
implementation with implementation from Keras. - Added
tff.simulations.datasets.flair
APIs for the FLAIR dataset.
- Removed file extension for
model_output_manager
used intff.learning.programs
- Enabled and fixed python type annotations in some modules.
- Changed
tff.learning.algorithms.build_weighted_fed_prox
parameter validation to allowproximal_strength = 0.0
, matching the pydoc.
- Integrated the
CppToPythonExecutorBridge
into theCPPExecutorFactory
. - Changed Python Remote Executor to decompose and stream structures in Compute
and CreateValue when _stream_structs is true. Added a bool parameter
stream_structs
totff.backends.native.set_localhost_cpp_execution_context()
API.
- Renamed
tff.backends.native.set_localhost_cpp_execution_context()
tobackends.native.set_sync_local_cpp_execution_context()
. - Renamed
tff.framework.ExecutionContext
totff.framework.SyncExecutionContext
to be consistent withtff.framework.AsyncExecutionContext
. - Removed the
SyncSerializeAndExecuteCPPContext
andAsyncSerializeAndExecuteCPPContext
classes.
- Fixed usage of
typing.Generic
in the learning package. - Enabled pytype analysis for some modules.
- Fixed lint and formatting issues for some modules.
- Improved the Python type annotations for
tff.program
API. - Extended the metrics interface on FunctionalModel to accept the entire
BatchOutput
structure from the modelforward_pass
(not just the predictions). - Introduced a DTensor Executor.
- Fixed async RuntimeWarning in the
tff.program.NativeFederatedContext
.
- Improve serialization method to allow structures larger than 2 GiB (~500
million model parameters):
tff.learning.models.FunctionalModel
tff.programs.FileProgramStateManager
- Fix a bug using
copy.deepcopy
for structures of awaitables (non-pickable) intff.learning.programs
. - Fix a bug when resuming an evaluation in
tff.learning.programs.EvaluationManager
where the restarted evaluation would overwrite released metrics.
- Reduced memory usage for entropy compression.
- Updated
com_google_protobuf
version tov3.19.0
. - Removed dependency on
six
.
- Removed default value for the key parameter from the abstract base class
tff.program.ReleaseManager
.
- Fixed a whitespace syntax issue with shutting down a process when using the localhost C++ execution context.
- Modified
tff.simulation.build_uniform_sampling_fn
so that the output raises on non-integer inputs. - Only wait a subprocess instance if it is not None.
- TFF-C++ runtime now installed by default. Note that this release will have a significantly larger PIP package size.
- Introduce
tff.learning.programs
for federated program-logic using thetff.program
APIs. - Updated
tensorflow
to version2.11.0
. - Updated
tensorflow_compression
to version2.11.0
. - Updated
bazel_skylib
to version1.3.0
.
- Skip model updates that are non-finite in
tff.learning.templates.build_apply_optimizer_finalizer
.
- Removed deprecated APIs in
tff.learning.framework
- Update the Python package scripts to use Python 3.10 by default.
- Remove module wildcard imports from init.py files in TFF.
- Update the Python package scripts to use Python 3.10 by default.
- Remove
functools.wraps
withintff.tf_computation
. - Fix typo in iNaturalist dataset docstring.
- Added
tff.learning.models.FunctionModel
support to all methods intff.learning.algorithms
. - Added support for
tf.data.DataSpec
totff.types.infer_unplaced_type
. - Use a
tensorflow::ThreadPool
for parallelism inside the C++TensorFlowExecutor
. - Introduced a new
tff.experimental_tf_fn_computation
tracing decorator that usesFunctionDef
instead ofGraphDef
tracing, providingtf.function
auto-control-dependencies. - Renamed
number_of_clients
tonum_clients
in the federated program API. - Replaced the following API with composers API in
tff.learning.templates
.tff.learning.framework.build_model_delta_optimizer_process
tff.learning.framework.ClientDeltaFn
- Fixed a bug in the “Client-efficient large-model federated learning” tutorial to use the correct dense shape.
- Added
tff.learning.models.FunctionalModel
support totff.learning.algorithms.build_mime_lite
. - Updated
tensorflow-privacy
to version0.8.6
. - Added an abstract interface describing an asynchronous context
- Removed references to
tff.framework.Context
. - Added
tff.simulation.datasets.gldv2.get_synthetic
. - Added prefetching data source in
tff.program.PrefetchingDataSource
.
- Deleted deprecated
tff.learning.framework.build_encoded_broadcast_process_from_model
. - Deprecated
tff.learning.ModelWeights
and aliastff.learning.framework.ModelWeights
, has now moved totff.learning.models.ModelWeights
. Code should be updated before the next release.
- Fixed a bug with variable creation order of metrics in
tff.learning.models.functional_model_from_keras
. - Improved
tff.tf_computation
tracing to also tracefunctools.partial
objects.
- Colab compatibility: TFF requires Python 3.9 while Colab runtime uses Python 3.7.
- Added support for Python 3.10.
- Improved support for
numpy
values in thetff.program
API. - Increased dataset serialization size limit to 100MB.
- Added a new method
tff.learning.ModelWeights.convert_variables_to_arrays
. - Added new metrics aggregation factories under
tff.learning.metrics
. - Parallelized aggregation in
tff.framework.ComposingExecutorFactory
.
- Updated to use
jax
andjaxlib
version0.3.14
. - Renamed
tff.program.CoroValueReference
totff.program.AwaitableValueReference
to reflect the relaxed contract.
- Improved documentation for
tff.simulation.build_uniform_sampling_fn
,tff.learning.robust_aggregator
,tff.aggregators.PrivateQuantileEstimationProcess
. - Fixed documentation bug for tutorial “High-performance Simulation with Kubernetes”.
- Fixed bug where momentum hyperparameters were added to SGDM optimizer when momentum was set to 0.
- Removed assertion that preprocessed datasets in a
tff.simulation.baselines.BaselineTask
have the same element structure. - Fixed a memory leak when moving numpy arrays across the Python and C++ boundary in the C++ executor.
- Fixed bug in the federated program API when using multiple release managers to release the same value.
This release contains contributions from many people at Google, as well as: Madhava Jay, nbishdev@
- Added support for
tff.learning.models.FunctionalModel
totff.learning.algorithms.build_fed_sgd
andtff.learning.algorithms.build_fed_prox
. - Increased the gRPC message limit from 1 GB to 2 GB.
- Added hyperparameter getters/setters to various components in tff.learning.
- Updated
tensorflow
to version2.10
.
- Improved documentation for
tff.analytics.heavy_hitters.iblt.build_iblt_computation()
. - Fixed incorrect docstring of
tff.federated_select
. - Fixed typo in federated program example.
- Added get/set_hparams methods to
tff.learning.templates.ClientWorkProcess
. - Added
tff.learning.algorithms.build_mime_lite_with_optimizer_schedule
. - Updated
tensorflow-privacy
to version0.8.5
. - Added
tff.learning.entropy_compression_aggregator
. - Added
tff.aggregators.EliasGammaEncodedSumFactory
. - Added
tff.program.ClientIdDataSource
andtff.program.ClientIdDataSourceIterator
, for working with a data source of ids of federated clients.
- Removed prototype IREE backend.
- Added new dependency on TensorFlow Compression.
- Fixed implementation of the
loading_remote_data
tutorial. - Corrected the docstring of
tff.simulation.datasets.stackoverflow.get_synthetic
.
- TFF's Python 3.9 typing conflicts with Colab's Python 3.7 runtime.
- Updated to use
Bazel
version5.3.0
. - Updated the conventions used to specify the version of a Python dependency, see https://github.com/tensorflow/federated/blob/main/requirements.txt for more information.
- Updated the
setup.py
to explicitly fail topip install
in Python 3.10. This has always been failing at runtime, but now explicitly fails to install usingpip
. - Refreshed loading_remote_data notebook content and added content for
FederatedDataSource
. - Added a TFF
type_signature
attribute to objects of typeMapReduceForm
. - Added a series of slides to the GitHub repo (so not part of the PIP package) which detail a technical deep dive into TFF.
- Bumped tf-privacy version to
0.8.4
. - Bumped tf-model-optimization version to
0.8.3
. - Removed
initialize
fromMapReduceForm
. SequenceType
now automatically casts anyStructWithPythonType
that contains alist
to atuple
fortf.data
compatibility.- Unified the
model_fn
andmodel
parameters oftff.learning.algorithms.build_weighted_fed_avg
. MapReduceForm
now takes atype_signature
argument in its constructor, and no longer takes aninitialize
argument.MapReduceForm
no longer contains aninitialize
attribute.
- Relaxed overly strict type equivalence check to assignability in TFF-TF code generation.
- Extend
tff.analytics.heavy_hitters.iblt
withcreate_chunker
API for encoding non-Unicode strings. - Extend
tff.aggregators.DifferentiallyPrivateFactory.tree_aggregation
with an optionalrecord_aggregation_factory
argument.
- Replaced
ModularClippingSumFactory
withSecureModularSumFactory
intff.analytics.build_hierarchical_histogram_process
.
- TFF's python 3.9 typing conflicts with Colab's Python 3.7 support.
- Add a MimeLite implementation that allows from optimizer learning rate
scheduling in
tff.learning.algorithms.build_mime_lite_with_optimizer_schedule
.
- None
- None
- TFF's python 3.9 typing conflicts with Colab's Python 3.7 support.
- Added
ReleaseManager
s to make authoring program logic more convenient. - Updated TFFs
attrs
dependency to version21.4.0
. - Update TFFs
tensorflow-privacy
dependency to version0.8.1
.
- Changed
tff.learning.BatchOutput
from an attrs class to a namedtuple. - Removed unused
tff.learning.framework.parameter_count_from_model
API.
- Add tests for
namedtuple
s in thetff.program
package. - Add
num_subrounds
parameter to the mergeable context, allowing callers to optionally sequentialize subrounds. - Add metrics support to
tff.learning.models.FunctionalModel
, including updates to the helper functioncreate_functional_metric_fns
and the downstream callertff.learning.algorithms.build_weighted_fed_avg
.
- Fix typo in the types constructed for testing the
tff.program
package. - Fix some program example typos.
- Fix tests that don't seem to be running under the CI.
- Fix naming bug for Python mergeable execution.
- Ensure exceptions raised from remote executor stub implement gRPC error interface.
- Update
tff.structure.Struct
integration with JAX pytrees to not flatten the entire structure. - Use Python 3.7 compatible type annotations until Colab updates to Python 3.9.
- Update the
MemoryReleaseManager
to savetype_signature
when releasing values. - Add a
type_signature
parameter to theReleaseManager.release
method. - Unify retryability logic between TFF-C++ and TFF-Python.
- Update the TFF contributions and collaboration links to point to the Discord server.
- Move Python executor stacks file to
python_executor_stacks.py
inexecutor_stacks
directory.
- Ensure that dataset deserialization will return ragged and sparse tensors, as needed according to the TFF type of the dataset.
- Make
metric_finalizers
use metric constructors if available.
- Updated tutorials to use
tff.learning.algorithms
API. - Asynchronous TFF execution contexts no longer assume a single global cardinality; they concurrently invoke any computation for which concurrency is requested.
- Removed
tff.learning.build_federated_averaging_process
; users should migrate totff.learning.algorithms.build_weighted_fed_avg
.
- Clarified semantics for TFF-C++ multimachine
Dispose
,DisposeExecutor
, and executor keying, to avoid raising exceptions and spamming logs in the course of normal operation. - Fixed unsigned integer overflow for TFF-C++
max_concurrent_computation_calls
. - Normalizes on call-dominant form before attempting to compile to
MergeableCompForm
, removing spurious failures on dependent-aggregation checking.
- Serialization / deserialization of tf.data.Datasets yielding non-dense
tensors for multimachine runtime may encounter issues:
tff.framework.deserialize_value
may fail to deserialize tf.data.Datasets yielding RaggedTensors or SparseTensors.tff.framework.serialize_value
may fail to serialize tf.data.Datasets yielding SparseTensors.
- New Colab notebook illustrating how to use
DataBackend
to load remote datasets. - Added a CreateDataDescriptor helper function.
- Added a worker binary serving the TFF-C++ executor service.
- Fixed bug with intermediate aggregation and controller failures, causing hangs.
- Updated TensorFlow to
2.9.1
. - Update pybind11 to
2.9.2
. - Re-enable cpp_fast_protos.
- Introduces container class to run coroutines in a dedicated thread, allowing TFF’s synchronous execution interfaces to be used in conjunction with other asyncio code.
- Use latest TFF version in Colab notebook links.
- Rename the helper functions that create test
MeasuredProcess
es. - Add a compiler transform checking Tensorflow computations against list of allowed ops.
- Explicitly specify return types in the
program
package. - Adds convenience function for setting a local async CPP execution context.
- Move jax components into a non-experimental namespace.
- Switch compilation flag
_GLIBCXX_USE_CXX11_ABI
to1
.
- Adds error message logging to TFF C++ execution context.
- Adds test coverage for C++ runtime with aggregators.
- Redefines 'workers going down with fixed clients per round' test.
- Add complete examples of using
DataBackend
with TFF comps. - Updated the MapReduceForm documentation to include the two additional secure sum intrinsics.
- tff.learning
- Relax the type check on LearningProcess from strictly SequenceType to also allow structures of SequenceType.
- Remove usage of
tff.test.TestCase
,tff.test.main()
, and deletetest_case
module. - Update test utility docstrings to use consistent vocabulary.
- Update to TensorFlow 2.9.0
- Rename up
compiler/test_utils
tocompiler/building_block_test_utils
. - Remove some unnecessary usage of
pytype: skip-file
. - Specify the
None
return type ofReleaseManager.release
. - Remove usage of deprecated numpy types.
- Replace depreciated
random_integers
withrandint
.
- Fix numpy warning.
- Added
asyncio.run
call to metrics manager release calls to ensure compatibility with https://github.com/tensorflow/federated/commit/a98b5ed6894c536549da06b4cc7ed116105dfe65. - Added an example and documentation for the Federated Program API.
- Improved
model_update_aggregator
to support structures with mixed floating dtypes. - Create a mirror of
tff.simulation.compose_dataset_computation_with_iterative_process
fortff.learning.templates.LearningProcess
. - Added logging of expected sequential computations to local TFF-C++ runtime.
- Moved asserts from
tff.test.TestCase
totff.test.*
as functions. - Removed
assert_type_assignable_from
function. - Moved
assert_nested_struct_eq
to thetype_conversions_test
module. - Removed
client_train_process
and fedavg_ds_loop comparisons.
- Fixed comparisons to enums in the benchmarks package.
- Fixed
async_utils.SharedAwaitable
exception raiser. - Fixed various lint errors.
- Deprecated
tff.learning.build_federated_averaging_process
. - Added an API to convert
tf.keras.metrics.Metric
to a set of puretf.functions
.
- Renamed
ProgramStateManager.version
toProgramStateManager.get_versions
.
- Fixed the "datasets/" path in the working with TFF's ClientData tutorial.
- Updated .bazelversion to
5.1.1
. - Updated the
tff.program
API to useasyncio
. - Exposed new APIs in the
tff.framework
package:tff.framework.CardinalitiesType
.tff.framework.PlacementLiteral
.tff.framework.merge_cardinalities
.
tff.analytics
- Added new
analytic_gauss_stddev
API.
- Added new
- Renamed
ProgramStateManager.version
toProgramStateManager.get_versions
.
- Fixed some Python lint errors related to linting Python 3.9.
- Cleaned up stale TODOs throughout the codebase.
- Version 0.21.0 currently fails to import in colab if the version of Python is less than Python 3.9. Please use a runtime with a version of Python greater than Python 3.9 or use TFF version 0.20.0.
tff.analytics
- Added new
tff.analytics.IbltFactory
aggregation factory. - Added new IBTL tensor encoder/decoder libraries and uses them in
tff.analytics.heavy_hitters.iblt.build_iblt_computation
.
- Added new
tff.aggregator
- Added
as_weighted_aggregator
to thetff.aggregator.Factory
API.
- Added
tff.learning
- Improved compilation and execution performance of
tff.learning.metrics.secure_sum_then_finalize
by grouping tensors by DType. - Added
set_model_weights
method and default implementation totff.learning.templates.LearningProcess
. - Added a new
reset_metrics
attribute totff.learning.Model
. - Added
schedule_learning_rate
totff.learning.optimizers
. - Added new
tff.learning.ddp_secure_aggregator
for Distributed Differential Privacy.
- Improved compilation and execution performance of
tff.simulation
- Added an option to distort train images in the CIFAR-100 baseline task.
- Changed the default sequence length for the Shakespeare baseline task to a more reasonable value.
- Core
- Switched runtime to create new RemoteExecutors with different cardinalities, rather than resetting the cardinality in the remote service.
- Removed support for Python 3.7 and 3.8, TFF supports 3.9 and later.
- Removed deprecated attributes
report_local_outputs
andfederated_output_computation
fromtff.learning.Model
- Removed the
ingest
method fromtff.Context
- Multiple typos in tests, code comments, and pydoc.
- Sequences (datasets) of SparseTensors don't work on the C++ runtime.
- Computations when
CLIENTS
cardinality is zero doesn't work on the Python runtime. - Assigning variables to a Keras model after construction inside a
model_fn
results in a non-deterministic graph.
- Added
tff.program
API; this API is still in active development but can be used to compose shared and platform specific: program logic, components, and privacy concepts to create federated programs. - Added support for Python 3.9.
- Added CelebA and iNaturalist datasets to
tff.simulation.datasets
. - Added
tff.analytics
API for federated analytics, including private heavy hitters algorithms. - Added
tff.learning.algorithms
API, including TFF implementations of FedProx, FedAvg with learning rate scheduling, federated k-Means, and MimeLite. - Added
tff.learning.metrics
API to support easy configuration of cross-client metrics aggregation via the newmetrics_aggregator
argument. - Added
metrics_aggregator
argument totff.learning.build_federated_averaging_process
andtff.learning.build_federated_evaluation
. - Added
report_local_unfinalized_metrics
andmetric_finalizers
methods totff.learning.Model
and deprecatedreport_local_outputs
andfederated_output_computation
. - Added
tff.learning.optimizers
API for building purely functional optimizers and implementations of SGD, Adagrad, Rmsprop, Adam, Yogi, - Added
tff.learning.reconstruction
API for building partially local federated learning algorithms, including Federated Reconstruction. - Added
tff.learning.templates
API to support building learning algorithms in a modular fashion. - Added
tff.simulation.baselines
API to support evaluating learning algorithms on a suite of representative tasks. - Added
tff.aggregators.DifferentiallyPrivateFactory.tree_aggregation
to support the DP-FTRL algorithm. - Added
tff.aggregators.SecureModularSumFactory
- Added
tff.aggregators.DiscreteFourierTransformFactory
andtff.aggregators.HadamardTransformFactory
to support rotation-based aggregators. - Added
tff.aggregators.concat_factory
for aggregating structures as a single tensor. - Added
tff.backends.native.create_mergeable_comp_execution_context
,tff.backends.native.set_mergeable_comp_execution_context
; these can be used with a distributed runtime to scale to tens of thousands of clients. - Improved performance of many
tff.simulation.datasets.ClientData
subclasses. - Added
tff.simulation.datasets.ClientData.serializable_dataset_fn
attribute, enabling dataset creation within TF/TFF computations. - Added
debug_measurements
option to aggregators intff.learning
. - Added support for unambiguous zero-client aggregations.
- Added support for Python dataclasses as function parameters and return values for TFF computations.
- Added automatic insertion of
tff.federated_zip
to invocation of user-defined TFF federated computations. - Added utilities to
tff.simulation.datasets
for saving federated datasets to a SQL database compatible withtff.simulation.datasets.SqlClientData
. - Added
tff.learning.models.FunctionalModel
andtff.learning.models.functional_model_from_keras
. - Increased max flow of tensors. Tensors now flow here, there, and everywhere.
- Updated the Python dependencies:
- Updated
absl-py
to version1.0.0
. - Updated
attrs
to version21.2.0
. - Added
farmhashpy
version0.4.0
. - Updated
jax
to version0.2.27
. - Updated
jaxlib
to version0.1.76
. - Updated
numpy
to version1.21.4
. - Removed
retrying
. - Updated
tensorflow-model-optimization
to version0.7.1
. - Updated
tensorflow-model-optimization
to version0.7.3
. - Updated
tensorflow
to version2.8.0
. - Added support for building many dependencies including
tensorflow
using Bazel. - Updated the Bazel dependencies:
- Updated
rules_python
to version0.5.0
. - Updated
com_google_protobuf
to versionv3.18.0-rc1
. - Added
absl_py
version1.0.0
. - Added
com_google_googletest
versionrelease-1.11.0
. - Added
io_bazel_rules_go
versionv0.29.0
. - Added
bazel_skylib
version1.0.3
. - Added
pybind11_abseil
. - Added
pybind11_bazel
. - Added
pybind11_protobuf
. - Added
com_google_absl
version20211102.0
. - Added
tensorflow_org
versionv2.8.0
.
- Removed support for building source on MacOS.
- Removed support for Python 3.6.
- Removed symbol
tff.framework.type_contains
, usetff.types.contains
instead. - Removed many symbols from
tff.simulation
, these can be found intff.program
instead. - Removed support for converting non-OrderedDict mapping types to
tff.Value
s. - Removed
tff.simulation.datasets.ClientData.from_clients_and_fn
in favor oftff.simulation.datasets.ClientData.from_clients_and_tf_fn
. - Restricted
tff.simulation.datasets.ClientData.preprocess
to only support TF-serializable functions. - Removed
tff.backends.reference
, and the reference context it contained. - Removed
tff.learning.build_federated_sgd_process
in favor oftff.learning.algorithms.build_fed_sgd
. - Removed
tff.simulation.run_simulation
in favor oftff.simulation.run_training_process
. - Removed
tff.learning.framework.EnhancedModel
. - Removed
tff.learning.framework.build_stateless_mean
.
- Fixed broken links in documentation.
- Fixed many pytype errors.
- Fixed some inconsistencies in Bazel visibility.
- Fixed bug where
tff.simulation.datasets.gldv2.load_data()
would result in an error.
- 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 compatibility.
- 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 tutorials.
- 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 infinite 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 withtff.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.