View source on GitHub |
Aggregates value
from tff.CLIENTS
to tff.SERVER
.
tff.federated_aggregate(
value, zero, accumulate, merge, report
) -> tff.Value
This generalized aggregation function admits multi-layered architectures that involve one or more intermediate stages to handle scalable aggregation across a very large number of participants.
The multi-stage aggregation process is defined as follows:
Clients are organized into groups. Within each group, a set of all the member constituents of
value
contributed by clients in the group are first reduced using reduction operatoraccumulate
withzero
as the zero in the algebra. If members ofvalue
are of typeT
, andzero
(the result of reducing an empty set) is of typeU
, the reduction operatoraccumulate
used at this stage should be of type(<U,T> -> U)
. The result of this stage is a set of items of typeU
, one item for each group of clients.Next, the
U
-typed items generated by the preceding stage are merged using the binary commutative associative operatormerge
of type(<U,U> -> U)
. The result of this stage is a single top-levelU
that emerges at the root of the hierarchy at thetff.SERVER
. Actual implementations may structure this step as a cascade of multiple layers.Finally, the
U
-typed result of the reduction performed in the preceding stage is projected into the result value usingreport
as the mapping function (for example, if the structures being merged consist of counters, this final step might include computing their ratios).
Args | |
---|---|
value
|
A value of a TFF federated type placed at tff.CLIENTS to aggregate.
|
zero
|
The zero of type U in the algebra of reduction operators, as
described above.
|
accumulate
|
The reduction operator to use in the first stage of the process.
If value is of type {T}@CLIENTS , and zero is of type U , this
operator should be of type (<U,T> -> U) .
|
merge
|
The reduction operator to employ in the second stage of the process.
Must be of type (<U,U> -> U) , where U is as defined above.
|
report
|
The projection operator to use at the final stage of the process to
compute the final result of aggregation. If the intended result to be
returned by tff.federated_aggregate is of type R@SERVER , this operator
must be of type (U -> R) .
|
Returns | |
---|---|
A representation on the tff.SERVER of the result of aggregating value
using the multi-stage process described above.
|
Raises | |
---|---|
TypeError
|
If the arguments are not of the types specified above. |