用TFF构建fed_avg

2025/06/27

用TFF构建fed_avg

learning API

tff.learning包封装了常见的联邦学习算法(如 FedAvg)

直接用就行 如直接用 : tff.learning.algorithms.build_weighted_fed_avg

Core API

主要在tff包下面

允许自定义联邦学习算法的分布式逻辑。

将 TensorFlow 代码与分布式通信操作结合,无需关注通信细节。

是构建 tff.learning 的基础。

TFF 核心功能

#  例子:对所有客户端的分数平均
@tff.federated_computation(tff.FederatedType(tf.float32, tff.CLIENTS)) # 表示输入是客户端设备上的浮点数
def compute_average(client_scores):
    return tff.federated_mean(client_scores)

使用 TFF 自定义构建联邦学习的步骤

FedAvg 算法为例(和TensorFlow实现有哪些不同):

  1. 数据准备
    • 使用 TFF 加载联邦数据集,如mnist的联邦版本: tff.simulation.datasets.emnist.load_data()
  2. 模型准备
    • 要把原本用tf.Keras写的模型用 TFF 的 tff.learning.models.functional_model_from_keras 包装,将这些本地逻辑封装并扩展到分布式环境。
  3. 初始化服务器状态
    • 模型初始化,返初始化逻辑放在 @tff.federated_computation 中并指定为 tff.SERVER 放置位置。
  4. 客户端更新
    • 本地训练逻辑由 tf.Keras实现
    • tff.tensorflow.computation 封装,结合 federated_map 分发到客户端。
  5. 服务器广播
    • 使用 federated_broadcast 将服务器权重发送到客户端。
  6. 客户端上传与聚合
    • 使用 federated_mean 聚合客户端更新后的权重。
  7. 服务器更新
    • 用 tf.Keras实现 server_update更新逻辑。
    • 然后 tff.tensorflow.computation 封装并应用。

可复用 TensorFlow 代码的步骤

TFF 与 TensorFlow 高度兼容,许多代码可直接复用:

TFF 的作用是将这些本地逻辑封装并扩展到分布式环境。

通过@tff.federated_computation和数据类型以及位置 封装

隐私保护支持

原生支持差分隐私,没有内置同态加密支持,需要将NTRU同态加密 使用联邦算法实现(使用@tff.federated_computation装饰,并定义好数据和位置)

用TFF构建fed_avg

learning API

tff.learning包封装了常见的联邦学习算法(如 FedAvg)

直接用就行 如直接用 : tff.learning.algorithms.build_weighted_fed_avg

Core API

主要在tff包下面

允许自定义联邦学习算法的分布式逻辑。

将 TensorFlow 代码与分布式通信操作结合,无需关注通信细节。

是构建 tff.learning 的基础。

TFF 核心功能

#  例子:对所有客户端的分数平均
@tff.federated_computation(tff.FederatedType(tf.float32, tff.CLIENTS)) # 表示输入是客户端设备上的浮点数
def compute_average(client_scores):
    return tff.federated_mean(client_scores)

使用 TFF 自定义构建联邦学习的步骤

FedAvg 算法为例(和TensorFlow实现有哪些不同):

  1. 数据准备
    • 使用 TFF 加载联邦数据集,如mnist的联邦版本: tff.simulation.datasets.emnist.load_data()
  2. 模型准备
    • 要把原本用tf.Keras写的模型用 TFF 的 tff.learning.models.functional_model_from_keras 包装,将这些本地逻辑封装并扩展到分布式环境。
  3. 初始化服务器状态
    • 模型初始化,返初始化逻辑放在 @tff.federated_computation 中并指定为 tff.SERVER 放置位置。
  4. 客户端更新
    • 本地训练逻辑由 tf.Keras实现
    • tff.tensorflow.computation 封装,结合 federated_map 分发到客户端。
  5. 服务器广播
    • 使用 federated_broadcast 将服务器权重发送到客户端。
  6. 客户端上传与聚合
    • 使用 federated_mean 聚合客户端更新后的权重。
  7. 服务器更新
    • 用 tf.Keras实现 server_update更新逻辑。
    • 然后 tff.tensorflow.computation 封装并应用。

可复用 TensorFlow 代码的步骤

TFF 与 TensorFlow 高度兼容,许多代码可直接复用:

TFF 的作用是将这些本地逻辑封装并扩展到分布式环境。

通过@tff.federated_computation和数据类型以及位置 封装

隐私保护支持

原生支持差分隐私,没有内置同态加密支持,需要将NTRU同态加密 使用联邦算法实现(使用@tff.federated_computation装饰,并定义好数据和位置)