Skip to content

FedGuardLab v1.1.0

Choose a tag to compare

@Calvin1989 Calvin1989 released this 31 May 05:35
· 264 commits to main since this release
e6d1990

FedGuardLab v1.1.0

FedGuardLab v1.1.0 是一次以“实验任务生命周期、后台执行稳定性、Docker readiness 和发布流程标准化”为核心的正式版本更新。

本版本没有重点新增攻击算法或聚合算法,而是将 v1.0.0 的实验平台能力进一步工程化:实验任务现在拥有更清晰的 job lifecycle,训练执行与 WebSocket 连接解耦,前端支持取消实验,Docker Compose 启动更稳定,并补齐了 live API smoke test、changelog 和 release checklist。


主要更新

实验任务生命周期

  • 新增内存版 JobStore。
  • 新增 GET /jobs 查看当前 job 列表。
  • 新增 POST /jobs/{job_id}/cancel 取消实验任务。
  • job 状态支持:
    • created
    • running
    • finished
    • failed
    • cancelled
    • disconnected
  • job 增加时间戳:
    • created_at
    • started_at
    • finished_at
  • job 列表增加 report readiness metadata,前端只展示可用于 comparison 的 finished jobs。

后台任务执行

  • 新增后台 job runner。
  • POST /run 创建 job 后立即启动后台训练。
  • WebSocket 不再负责启动训练。
  • WebSocket /ws/{job_id} 现在只订阅已有 job 的 metrics 和 lifecycle events。
  • 页面刷新或 WebSocket 断开不会停止后端训练。
  • WebSocket 重新连接后会回放已有 metrics。
  • 修复 WebSocket subscribe/replay 之间可能漏事件的竞态窗口。

取消机制

  • JobStore 增加 cancel_requested。
  • POST /jobs/{job_id}/cancel 会设置 cancellation request。
  • 后台 runner 会在训练循环中检查取消状态。
  • 前端支持处理 cancelled event。
  • 前端 Dashboard 新增 Cancel Experiment 按钮。
  • 被取消的 job 不会进入 comparison history,也不会生成报告。

前端体验

  • 前端 comparison history 只展示 report-ready jobs。
  • 用户删除或清理过的 job 会保存在 hidden jobs 本地列表中,刷新页面后不会重新出现。
  • 新完成的实验会自动恢复显示。
  • 支持从后端 /jobs 恢复 recent jobs。
  • 增加取消实验入口。

Docker 与健康检查

  • 新增 GET /health。
  • Docker Compose 为 backend 增加 healthcheck。
  • frontend 会等待 backend 进入 healthy 状态后再启动。
  • healthcheck 使用 Python 标准库 urllib.request,不依赖 curl/wget。
  • 改善 docker compose up -d 后立即访问 API 时的 readiness 问题。

测试与发布流程

  • 新增 api_smoke_test.py live API smoke test。
  • api_smoke_test.py 支持 --wait-finished。
  • 补充 PowerShell 和 Bash 环境变量示例。
  • 新增 CHANGELOG.md。
  • 新增 docs/release-checklist.md。
  • 更新 README 和 docs,覆盖 job lifecycle、background runner、healthcheck 和 release workflow。

验证

本版本已完成以下验证:

ruff check .
python quick_test.py