Я хотел бы знать самый простой способ создать модель, транслировать ее с федеративным тензорным потоком, запустить цикл и собрать веса, возвращаемые клиентами, без их агрегирования с помощью fedavg.
Сбор данных о весах, возвращаемых клиентами, без их агрегирования
Ответы (1)
TFF предоставляет для этой цели внутреннюю tff.federated_collect
; он материализует поток клиентских данных на сервере.
Один из простых способов связать это с внутренностями в основном существующей федеративной процедуры - это fork _ 2_, что, на мой взгляд, является разумной отправной точкой для работы с низкоуровневыми возможностями TFF.
Здесь следует отметить несколько моментов. Во-первых, никакая известная мне «производственная» система не поддерживает federated_collect
. Во-вторых, в зависимости от вашего желания, возможно, есть более простое и простое решение: просто верните сами веса клиента. Среда выполнения TFF материализует список клиентских весов Python (как я полагаю, в виде активных тензоров), на котором вы можете выполнять произвольную постобработку Python.
Чтобы попасть сюда из simple_fedavg
, вы должны эффективно верните client_outputs
напрямую вместо того, чтобы передавать их в tff.federated_mean
. Это даст вам дельты клиентов (IE, разницу между конечными весами клиентов и начальными весами клиентов); однако вы можете просто изменить , чтобы при желании избежать вычисления этой разницы.