FedGuardLab 是一个面向联邦学习安全实验的交互式实验平台。
项目目标不是做一个“大而全”的联邦学习 benchmark,而是提供一个轻量、可视化、可复现的实验环境,帮助学生、研究者和开发者更直观地理解联邦学习中的攻击、防御和实验流程。
- Vue + Vite 前端 Dashboard
- FastAPI 后端服务
- WebSocket 实时推送实验指标
- YAML 实验配置
- Pydantic 配置校验
- Simulated trainer 快速演示
- 真实 MNIST + FedAvg 联邦学习训练
- IID / Dirichlet Non-IID 数据划分
- Label Flipping 攻击与 ASR 评估
- Median / Trimmed Mean / Krum 鲁棒聚合防御
- 单实验 HTML / CSV / Markdown 报告
- 多实验对比报告
- Docker Compose 一键启动
- GitHub Actions + Ruff + quick test
git clone https://github.com/Calvin1989/FedGuardLab.git
cd FedGuardLabconda create -n fedguardlab python=3.11 -y
conda activate fedguardlabpython -m pip install -r requirements-cpu.txt其中 requirements-cpu.txt 会安装 CPU 版 PyTorch,适合普通本地开发和 CI 环境。
uvicorn api.main:app --reload后端默认运行在:
http://127.0.0.1:8000
API 文档:
http://127.0.0.1:8000/docs
打开另一个终端:
cd web
npm install
npm run dev默认前端地址:
http://localhost:3000
如果 3000 端口被占用,Vite 会自动切换到 3001、3002 等端口。
确保已经安装 Docker Desktop。
docker compose up --build前端:
http://localhost:3000
后端 API:
http://localhost:8000/docs
停止服务:
docker compose downFedGuardLab 当前支持:
- Simulated Label Flipping Demo
- Real MNIST FedAvg Demo
- Real MNIST FedAvg Label Flip Demo
- Real MNIST Label Flip + Median Defense
- Real MNIST Label Flip + Trimmed Mean Defense
- Real MNIST Label Flip + Krum Defense
详细实验说明见:
单实验输出目录:
reports/jobs/<job_id>/
├── config.json
├── metrics.json
├── metrics.csv
├── report.html
└── report.md
多实验对比输出目录:
reports/comparisons/<comparison_id>/
├── comparison.html
├── comparison.json
└── comparison.csv
这些运行产物默认不会提交到 GitHub。
FedGuardLab exposes lightweight in-memory job lifecycle endpoints:
| Method | Endpoint | Description |
|---|---|---|
GET |
/configs |
List available experiment configs. |
POST |
/run?config_path=... |
Create a new experiment job. |
GET |
/jobs |
List current in-memory jobs. |
GET |
/status/{job_id} |
Get job status and timestamps. |
GET |
/results/{job_id} |
Get job config, metrics, and report paths. |
GET |
/reports/{job_id} |
Open the generated HTML report. |
POST |
/jobs/{job_id}/cancel |
Mark a pending or running job as cancelled. |
Current job storage is in-memory. Restarting the backend clears the job registry, while generated report files under reports/jobs/ remain on disk.
完整接口文档:
http://127.0.0.1:8000/docs
v1.0.0
当前版本支持:
- 交互式实验 Dashboard
- 真实 MNIST FedAvg
- Label Flipping 攻击与 ASR 评估
- Median / Trimmed Mean / Krum 鲁棒聚合
- HTML / CSV / Markdown 报告导出
- 多实验对比报告
- Docker Compose 启动
- GitHub Actions + Ruff + quick test + 前端 build
- 前端实验历史持久化
- 刷新页面后保留已完成实验记录
- 支持清空 Dashboard 历史记录
- Trigger-based Backdoor Attack
- Backdoor ASR 评估
- Backdoor + FedAvg / Median / Trimmed Mean / Krum 对比实验
- Label Flipping 与 Backdoor 两类攻击对比场景
- Dashboard 和实验报告展示优化
- README 项目截图展示
- Dashboard 支持删除选中的历史实验记录
v1.1.0 focus: reliability, config validation, job lifecycle, frontend config discovery
MIT


