Flower v1.4.0 版本深度解析:FedXgbNnAvg 策略、iOS SDK 与 Driver API 的关键演进
2026/9/17 22:22:52 网站建设 项目流程

Flower v1.4.0 版本深度解析:FedXgbNnAvg 策略、iOS SDK 与 Driver API 的关键演进

【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower

本文围绕 Flower 框架 v1.4.0(2023-04-21 发布)的官方变更日志展开,逐项解析该版本引入的核心能力:XGBoost 联邦学习策略FedXgbNnAvg、iOS SDK 预览版、FedProx 与 FedAvg-FEMNIST 官方基线、实验性 REST API、Driver API 的持久化升级,以及History对象记录训练指标的修复。读完本文,你将掌握 v1.4.0 每项新特性的技术定位、使用方式,以及这些特性在当前仓库源码中的落点与后续演化方向(如FedXgbNnAvg的废弃迁移)。

版本概览:v1.4.0 交付了什么

官方变更日志位于 v1.4.0.md,该版本的主要交付内容可以归纳为以下几类:

  • 新策略:XGBoost 联邦学习支持(FedXgbNnAvg策略 + 官方示例);
  • 新平台:Swift 编写的 iOS SDK(预览版);
  • 新基线:FedProx MNIST 与 FedAvg FEMNIST 两个官方 Baseline;
  • 新接口:实验性 REST API(gRPC 之外的替代通信栈);
  • Driver API 增强:SQLite 持久化服务器状态、已投递任务自动清理;
  • Bug 修复:长模拟下 Ray 溢写(spilling)导致训练中断的问题;
  • 文档与可观测性:"What is Federated Learning?" 入门教程、模拟监控 how-to 指南、训练指标写入History对象;
  • 通用改进:数十项底层修复与增强(PR 范围约 #1471 至 #1805)。

变更日志同时列出了 22 位对本版本作出贡献的开发者(git shortlog顺序):Adam Narozniak、Alexander Viala Bellander、Charles Beauville、Chenyang Ma (Danny)、Daniel J. Beutel、Edoardo、Gautam Jajoo、Iacob-Alexandru-Andrei、JDRanpariya、Jean Charle Yaacoub、Kunal Sarkhel、L. Jiang、Lennart Behme、Max Kapsecker、Michał、Nic Lane、Nikolaos Episkopos、Ragy、Saurav Maheshkar、Semo Yang、Steve Laskaridis、Steven Hé (Sīchàng)、Taner Topal。

该版本明确声明没有不兼容变更(Incompatible changes: None),即从 v1.3.x 升级到 v1.4.0 无需迁移代码。

XGBoost 联邦学习:FedXgbNnAvg 策略

v1.4.0 最重要的功能之一是引入对 XGBoost 的联邦学习支持。XGBoost 是一种基于树的集成机器学习算法,通过梯度提升(gradient boosting)提升模型精度;但树模型不像神经网络那样可以直接对权重做加权平均,因此不能直接套用标准的FedAvg聚合。

策略实现:神经网络输出加权平均 + 树的组合

FedXgbNnAvg策略的源码位于 fedxgb_nn_avg.py。从源码文档字符串可以看到,该策略"基于构建神经网络(Neural Network)并对预测结果做平均",对应 Ma et al., 2023 的 Federated XGBoost 工作(arXiv:2304.07537)。

从源码结构看,其聚合逻辑(aggregate_fit方法)分为两条通道:

  1. 神经网络通道:将每个客户端返回的第一组参数(fit_res.parameters[0],即神经网络权重)通过parameters_to_ndarrays转为 ndarray,按num_examples加权平均——这与标准FedAvgaggregate完全一致,所以FedXgbNnAvg直接继承自FedAvg类;
  2. 树通道:将每个客户端返回的第二组参数(fit_res.parameters[1],即本地 XGBoost 树)收集为trees_aggregated列表,随聚合结果一并下发给客户端,用于在下一轮本地训练中继续生长新的树。

客户端侧的模式可以这样理解:每个客户端训练一个神经网络去拟合本地 XGBoost 模型的输出;服务器对该"预测器网络"做联邦平均后,客户端用更新后的网络预测结果重建/继续训练自己的树模型。这一设计绕开了"树不可平均"的难题。

该策略还复用了FedAvg的失败容忍配置(accept_failures,可从__repr__输出中看到),并支持fit_metrics_aggregation_fn聚合自定义训练指标。

重要现状:策略已迁移至 Flower Baselines

需要注意一个仓库现状:当前代码中FedXgbNnAvg的类文档已标注废弃(deprecated),实例化时会通过warn_deprecated_feature输出弃用警告,并指引用户使用 Flower Baselines 中的副本baselines/hfedxgboost。这意味着:v1.4.0 引入时它位于主框架内,而后续版本中此类垂直场景策略被迁往 Baselines 目录维护,主框架只保留兼容入口。阅读该策略源码时应以 fedxgb_nn_avg.py 及其弃用提示为准。

配套示例:quickstart-xgboost

v1.4.0 同时提供了 XGBoost 用法示例(changelog 中写作xgboost-quickstart,在当前仓库中对应 examples/quickstart-xgboost)。该示例目录包含:

  • README.md:示例说明与运行步骤;
  • quickstart_xgboost/server_app.py:服务端入口,装配FedXgbNnAvg策略;
  • quickstart_xgboost/client_app.py:客户端入口,实现 XGBoost 本地训练与树的上传/接收;
  • quickstart_xgboost/task.py:任务定义,将服务端与客户端串联起来;
  • pyproject.toml:依赖声明,可据此确认示例所需的 Flower 与 XGBoost 版本前提。

仓库中另有功能更完整的综合示例 examples/xgboost-comprehensive,可作为深入参考。

iOS SDK 预览版:把 Flower 带上 iPhone

v1.4.0 为希望在 iOS 移动设备上实现联邦学习的开发者引入了 Swift 编写的 iOS SDK(预览版)。当前仓库中,Swift SDK 位于 framework/swift/flwr,其结构包括:

  • Package.swift:Swift Package Manager 清单,定义 SDK 的包名、依赖与目标,是将其集成进 Xcode 项目的入口;
  • README.md:SDK 使用说明;
  • Sources/:SDK 源代码(含网络层、模型接口等);
  • Tests/:Swift 测试。

配合该 SDK,官方 iOS 示例也得到更新,位于 examples/ios:其中FLiOS/目录是 Xcode 工程(含 60 余个 Swift 源文件与 proto 定义),根目录还提供 server.py 作为 Flower 服务端,以及 scenarios.ipynb 演示不同运行场景。由于 changelog 明确标注该 SDK 为preview(预览)状态,生产使用应关注其 API 在后续版本中的稳定性。

官方基线:FedProx MNIST 与 FedAvg FEMNIST

v1.4.0 新增了两个官方 Baseline,用于复现经典论文实验,方便研究者做算法对比:

FedProx MNIST

该基线复现《Federated Optimization in Heterogeneous Networks》(Li et al., 2018, arXiv:1812.06127)中的 MNIST + CNN 任务,使用FedProx策略。FedProx在本地目标中加入近端项(proximal term)以约束本地更新不偏离全局模型过远,从而在设备/数据异构(heterogeneous)场景下让收敛更稳健。

当前仓库中该基线位于 baselines/fedprox,其 MNIST 实验配置保存在 baselines/fedprox/conf/mnist/ 目录,配置命名清晰地体现了实验矩阵:

  • fedprox_mu_0.0/2.0×sf_0.0/0.5/0.9:mu 是 FedProx 的近端项系数(0 即退化为 FedAvg 行为,2.0 表示更强的近端约束),sf 是联邦学习中的采样因子(fraction of clients,每轮参与训练的设备比例);
  • 对照组fedavg_sf_0.0/0.5/0.9.toml:在相同采样因子下用FedAvg策略作为基线对照,这正是原论文"异构环境下 FedProx 相对 FedAvg 的优势"实验设计的体现。

目录中还提供了 run_mnist_experiments.sh 与 run_femnist_experiments.sh 两个批量运行脚本,以及 conf/femnist/ 下的 FEMNIST 变体配置。具体运行步骤与依赖安装方式见 baselines/fedprox/README.md。

FedAvg FEMNIST

该基线复现 LEAF 基准论文(Caldas et al., 2018, arXiv:1812.01097)中 FedAvg 算法在 FEMNIST 数据集上的实验,用于评估标准 FedAvg 在真实移动场景数据上的表现,可作为 FedProx 等其他策略的性能参照。

实验性 REST API:gRPC 之外的另一种通信方式

v1.4.0 引入了作为 gRPC 通信栈替代方案的 REST API。两个关键约束来自 changelog 原文:

  1. 初始版本仅支持匿名客户端(anonymous clients),尚不支持带认证的身份管理场景;
  2. 仍属实验特性,changelog 明确提醒"REST API 是实验性的,未来很可能发生显著变化",因此不应对它的端点形态做长期依赖假设。

从仓库现状看,Flower 的 Python 端点体系已经演进为 ServerApp / ClientApp / Task 的声明式应用模型(如 framework/py/flwr/serverapp、framework/py/flwr/clientapp),示例代码普遍采用这一形态。理解 v1.4.0 的 REST API 时,应以"当时 gRPC 与 REST 双栈并存、REST 仅面向匿名客户端"为前提,并结合当前仓库的 framework/FASTAPI.md 等文档了解 REST/HTTP 服务形态的现状。

Driver API 改进:SQLite 持久化与内存效率

Driver API 在 v1.4.0 时仍是实验特性,但该版本带来了两项关键升级,直接改善了长时运行 Flower 服务器的资源画像:

  • SQLite 存储服务器状态:服务器状态从纯内存(in-memory)改为落盘到 SQLite 数据库,使状态在进程重启后仍可恢复,同时降低对进程内存的占用;
  • 已投递任务自动删除:已交付的指令(instructions)或结果(results)会被清理,不再长期驻留内存。

这两项改进"大幅提升了长时运行 Flower 服务器的内存效率"(changelog 原话)。从源码结构看,当前框架中 Driver 相关实现位于 framework/py/flwr/supercore 目录(FedXgbNnAvg源码即从flwr.supercore导入日志与弃用告警工具函数),说明 Driver 体系是 Flower 分布式协调层的核心组成部分。

其他值得关注的变更

修复 Ray 溢写(spilling)问题

v1.4.0 之前的版本在运行长时间模拟时,ray有时会将大量数据溢写(spill)到磁盘,导致训练无法继续。该问题在 v1.4.0 中修复。对于用 Flower 的分布式模拟(simulation)能力做大规模模拟训练的用户,这是重要的稳定性改进。

新增 TabNet 联邦学习示例

TabNet 是面向表格数据(tabular data)的模型训练框架,v1.4.0 为其提供了联邦学习示例(changelog 中写作quickstart-tabnet)。当前仓库中该示例对应 examples/federated-analytics(基于 Pandas 的联邦分析场景),表格数据联邦学习方向的参考实现可结合 examples/fl-tabular 查看。

新增"模拟监控"how-to 指南

文档新增了一篇监控模拟训练性能的 how-to 指南,指导用户在模拟过程中观测训练进度与指标。

训练指标写入 History 对象

fit_metrics_aggregation_fn一直用于聚合训练(fit)阶段的指标,但此前版本并未把聚合结果保存进History对象,导致训练侧指标不可回溯。v1.4.0 修复了这一点。History对象的定义位于 framework/py/flwr/server/history.py,并有对应测试 history_test.py 验证各字段的记录行为。这一修复使得评估指标与训练指标都能通过同一History对象统一查看,对绘制完整训练曲线(类似 baselines/flwr_baselines/dev 中的批处理绘图脚本所做的多轮次对比分析)非常有用。

文档:新增"What is Federated Learning?"入门教程

v1.4.0 在官方文档中新增了联邦学习入门教程,面向完全不了解联邦学习的读者,介绍其基本概念并引导他们从 Flower 开始。仓库中对应的概念性内容可参考 glossary/federated-learning.mdx 与 framework/docs/source 下的教程文档。

小结:如何基于 v1.4.0 的路线图使用当前仓库

v1.4.0 是 Flower 能力扩张明显的一个版本,阅读当前仓库源码时建议按以下线索对照:

  1. XGBoost 联邦学习:从 examples/quickstart-xgboost 入手,再读 fedxgb_nn_avg.py 理解"神经网络加权平均 + 树组合"的双通道聚合;注意该策略现已迁移至baselines/hfedxgboost维护;
  2. iOS 开发:查看 framework/swift/flwr/Package.swift 与 examples/ios 工程结构,了解 Swift SDK 如何对接 Flower 服务端;
  3. 算法对比研究:以 baselines/fedprox 的配置矩阵(mu × sf × FedAvg/FedProx)作为复现异构网络论文的起点;
  4. 长时运行与可观测性:Driver API 的 SQLite 持久化、History对象记录训练指标(history.py)与模拟监控指南共同构成大规模模拟的资源管理与观测基础;
  5. 升级兼容性:v1.4.0 无破坏性变更,但 REST API 与 Driver API 均标注为实验特性,基于 v1.4.0 时代代码集成时应关注这两个接口在后续版本中的演进。

如需完整变更细节,可查阅 v1.4.0.md 原文及其列出的全部关联 PR 编号。

【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询