十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Flower v1.29.0 版本解析:SuperExec 运行时依赖安装、HMAC 认证与 LinkState 存储迁移

Flower v1.29.0 版本解析:SuperExec 运行时依赖安装、HMAC 认证与 LinkState 存储迁移 Flower v1.29.0 版本解析SuperExec 运行时依赖安装、HMAC 认证与 LinkState 存储迁移【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flowerFlowerFlower: A Friendly Federated AI Framework在 v1.29.02026-04-12中围绕其多进程运行时体系做了一次系统性升级SuperExec 支持通过uv在运行时为每个应用安装独立依赖环境联邦Federation获得了运行查看/日志流/停止等管理能力SuperExec 引入了基于共享密钥 HMAC 的实验性认证同时移除了 Flower File StorageFFS并将状态存储统一到LinkState/NodeState。读完本文你能掌握这些新特性的实际启用方式、底层实现机制与源码位置并了解从旧版本升级时需要处理的不兼容变更。版本概览本版本官方变更日志见 v1.29.0 changelog主要条目包括类别变更影响面新功能SuperExec 运行时依赖安装--allow-runtime-dependency-installation依赖隔离、多应用共存新功能联邦运行管理查看运行详情、流式日志、停止运行联邦名称创建时校验归档后隐藏 SuperNode 状态列SuperGrid/联邦运维新功能实验性SuperExec 认证共享密钥 HMAC、nonce 重放防护、拦截器基础集成到 ServerAppIo 与 ClientAppIo安全性易用性flwr run、flwr new、flwr app review展示 Flower Hub 返回的兼容性note字段CLI 透明度安全性flwr-serverapp、flwr-simulation、flwr-clientapp的 RPC 调用改用 token 机制认证进程间安全示例更新各示例 README 改用本地 SuperLinkpyproject.toml 增加 FAB 元数据fab-format-version 1、flwr-version-target应用版本按 minor 升级示例与已发布 App修复/易用性flwr list的 JSON 输出显示完整 FAB hash此前被截断脚本化集成不兼容变更移除 Flower File StorageFFS迁移到LinkState基础存储flower-superlink移除--storage-dir选项升级迁移运行时依赖安装让不同依赖的应用独立运行这是本版本的核心特性。Flower App 在pyproject.toml中声明依赖Flower 可以在执行应用前用uv自动安装这些依赖。官方使用文档为 Install Flower App dependencies at runtime其中给出了关键行为约定默认值不对称SuperLink 默认启用自动依赖安装SuperNode 默认不启用。在 SuperLink 上可通过--disable-runtime-dependency-installation或环境变量FLWR_DISABLE_RUNTIME_DEPENDENCY_INSTALLATION1关闭在 SuperNode 上通过--allow-runtime-dependency-installation显式开启。process 隔离模式下的传递规则当以--isolationprocess运行 SuperLink/SuperNode 时依赖安装标志不会作用于应用进程本身而需要加在独立启动的flower-superexec上。文档中给出的两条典型命令如下# SuperNode 侧启用连接本地 SuperLink 用于原型验证 $ flower-supernode \ --superlink 127.0.0.1:9092 \ --insecure \ --allow-runtime-dependency-installation # process 隔离模式下启用 SuperExec 自身的依赖安装 $ flower-superexec \ --runtime-api-address runtime-api-address \ --plugin-type choice-of-plugin \ --allow-runtime-dependency-installation参数定义与默认值命令行参数的统一注册逻辑在 add_args_runtime_dependency_install 中--allow-runtime-dependency-installation以store_true方式写入runtime_dependency_install字段对 SuperLink还会额外注册一个互斥组内的--disable-runtime-dependency-installation开关。flower_superlink.py 中还保留了兼容逻辑旧版传入--allow-runtime-dependency-installation时会打印弃用警告提示该行为已成为 SuperLink 默认能力并指向--disable-runtime-dependency-installation。默认值由_runtime_dependency_install_default()计算只有环境变量FLWR_DISABLE_RUNTIME_DEPENDENCY_INSTALLATION1时才返回关闭。每次运行独立的 venv变更日志强调“每次运行自动创建独立 venv即使运行是并发的也不会互相干扰”。源码印证了这一机制核心实现在 dependency_installer.py读取依赖_get_project_dependencies从应用目录的pyproject.toml读取[project].dependencies排除 flwr 自身_exclude_flwr_dependencies按 PEP 508 规则解析包名并剔除flwr避免用应用的要求覆盖正在运行的 Flower 安装源码中会打印 WARNING 日志说明跳过原因创建隔离环境_create_runtime_env_dir在$FLWR_HOME/runtime-envs下按运行生成目录名——有run_id时直接用运行 ID否则由项目路径 SHA256 前缀 launch 标识哈希前缀 随机 nonce 组成保证并发运行互不冲突调用 uv sync命令形如python -m uv sync --python 当前解释器 --no-install-project --no-install-package flwr --inexact并通过环境变量UV_PROJECT_ENVIRONMENT指定隔离环境路径支持通过 EE 解析器注入--index-url当前开源版本中该解析器返回 None见 dependency_installer.py 中_resolve_index_url_from_ee的注释说明激活环境_activate_runtime_env将新环境的site-packages插入sys.path头部把bin/Scripts目录前置到PATH并设置VIRTUAL_ENV退出清理_register_runtime_env_cleanup通过add_exit_handler注册退出钩子cleanup_app_runtime_environment在应用执行完成后删除环境目录。单元测试 dependency_installer_test.py 验证了上述行为包括并发两次安装落到同一runtime-envs/run_id目录、index 解析器错误会向上传播、清理函数确实删除目录等。需要留意的适用前提当前环境必须可用uv_ensure_uv_available会以python -m uv --version探测缺失时抛出带安装提示的RuntimeError主机需要能访问包索引。若主机无包索引访问权限或需要严格控制可安装包文档建议改为在 SuperNode 环境中预装依赖并关闭运行时安装。标志如何传播到应用进程在 subprocess 隔离模式下SuperLink 自动启动的 SuperExec 会携带该标志flower_superlink.py 中runtime_dependency_install为真时向 SuperExec 命令追加--allow-runtime-dependency-installation注释说明“SuperLink 子进程隔离拥有该 SuperExec因此安装依赖”。SuperNode 侧对应逻辑在 start_client_internal.py。SuperExec 再将该标志透传给实际执行应用子进程的命令行相关渲染逻辑与测试可见于subprocess_executor.py 与 subprocess_executor_test.py 中的 test_launch_renders_runtime_dependency_install_flagkubernetes_executor.pyKubernetes 模式会把该参数写进 TaskExecutor 容器的 argsbase_ephemeral_exec_plugin.py临时执行插件在拉起应用进程时同样透传。联邦运行管理与 SuperExec HMAC 认证联邦运行管理本版本让联邦成员可以直接在联邦内部检查运行详情、流式读取日志并停止运行同时在创建联邦时对联邦名称进行校验归档archived联邦会隐藏 SuperNode 状态列。这些能力由 SuperLink 的FederationManager承载抽象基类 linkstate.py 暴露了federation_manager属性及消息存取等接口联邦相关持久化模型如带owner_aid、status、online_until索引的Node表位于 linkstate_models.py。SuperExec 认证实验性本版本引入基于共享密钥 HMAC 的 SuperExec 认证机制包含核心原语、nonce 重放防护和拦截器基础并集成进 ServerAppIo 与 ClientAppIo。从 superexec.py 的实现可以看到其设计要点规范化签名输入canonicalize_superexec_auth_input将method、timestamp、nonce、body_sha256四个字段序列化为规范字节串作为 HMAC 输入确定性的请求体摘要compute_request_body_sha256对 protobuf 请求体做SerializeToString(deterministicTrue)后取 SHA256保证两端计算一致密钥派生derive_auth_secret用 master secret 加固定上下文SUPEREXEC_AUTH_SECRET_CONTEXT通过 HMAC-SHA256 派生出 auth 作用域密钥重放防护定义_NonceStore协议reserve_nonce(namespace, nonce, expires_at)原子性地预留 nonce 直至过期时间戳合法性由MAX_TIMESTAMP_DIFF_SECONDS/MIN_TIMESTAMP_DIFF_SECONDS常量约束传输载体签名、时间戳、nonce、body 摘要分别通过SUPEREXEC_AUTH_SIGNATURE_HEADER等 HTTP 头传递拦截器实现在 interceptors/http/superexec_auth.py密钥管理辅助类在 superexec_secret.py。flwr-* 进程的 token 认证增强另一条安全性改进是flwr-serverapp、flwr-simulation、flwr-clientapp发起的 RPC 调用改用 token 机制认证。从测试代码可看到 token 已成为应用进程 CLI 的必填项例如 flwr_serverapp_test.py 中--token与--allow-runtime-dependency-installation、--parent-pid一同传入common/args_test.py 亦验证了“App 进程 CLI 必须携带 token”。父进程 PID 参数--parent-pid则用于应用进程感知其宿主防止宿主退出后残留。CLI 透明度与示例工程化Flower Hub 兼容性提示当flwr run、flwr new、flwr app review的下载解析到“旧版但兼容”的版本而非最新版时CLI 会读取 Flower Hub 返回的note字段并展示让用户知道版本选择的实际原因完整 FAB hashflwr list的 JSON 输出中原来被截断的 FAB hash 现显示完整值便于脚本做精确比对FAB 元数据落地到示例各示例的pyproject.toml增加fab-format-version 1与flwr-version-target字段例如 examples/custom-mods/pyproject.toml、examples/federated-vae/pyproject.toml示例 README 统一改用本地 SuperLink 演示并补充 LICENSE、应用版本按 minor 升级。不兼容变更移除 Flower File StorageFFS这是升级时必须处理的破坏性变更FFS 被移除状态存储迁移到基于LinkState的机制LinkState与NodeState引入了替代方法flower-superlink的--storage-dir选项被删除。从当前源码看LinkStatelinkstate.py提供store_message_ins、federation_manager等抽象接口并由 linkstate_factory.py 结合 SQLite 数据库文件支持:memory:与ObjectStoreFactory创建具体实例NodeStatenodestate.py提供store_message、set_node_id等抽象接口nodestate_factory.py 用InMemoryNodeState ObjectStore 构建实例在 SuperLink CLI 源码中已搜索不到storage-dir相关参数印证了该选项的移除。升级建议如果你此前依赖 FFS 或--storage-dir配置 SuperLink需要迁移到默认的 LinkState/NodeState 存储路径管理方式并核对启动参数中是否有已失效的--storage-dir。小结v1.29.0 的主线是“运行时更安全、更隔离、更可控”运行时依赖安装让不同依赖的 Flower App 在同一主机上互不污染HMAC 认证与 token 机制收紧了进程间通信的信任边界FFS 移除则简化了存储模型统一收敛到LinkState/NodeState。对于使用 SuperLink/SuperNode/SuperExec 的部署方升级时优先检查三项--storage-dir相关配置是否需要清理、依赖安装默认行为SuperLink 默认开、SuperNode 默认关是否符合预期、以及 SuperExec 认证是否纳入你的安全方案。变更细节可继续对照 v1.29.0 changelog 与上文列出的源码路径逐项核实。【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表