flower
友好的开源联邦学习框架,支持多框架多语言,可在不共享原始数据的前提下实现跨机构 AI 协作训练
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
友好的开源联邦学习框架,支持多框架多语言,可在不共享原始数据的前提下实现跨机构 AI 协作训练
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:Flower 官方 Logo(Flower Intelligence)
想象一下这样的场景:各家医院想合作训练一个更准确的疾病预测模型,但患者病历属于高度隐私数据,既不能直接共享,也不可能把数据汇聚到一台服务器上——这时,联邦学习(Federated Learning)登场了。Flower 就是这个领域的标杆框架,由牛津大学研究团队孵化,如今已成为全球最具影响力的联邦学习开源项目之一。
传统的机器学习需要把所有数据集中在一处训练,这种方式在医疗、金融、终端设备等场景面临严峻的隐私合规挑战。欧盟 GDPR、中国《个人信息保护法》等法规对数据跨境流动有着严格限制。与此同时,智能手机、汽车、智能摄像头等终端设备上沉淀了大量有价值的训练数据,却因为隐私原因无法离开本地。
2016 年,谷歌在论文《Communication-Efficient Learning of Deep Networks from Decentralized Data》中首次提出联邦学习概念,其核心思想是:模型可以流动,数据无需离开原地。各参与方在本地基于自己的数据训练模型,然后将模型参数(而非原始数据)上传到中央服务器,服务器聚合后再将更新后的模型参数下发。周而复始,最终各方都受益于一个经过「集体智慧」提升的共享模型,同时原始数据始终留在本地。
Flower 正是在这一背景下诞生,其设计目标是将联邦学习从学术论文带入真实生产环境,让任何规模的企业和研究团队都能用起来。
Flower 的架构经过多次迭代,最新版本(1.30+)引入了三个核心组件,构成完整的分布式联邦学习运行时:
SuperLink(超级链接):扮演中央协调者角色,负责管理所有参与节点的连接状态、协调训练轮次(rounds)、执行联邦策略(如 FedAvg)的聚合逻辑。SuperLink 本身是一个无状态服务,通过 gRPC 与各节点通信,支持 TLS 加密和进程级隔离,可水平扩展以支持大规模联邦网络。
SuperNode(超级节点):部署在各参与方(医院、工厂、手机等)的客户端代理。每个 SuperNode 负责运行 ClientApp(即用户编写的联邦客户端代码),与 SuperLink 保持长连接,定期接收新的模型参数、在本地数据上执行训练或推理、返回更新后的参数。SuperNode 支持进程级隔离,确保不同租户的代码不会相互干扰。
SuperExec(超级执行器):负责动态加载和执行 ServerApp(联邦服务器端逻辑)和 ClientApp 的组件。通过 Docker 镜像方式交付,内置 Flower 运行时环境,支持 Alpine 和 Ubuntu 双基础镜像,覆盖 amd64/arm64v8 架构,真正实现「一次编写,到处运行」。
这三者的关系可以这样理解:SuperLink 是裁判,SuperNode 是运动员,SuperExec 是教练兼陪练——裁判宣布轮次,运动员在本地训练,教练负责把训练计划(ServerApp/ClientApp)送到运动员手中并监督执行。
Flower 最引以为傲的特性之一是框架无关性(Framework-Agnostic)。它不绑定任何特定的 ML 框架,用户可以用 PyTorch、TensorFlow、Hugging Face Transformers、scikit-learn、JAX、PyTorch Lightning、fastai、MLX(Apple Silicon)、XGBoost、CatBoost、MONAI(医疗影像)等任何主流框架编写联邦客户端逻辑,甚至可以直接用 NumPy 手写梯度计算。
这种设计意味着:已有的单节点 ML 代码迁移到 Flower 联邦学习环境,改动极小。用户只需定义 get_parameters() 和 fit() 两个方法,Flower 就会自动处理参数序列化、传输和聚合,极大降低了从传统集中式训练迁移到联邦学习的门槛。
Flower 的野心不止于 Python 生态。框架核心实现包括:
这种多语言策略使得 Flower 能够真正覆盖从云端服务器到边缘终端的全场景,医疗设备上的 Android 应用、工厂里的嵌入式 Linux 设备、iPhone 上的智能应用——都可以成为联邦学习的参与节点。
Flower 内置了多种联邦学习聚合策略,涵盖不同数据分布场景:FedAvg(标准平均)、FedBN(应对非独立同分布数据)、FedProx(处理系统异构性)、FedAvgM(动量加速)、FedMeta(元学习)、DepthFL(深度联邦)、Disha(差分隐私)等。
baselines 目录提供了这些策略在真实数据集上的基准测试实现,包括医学影像(CIFAR-10/100)、自然语言处理(Shakespeare)、表格数据等,researchers 可以直接在此基础上开展新策略的对比实验。
benchmarks/flowertune-llm 目录则专门针对 LLM 的联邦微调场景,支持在多个数据孤岛上对大语言模型进行参数高效微调(PEFT/LoRA),这对于企业在不共享训练数据的前提下协作优化垂直领域大模型具有重要意义。
Flower 提供了完整的 Docker 部署方案,官方镜像发布在 Docker Hub(flwr/superlink、flwr/supernode、flwr/superexec),配合 framework/docker/complete/compose.yml 可一键启动包含 SuperLink + SuperNode + SuperExec 的完整分布式环境。
compose.yml 定义了 6 个服务:1 个 SuperLink、2 个 SuperNode、2 个 SuperExec(分别驱动两个节点)和 1 个 superexec-serverapp,通过环境变量 FLWR_VERSION 指定版本。所有镜像均为多架构镜像,同时支持 amd64 和 arm64v8,覆盖从 x86 服务器到 Apple Silicon Mac 的各类硬件。
硬件需求方面,如果仅做模拟模式(Simulation Mode,在单进程中用 Ray 模拟多个客户端),CPU 机器即可运行,显存 2GB 就够;但在真实分布式场景下进行模型训练,则建议配备 NVIDIA GPU(训练场景 4GB+ VRAM),以获得可接受的训练速度。
尽管 Flower 在工程层面已经相当成熟,但联邦学习本身仍面临一些根本性挑战,用户在选型时需要有所预期:
通信效率:模型参数传输量随模型规模线性增长。普通 CNN 还好,但如果要联邦训练 GPT-2 以上规模的模型,单轮通信开销就会成为显著瓶颈。Flower 通过梯度压缩等技术尝试缓解,但尚不能彻底解决。
数据异构性:各医院或设备上的数据天然分布不均(Non-IID),某些节点的样本量可能远小于其他节点,导致聚合效果不稳定。Flower 提供了 FedProx、FedNova 等应对策略,但实际效果仍需针对具体数据分布调优。
隐私保障有限:Flower 本身不提供差分隐私或安全多方计算(MPC)功能,传输的是模型参数而非原始数据,这在大多数场景下已足够安全,但如果参与方之间存在恶意节点,仍可能通过参数反推原始数据(模型 inversion 攻击)。对于高敏感场景,需要额外引入 DP-SGD 等隐私增强技术。
同步开销:Flower 的默认模式是同步联邦学习(必须等所有节点完成当前轮次才开始下一轮),少数慢节点会拖累整体进度。虽然 Flower 支持异步聚合策略,但生产级异步方案仍不够成熟。
Flower 项目的增长轨迹值得关注:Star 数从 0 增长到 6900+,fork 数接近 1200,官方文档覆盖 4 种语言(英、中、日、西),Slack 社区活跃。Google、Microsoft、NVIDIA、Nokia 等大厂均在其生产环境中使用 Flower 或为之贡献代码。
在大模型时代,联邦学习有了新的意义:训练万亿参数级别的模型需要海量数据,而数据往往分布在不同机构。Flower 的 Flowertune-LLM 方案(支持 LoRA/Dora 等参数高效微调方法)正是对这一需求的直接响应——各机构在本地用私有数据微调大模型的低秩适配层,聚合后获得一个兼具多方数据知识但又不泄露原始数据的垂直领域模型。
可以说,Flower 已从最初的学术工具演化为企业级联邦学习基础设施,其设计理念(框架无关、多语言支持、容器化部署)与现代云原生生态的无缝衔接,使其成为隐私计算领域最值得关注的开源项目之一。
图2:Flower 官方组织头像(来源:GitHub)