Skip to content

Calvin1989/FedGuardLab

Repository files navigation

FedGuardLab

Quick Test

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

Screenshots

Dashboard

Dashboard

Experiment Report

Experiment Report

Comparison Report

Comparison Report


快速开始

1. 克隆项目

git clone https://github.com/Calvin1989/FedGuardLab.git
cd FedGuardLab

2. 创建并激活 Python 环境

conda create -n fedguardlab python=3.11 -y
conda activate fedguardlab

3. 安装后端依赖

python -m pip install -r requirements-cpu.txt

其中 requirements-cpu.txt 会安装 CPU 版 PyTorch,适合普通本地开发和 CI 环境。

4. 启动后端

uvicorn api.main:app --reload

后端默认运行在:

http://127.0.0.1:8000

API 文档:

http://127.0.0.1:8000/docs

5. 启动前端

打开另一个终端:

cd web
npm install
npm run dev

默认前端地址:

http://localhost:3000

如果 3000 端口被占用,Vite 会自动切换到 3001、3002 等端口。


Docker 启动

确保已经安装 Docker Desktop。

docker compose up --build

前端:

http://localhost:3000

后端 API:

http://localhost:8000/docs

停止服务:

docker compose down

当前支持能力

FedGuardLab 当前支持:

  • 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。


项目文档


API 接口

Job lifecycle API

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


License

MIT

About

一个交互式联邦学习安全实验平台

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors