Flower v1.12.0 版本解析:SuperExec 日志流、uint64 标识迁移与消息 TTL 机制
2026/9/17 16:35:36 网站建设 项目流程

Flower v1.12.0 版本解析:SuperExec 日志流、uint64 标识迁移与消息 TTL 机制

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

本篇文章基于 Flower(A Friendly Federated AI Framework)仓库中 v1.12.0 变更日志 展开,系统解读该版本引入的核心能力:flwr log远程日志流、Node ID / Run ID 迁移至 uint64、SuperLink 消息 TTL 过期机制、FAB 哈希与安装结构优化、FedRep 基线、Docker 支持增强以及 Python 3.8 支持移除等破坏性变更。读完本文,你将掌握 v1.12.0 的关键使用方式(命令行、配置项)以及其在当前仓库源码中的落地实现位置,便于升级或复现。

一、版本概览:一个承上启下的发布

v1.12.0(2024-10-14)是 Flower 演进中的一个重要里程碑:它在 1.9 版宣布弃用 Python 3.8 之后正式移除支持,将最低版本提升至 Python 3.9(推荐 3.11),同时为后续的 FlowerTune LLM Leaderboard、SuperExec 运行体系铺路。按官方变更日志,该版本由Adam NarozniakCharles BeauvilleDaniel J. Beutel等 15 位贡献者共同完成。

从仓库现状看,v1.12.0 提到的多项能力至今仍在框架中承担核心职责,例如:

  • flwr log命令的实现位于 framework/py/flwr/cli/log.py;
  • 消息 TTL 的超时判断逻辑位于 framework/py/flwr/server/superlink/linkstate/utils.py;
  • FAB 哈希截断常量FAB_HASH_TRUNCATION = 8定义于 framework/py/flwr/common/constant.py。

以下各节逐一拆解。

二、SuperExec 日志流:flwr log实时监控远程运行

2.1 功能定位与用法

v1.12.0 引入了 SuperExec 日志流(log streaming)能力:当 Flower 应用在远端 SuperExec 上执行时,开发者可以通过flwr log命令实时查看日志。官方给出的两种调用形态:

# 仅指定 run-id,使用默认连接 flwr log <run-id> # 显式指定 app 目录与 federation(联邦配置) flwr log <run-id> <app-dir> <federation>

2.2 源码级实现证据

当前仓库中flwr log的实现位于 framework/py/flwr/cli/log.py,其核心流程如下:

  • 命令入口log()接收run_id(必选参数)以及可选的--stream/--show开关,其中--stream为默认行为(实时流式输出),--show则一次性打印已有日志;
  • 底层通过 Control API 客户端ControlHttpClient发起StreamLogsRequest(run_id=..., after_timestamp=...)(见stream_logs()),并将服务端返回的log_output逐行打印;
  • start_stream()内部以after_timestamp游标推进,从指定时间点之后继续拉取日志,配合KeyboardInterrupt优雅退出,实现"实时跟随"效果;
  • 连接参数通过read_superlink_connection()读取,并支持--federation-config覆盖(该选项当前被标记为隐藏并提示忽略)。

2.3 关联基础设施:SuperExec

日志流的另一端是 SuperExec 组件。当前仓库在 framework/docker/superexec/Dockerfile 中提供其容器镜像,分布式部署示例可见 framework/docker/distributed/server/compose.yml:其中superexec-serverapp服务以--runtime-api-address superlink:8000挂接 SuperLink,从而把运行中产生的日志回传给控制平面供flwr log拉取。可以推断,日志流链路为:SuperExec 运行应用 → 日志写入 SuperLink 控制平面 →flwr log通过 Control API 增量拉取。

三、标识符迁移:Node ID 与 Run ID 全面升级为 uint64

3.1 变更内容

v1.12.0 将 Node ID、Run ID 等字段从有符号 64 位整数(sint64)迁移为无符号 64 位整数(uint64),并在所有通信链路上完整支持uint64。对 Python 用户而言,这意味着:

  • 你可以在 config 与 metric 字典中使用大于sint64最大值、小于uint64最大值的int值;
  • 消息元数据(Message Metadata)中的run_idnode_idsrc_node_iddst_node_id等均以uint64承载。

3.2 仓库中的落地证据

在协议定义层面,framework/proto/flwr/proto/message.proto 中Metadata消息的run_id(字段 1)、src_node_id(字段 3)、dst_node_id(字段 4)均为uint64;framework/proto/flwr/proto/transport.proto 中Scalaruint64类型(字段 6)用于在配置与指标字典中传递无符号整数。在运行/控制层面,framework/proto/flwr/proto/control.proto 中的run_idautomation_idseries_id等字段同样全面采用uint64

在状态层,framework/py/flwr/server/superlink/linkstate/utils.py 提供了int64_to_uint64及配套的字典值转换函数(见convert_int64_to_uint64),用于数据字典中部分键值的有符号/无符号互转,正是这次标识符迁移在持久化与内存状态层的兼容性适配。

四、消息 TTL:SuperLink 消息自动过期与清理

4.1 设计思路

v1.12.0 为 SuperLink 中的消息实现了完整的 Time-to-Live(TTL)支持:每条消息携带ttl字段(单位秒)与created_at时间戳,SuperLink 在消息存取时判断是否过期,过期消息自动清理。该机制可通过底层 API 配置,高层 API 默认启用。

4.2 源码细节

  • 元数据定义Metadata消息在 framework/proto/flwr/proto/message.proto 中通过字段 7(double ttl)承载 TTL 值;
  • 默认值:高层 API 的默认 TTL 定义在 framework/py/flwr/app/constants.py,即DEFAULT_TTL = 43200(12 小时);在 framework/py/flwr/app/message/message.py 创建 Message 时以ttl or DEFAULT_TTL生效;
  • 过期判定:framework/py/flwr/server/superlink/linkstate/utils.py 中message_ttl_has_expired()的判定条件为ttl + created_at < current_time,即"创建时间 + 存活时长"小于当前时间则视为过期;
  • 内存状态层:framework/py/flwr/server/superlink/linkstate/in_memory_linkstate.py 在消息检索时按created_at + ttl计算available_until,并对回复消息的 TTL 施加约束:回复 TTL 不得超过ins_metadata.created_at + ins_metadata.ttl - res_metadata.created_at(超出即拒绝,附容差MESSAGE_TTL_TOLERANCE),从而保证"回复不晚于原消息失效"的一致性;
  • 错误语义:当查询的消息已过期或不可用时,SuperLink 返回携带ErrorCode.MESSAGE_UNAVAILABLE/REPLY_MESSAGE_UNAVAILABLE的错误消息(见create_message_error_unavailable_ins_message()create_message_error_unavailable_res_message()),其中错误回复的 TTL 会按剩余存活时间重新计算(ttl = max(ins_metadata.ttl - (current_time - ins_metadata.created_at), 0))。

从源码结构看,TTL 机制的核心价值在于:避免因节点掉线、消息积压导致的状态无限膨胀,为 SuperLink 的长时间运行提供内存/数据库层面的自动回收能力。

五、FAB 处理优化:文件名哈希与扁平化安装

5.1 变更内容

v1.12.0 对 Flower App Bundle(FAB)做了两项优化:

  1. FAB 文件名追加 8 字符哈希;
  2. flwr install安装后的目录结构从 3 层扁平化为 1 层。

5.2 仓库中的实现

  • 哈希截断长度常量FAB_HASH_TRUNCATION = 8定义于 framework/py/flwr/common/constant.py(同时APP_DIR = "apps"定义了应用安装根目录);
  • 构建侧,framework/py/flwr/cli/build.py 计算 FAB 的 SHA-256 哈希并截取前 8 字符附加到文件名;
  • 安装侧,framework/py/flwr/cli/install.py 对 FAB 内容做哈希校验(_verify_hashes()),并将应用安装到形如apps/<publisher>.<project_name>.<version>.<8位哈希>的目录(见install()中的路径拼接逻辑),同时在解析时校验传入的短哈希与真实哈希一致(len(fab_shorthash) != FAB_HASH_TRUNCATION直接拒绝)。

可以推断,追加哈希的动机是消除同名不同内容 FAB 的冲突,保证同一发布者、项目名、版本组合下不同内容的 FAB 可共存;扁平化安装则缩短路径深度、简化后续flwr run对应用目录的解析。

六、新基线:FedRep 个性化联邦学习

v1.12.0 引入了 FedRep 基线。FedRep(论文 "Exploiting Shared Representations for Personalized Federated Learning")的核心思想是:各客户端共享一个全局学习的特征表示(representation/body),同时在本地维护个性化分类头(head),在协作与个体适配之间取得平衡。

该基线在仓库中的实现位于 baselines/fedrep,关键文件与机制如下:

  • client_app.py:BaseClient实现标准 FedAvg 客户端;FedRepClient覆写get_parameters()只返回_body参数,set_parameters()在训练阶段只更新 body 与尚未训练的 head,本地仅保留个性化 head 状态;client_fn()通过context.run_config["algorithm"](取值fedrepfedavg)选择算法,并将个性化 head 保存在context.state.parameters_records[FEDREP_HEAD_STATE]
  • constants.py:定义默认超参DEFAULT_LOCAL_TRAIN_EPOCHS = 10DEFAULT_FINETUNE_EPOCHS = 5DEFAULT_REPRESENTATION_EPOCHS = 1,以及 CIFAR-10/CIFAR-100 的归一化均值与标准差;
  • strategy.py:服务端FedRep策略继承自FedAvg
  • 配置文件位于 baselines/fedrep/conf,例如 cifar10_5.toml 展示了实验配置结构(algorithmdataset-namedataset-splitdataset-split-num-classesdataset-split-seeddataset-split-fraction等)。

七、FlowerTune 模板与 LLM 评估管线优化

该版本对 FlowerTune 模板与 LLM 评估管线进行了系统打磨(涉及 16 个 PR),为即将上线的 FlowerTune LLM Leaderboard 做准备,覆盖 Finance、Medical、通用 NLP 等多个领域,并细化了评估指标与文档。

仓库中可参考的 FlowerTune 示例包括:

  • examples/flowertune-llm:基于 OpenLLaMA + Alpaca-GPT4 的联邦指令微调,集成 Flower Datasets 下载/切分、PEFT 微调与 Flower 仿真引擎(可在单 GPU 上完成仿真训练);
  • examples/flowertune-llm-code、examples/flowertune-llm-finance、examples/flowertune-llm-general-nlp、examples/flowertune-llm-medical:对应代码、金融、通用 NLP、医疗等垂直领域的联邦 LLM 微调应用;
  • 仓库还提供 benchmarks/flowertune-llm 基准目录,包含评估脚本与结果整理逻辑。

这些示例可作为接入后续 FlowerTune Leaderboard 的起点。

八、Docker 支持增强与文档更新

v1.12.0 在容器化方面做了系统性升级:

  • Ubuntu 基础镜像升级至 24.04;
  • Docker 镜像新增 SBOM(软件物料清单)与 gcc;
  • 补充了包含快速上手指南与分布式 Docker Compose 部署在内的完整 Docker 文档。

当前仓库的 Docker 资产包括:

  • 基础镜像:framework/docker/base(alpine / ubuntu / ubuntu-cuda 三个变体);
  • Python 运行时镜像:framework/docker/python/ubuntu;
  • 各组件镜像:framework/docker/superlink、framework/docker/supernode、framework/docker/superexec;
  • 完整编排示例:framework/docker/complete(compose.ymlwith-state.ymlwith-tls.ymlcerts.yml);
  • 分布式部署示例:framework/docker/distributed(client 与 server 两个 compose 文件,配合证书生成)。

以 framework/docker/distributed/server/compose.yml 为例,部署一个分布式服务端需要同时拉起superlink(监听 9092/8000 端口、挂载state/state.dbSQLite 数据库、启用 TLS 证书)与superexec-serverapp(基于flwr/superexec镜像构建,注入应用代码并以--plugin-type serverapp运行),二者通过superlink:8000通信。

九、其他更新与破坏性变更清单

9.1 常规更新

  • flwr new模板改进:MLX、NumPy、sklearn、JAX、PyTorch 模板统一了可用性与跨框架一致性;
  • 文档更新:PyTorch Lightning、TensorFlow、Hugging Face、Fastai 等快速上手教程全部迁移到新的flwr run命令,FAQ 新增区块链示例;
  • 示例项目刷新:垂直联邦学习、高级 PyTorch、Pandas、Secure Aggregation、XGBoost 等示例被更新;Hugging Face 快速上手换用更小的语言模型,并移除遗留的仿真示例;
  • Flower 术语表(glossary):新增 glossary 目录,为关键联邦学习概念提供清晰定义(如 aggregation、client、server、federated-learning、heterogeneity-in-federated-learning 等),并欢迎社区贡献扩充;
  • Flower 架构讲解页:新增逐步介绍各 Flower 组件的架构 explainer 文档(收录在框架文档的 EXPLANATIONS 章节,源文件位于 framework/docs/source);
  • 翻译更新:多个语言文件随版本同步更新。

9.2 破坏性变更(升级必读)

移除 Python 3.8 支持,最低版本提升至 Python 3.9。Python 3.8 自 1.9 起被弃用,本版本正式移除;当前支持范围覆盖 Python 3.9 至 3.12(推荐 3.11)。CI 与文档均以 Python 3.9 为最低支持版本。升级到 v1.12.0 及之后的版本时,请确保运行环境满足该要求。

十、升级与验证建议

  1. 环境检查:确认 Python 版本 ≥ 3.9(推荐 3.11),可通过python --version验证;
  2. 日志监控:升级后使用flwr log <run-id>验证 SuperExec 日志流是否按预期工作,flwr log <run-id> --show可只打印已有日志;
  3. uint64 兼容性:若在 config / metric 中传递大整数,注意其取值范围应在[0, 2^64-1]内;协议层已全面支持uint64
  4. TTL 行为:高层 API 默认 TTL 为 12 小时(DEFAULT_TTL = 43200),若你的训练轮次耗时较长或客户端响应缓慢,可通过底层 API 调整 TTL,避免消息提前过期;
  5. FAB 安装:重新构建并flwr install应用,确认新安装目录为apps/<publisher>.<project>.<version>.<8位hash>扁平结构;
  6. 文档与示例:参照 framework/docs/source/changelog/index.md 中的完整变更索引,以及更新后的快速上手示例(如 examples/quickstart-pytorch)验证新命令流程。

结语

Flower v1.12.0 是一次面向运行体验与协议基础的双重升级:flwr log让远程运行可观测,uint64 迁移与消息 TTL 让底层协议更稳健,FAB 哈希与扁平化安装让应用分发更可靠,而 Python 3.8 的移除则为后续演进扫清了兼容负担。理解这些变更,不仅有助于平滑升级,也能更深入地把握 Flower 当前架构(SuperLink / SuperExec / SuperNode + Control API)的设计脉络。

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

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

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

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

立即咨询