Skip to content

Releases: google-parfait/tensorflow-federated

TensorFlow Federated 0.89.0

31 Oct 23:51
Compare
Choose a tag to compare

Release 0.89.0

Added

  • tff.StructType.items(), this API makes it easier to iterate over
    tff.StrucType without having to deal with hard to discover and use
    tff.structure.* APIs.
  • The abstract class DPTensorAggregator and the child DPQuantileAggregator
    (along with the factory class). DPQuantileAggregator is currently a
    skeleton; future CLs will implement the member functions.
  • DPQuantileAggregator::AggregateTensors performs either a push_back or
    reservoir sampling, depending on size of member buffer_. The reservoir
    sampling functionality is performed by ::InsertWithReservoirSampling.
  • DPQuantileAggregator::MergeWith copies as much data over from the other
    aggregator's buffer_ until capacity is hit, then performs reservoir
    sampling.
  • tff.program.ComputationArg, which is helpful when creating a federated
    platform.

Removed

  • tff.types.tensorflow_to_type, this function is no longer used.

TensorFlow Federated 0.88.0

26 Sep 16:21
Compare
Choose a tag to compare

Release 0.88.0

Added

  • tff.tensorflow.to_type.
  • Added pack_args_into_struct and unpack_args_from_struct to the public
    API under framework.

Deprecated

  • tff.types.tensorflow_to_type, use tff.tensorflow.to_type instead.

Changed

  • 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 and
    tff.types.type_to_tf_tensor_specs to the tff.tensorflow package.

Removed

  • tff.framework.merge_cardinalities
  • tff.framework.CardinalityCarrying
  • tff.framework.CardinalityFreeDataDescriptor
  • tff.framework.CreateDataDescriptor
  • tff.framework.DataDescriptor
  • tff.framework.Ingestable

TensorFlow Federated 0.87.0

17 Sep 17:44
Compare
Choose a tag to compare

Release 0.87.0

Added

  • Added an implementation of AdamW to tff.learning.optimizers.

Changed

  • Support None gradients in tff.learning.optimizers. This mimics the
    behavior of tf.keras.optimizers - gradients that are None 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 with
    tff.learning computations.
  • tff.simulation.datasets.TestClientData only accepts dictionaries whose
    leaf nodes are not tf.Tensors.

Fixed

  • 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.

Removed

  • tff.jax_computation, use tff.jax.computation instead.
  • tff.profiler, this API is not used.
  • Removed various stale tutorials.
  • Removed structure from tff.program.SavedModelFileReleaseManager's
    get_value method parameters.
  • Removed support for tf.keras.optimizers in tff.learning.

TensorFlow Federated 0.86.0

20 Aug 15:33
Compare
Choose a tag to compare

Release 0.86.0

Added

  • tff.tensorflow.transform_args and tff.tensorflow.transform_result, these
    functions are intended to be used when instantiating and execution context
    in a TensorFlow environment.

Changed

  • Replaced the tensor on the Value protobuf with an array field and
    updated the serialization logic to use this new field.

TensorFlow Federated 0.85.0

14 Aug 19:58
Compare
Choose a tag to compare

Release 0.85.0

Added

  • The dp_noise_mechanisms header and source files: contains functions that
    generate differential_privacy::LaplaceMechanism or
    differential_privacy::GaussianMechanism, based upon privacy parameters and
    norm bounds. Each of these functions return a DPHistogramBundle 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 the ml_dtypes package.

Fixed

  • A bug where tf.string was mistakenly allowed as a dtype to
    tff.types.TensorType. This now must be np.str_.

Changed

  • tff.Computation and tff.framework.ConcreteComputation to be able to
    transform the arguments to the computation and result of the computation.
  • DPClosedDomainHistogram::Report and DPOpenDomainHistogram::Report: they
    both use the DPHistogramBundles produced by the CreateDPHistogramBundle
    function in dp_noise_mechanisms.
  • DPGroupByFactory::CreateInternal: when delta 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 a should_discard_round
    function to decide whether a round should be discarded and retried.

Removed

  • tff.structure.to_container_recursive, this should not be used externally.

TensorFlow Federated 0.84.0

29 Jul 16:08
Compare
Choose a tag to compare

Release 0.84.0

Added

  • Added some TFF executor classes to the public API (ComposingExecutor,
    ExecutorTestBase, MockExecutor, ThreadPool).
  • Added some compiler transformation helper functions to the public API
    (replace_intrinsics_with_bodies, unique_name_generator,
    transform_preorder, to_call_dominant).
  • Added 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).

Changed

  • Fixed a bug in tff.jax.computation that raised an error when the
    computation had unused arguments.
  • Fixed a bug when using tff.backends.xla execution stack that raised errors
    when single element structures were returned from tff.jax.computation
    wrapped 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 of
    DPOpenDomainHistogram accordingly.
  • The behavior of DPClosedDomainHistogram::Report(): it now produces an
    aggregate for each possible combinations of keys. Those composite keys that
    GroupByAggregator 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 when use_experimental_simulation_loop=True and
    model_fn is of type tff.learning.models.FunctionalModel.

TensorFlow Federated 0.83.0

16 Jul 16:19
Compare
Choose a tag to compare

Release 0.83.0

Changed

  • 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.

Removed

  • Unused functions from tensorflow_utils.
  • Serializing raw tf.Tensor values to the Value protobuf.
  • Partial support for dataclasses.

TensorFlow Federated 0.82.0

28 Jun 17:16
Compare
Choose a tag to compare

Release 0.82.0

Added

  • Add 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_.

Changed

  • How DPCompositeKeyCombiner handles invalid l0_bound_ values.
  • The default l0_bound_ value in DPCompositeKeyCombiner 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
    into dp_open_domain_histogram.h/cc and dp_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, use
    tff.backends.mapreduce.federated_secure_modular_sum instead.

TensorFlow Federated 0.81.0

17 Jun 16:46
Compare
Choose a tag to compare

Release 0.81.0

Added

  • 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 the tensor proto to allow representing string
    values explicitly.

Changed

  • 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 from DPGroupingFederatedSumFactory
    to DPGroupByFactory, because closed-domain histogram algorithm will use
    DPGroupingFederatedSum but not demand a positive linfinity_bound.

Removed

  • The dependency on semantic-version.
  • The tff.async_utils package, use asyncio instead.

TensorFlow Federated 0.80.0

08 Jun 05:47
Compare
Choose a tag to compare

Release 0.80.0

Breaking Changes

  • Move the tools package to the root of the repository.
  • Updated bazel to version 6.5.0.
  • Updated rules_python to version 0.31.0.
  • Deleted deprecated tff.learning.build_federated_evaluation, which was superseded by tff.learning.algorithms.build_fed_eval.