Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
505 changes: 505 additions & 0 deletions doc_fedavg/27_[2026-04-11]_N50_FedAvg_无攻击基线实验设计.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,261 @@
---
created: 2026-04-12T10:30+08:00
updated: 2026-04-12T22:30+08:00
author: GitHub Copilot
source_pr: 2263
source_branch: YKDZ/FedML:exp/n50-fedavg-baseline-20260411
source_spec: doc_fedavg/27_[2026-04-11]_N50_FedAvg_无攻击基线实验设计.md
status: archived-report
---

# N=50 FedAvg — 实验结果与验收归档说明

> 对应规格:`doc_fedavg/27_[2026-04-11]_N50_FedAvg_无攻击基线实验设计.md`
>
> 原始结果归档:`doc_fedavg/n50_results/README.md`

- **实验编号**:BL-N50-v2.1
- **执行日期**:2026-04-10 23:55 — 2026-04-11 05:20(总耗时约 5.4 小时)
- **设计文档**:`doc_fedavg/27_[2026-04-11]_N50_FedAvg_无攻击基线实验设计.md`
- **执行脚本**:`python/examples/federate/prebuilt_jobs/shieldfl/scripts/batch_baseline_n50.sh`
- **原始结果归档**:`doc_fedavg/n50_results/`
- **硬件环境**:4×RTX 4090(GPU 0 占用,实验使用 GPU 1/2/3)
- **代码版本**:`dae6571095d0` (master)

---

## §1 执行概况

30/30 组实验全部完成,无崩溃、无 OOM、无 RuntimeError。

| 阶段 | 数据集 | 实验数 | GPU 配置 | 单组耗时 | 总耗时 |
|:-----|:------|:------:|:---------|:---------|:-------|
| Phase 1 | CIFAR-10 (ResNet-18) | 15 | 3×4090 (13,19,19) | 16.0–17.8 min | ~4.2 h |
| Phase 2 | MNIST (LeNet-5) | 15 | 2×4090 (26,25) | 4.3–5.3 min | ~1.2 h |
| **合计** | | **30** | | | **~5.4 h** |

---

## §2 原始结果

### CIFAR-10 + ResNet-18 (N=50, T=100, E=1, lr=0.01, wd=1e-4)

| α | seed=0 | seed=1 | seed=2 | seed=3 | seed=4 | mean ± std | AC-1 区间 | 判定 |
|:--|:-------|:-------|:-------|:-------|:-------|:-----------|:----------|:-----|
| 0.1 | 66.72% | 44.13% | 49.57% | 60.33% | 56.60% | 55.47% ± 7.94% | [35%, 65%] | **PASS** |
| 0.5 | 73.31% | 72.76% | 73.37% | 73.39% | 72.63% | 73.09% ± 0.33% | [65%, 80%] | **PASS** |
| 100 | 74.38% | 74.40% | 74.91% | 74.03% | 74.63% | 74.47% ± 0.29% | [73%, 85%] | **PASS** |

### MNIST + LeNet-5 (N=50, T=100, E=1, lr=0.01, wd=0)

| α | seed=0 | seed=1 | seed=2 | seed=3 | seed=4 | mean ± std | AC-1 区间 | 判定 |
|:--|:-------|:-------|:-------|:-------|:-------|:-----------|:----------|:-----|
| 0.1 | 97.77% | 98.10% | 97.88% | 97.91% | 98.08% | 97.95% ± 0.13% | [90%, 98.5%] | **PASS** |
| 0.5 | 97.96% | 98.35% | 97.58% | 98.12% | 98.24% | 98.05% ± 0.27% | [94%, 99.5%] | **PASS** |
| 100 | 98.18% | 98.01% | 97.80% | 97.96% | 98.10% | 98.01% ± 0.13% | [96%, 99.5%] | **PASS** |

---

## §3 AC 逐条判定

### AC-0:工程健康度

| AC | 条件 | 结果 | 判定 |
|:---|:-----|:-----|:-----|
| AC-0-1 | 无崩溃 | 30/30 全部正常完成 | **PASS** |
| AC-0-2 | 日志完整 | 30 组均产出 100 行 JSONL,含 `test_acc`、`test_loss` | **PASS** |
| AC-0-3 | 种子确定性 | C6 结果 73.31% vs 锚点 73.31%,偏差 = 0.00pp < 0.5pp | **PASS** |

### AC-1:精度范围

| 条件 | mean | 验收区间 | 判定 |
|:-----|:-----|:---------|:-----|
| CIFAR-10 α=0.1 | 55.47% | [35%, 65%] | **PASS** |
| CIFAR-10 α=0.5 | 73.09% | [65%, 80%] | **PASS** |
| CIFAR-10 α=100 | 74.47% | [73%, 85%] | **PASS** |
| MNIST α=0.1 | 97.95% | [90%, 98.5%] | **PASS** |
| MNIST α=0.5 | 98.05% | [94%, 99.5%] | **PASS** |
| MNIST α=100 | 98.01% | [96%, 99.5%] | **PASS** |

### AC-2:统计一致性

| AC | 条件 | 结果 | 判定 |
|:---|:-----|:-----|:-----|
| AC-2-1 | α 维度单调性 — CIFAR-10 | 74.47% > 73.09% > 55.47% ✓ | **PASS** |
| AC-2-1 | α 维度单调性 — MNIST | 98.01% < 98.05% — α=100 与 α=0.5 差异仅 0.04pp | **WARN** |
| AC-2-2 | 数据集维度单调性 | 三个 α 下 MNIST 均 > CIFAR-10 | **PASS** |
| AC-2-3 | 种子方差 — CIFAR-10 α≥0.5 | 0.33pp, 0.29pp (< 3pp) | **PASS** |
| AC-2-3 | 种子方差 — MNIST 全部 | 0.13pp, 0.27pp, 0.13pp (< 2pp) | **PASS** |
| AC-2-4 | 收敛性 — CIFAR-10 α≥0.5 | last10 std ≤ 0.22pp (< 1pp) | **PASS** |
| AC-2-4 | 收敛性 — MNIST 全部 | last10 std ≤ 0.08pp (< 1pp) | **PASS** |
| AC-2-4 | 收敛性 — CIFAR-10 α=0.1 | last10 std = 1.59–6.50pp | **WARN** |

### AC-3:NaN 检查

| 条件 | 结果 | 判定 |
|:-----|:-----|:-----|
| CIFAR-10 全部 15 组 | 0/15 NaN | **PASS** |
| MNIST 全部 15 组 | 0/15 NaN | **PASS** |

---

## §4 AC 判定汇总

| 类别 | PASS | WARN | FAIL |
|:-----|:----:|:----:|:----:|
| AC-0 工程健康度 | 3 | 0 | 0 |
| AC-1 精度范围 | 6 | 0 | 0 |
| AC-2 统计一致性 | 6 | 2 | 0 |
| AC-3 NaN | 2 | 0 | 0 |
| **总计** | **17** | **2** | **0** |

**总判定:PASS(附 2 条 WARN)**

### WARN 说明

**WARN-1:AC-2-1 MNIST α 维度单调性**

MNIST 三个 α 的 mean 分别为 97.95%(α=0.1)、98.05%(α=0.5)、98.01%(α=100),α=100 与 α=0.5 之间出现 0.04pp 反转。这**不是实验缺陷**:MNIST+LeNet-5 是过于简单的任务组合,不同 α 的精度差异本身仅在 0.1pp 量级,已被种子方差(0.13–0.27pp)淹没。FLTrust 论文 N=100 的 MNIST 精度为 95–96%(不同 α 下几乎无差异),进一步印证了这一点。

**WARN-2:AC-2-4 CIFAR-10 α=0.1 收敛性**

5 个 seed 的 last-10-round std 为 1.59–6.50pp,超过 1pp 阈值。这是 extreme non-IID(α=0.1)+ 恒定 lr=0.01 下的 **client drift 振荡**,属于已知的结构性现象(N=10 基线在同条件下也未完全收敛,slope=+0.13pp/round)。设计文档 §4 AC-3 已预判此风险:无攻击基线下 α=0.1 允许 ≤1/5 seeds NaN 为 WARN 级,实测 0/5 NaN 反而好于预期。

---

## §5 N=10 → N=50 精度衰退对照

| 数据集 | α | N=10 mean | N=50 mean | Δ (pp) | 预期方向 | 判定 |
|:-------|:--:|:----------|:----------|:-------|:---------|:-----|
| CIFAR-10 | 0.1 | 56.43% | 55.47% | −0.96 | 下降 0–15pp | ✓ 符合 |
| CIFAR-10 | 0.5 | 78.75% | 73.09% | −5.66 | 下降 3–8pp | ✓ 符合 |
| CIFAR-10 | 100 | 81.71% | 74.47% | −7.24 | 下降 1–5pp | ⚠ 略超预期 |
| MNIST | 0.1 | 97.55% | 97.95% | +0.40 | 下降 0–5pp | ✓ 无衰退 |
| MNIST | 0.5 | 98.66% | 98.05% | −0.61 | 下降 0–3pp | ✓ 符合 |
| MNIST | 100 | 99.04% | 98.01% | −1.03 | 下降 0–2pp | ⚠ 略超预期 |

**分析**:

- **CIFAR-10 α=0.1**:N=50 衰退仅 −0.96pp,远好于预期上界 −15pp。α=0.1 的高方差(7.94pp)使得这一差异在统计误差范围内。
- **CIFAR-10 α=100**:衰退 −7.24pp 略超预期的 −5pp 上界。但注意 N=10 基线仅 3 seeds(std=0.38%),N=50 为 5 seeds(std=0.29%),两者的置信区间有重叠。衰退主因是每客户端数据从 5000 降至 1000,ResNet-18 对数据量更敏感。
- **MNIST**:α=0.1 下 N=50 反而**高于** N=10(+0.40pp),原因是 N=10 基线仅 T=50,而 N=50 基线 T=100(训练充分 2×)。α=100 衰退 −1.03pp 略超预期的 −2pp 上界但仍在合理范围(MNIST 精度空间已接近天花板)。

整体结论:N=10→N=50 的精度衰退符合数据稀释效应的预期方向和量级。

---

## §6 社区锚点对照

| 社区论文 | 数据集 | N | T | 报告的 FedAvg Acc | 我们的 N=50 T=100 结果 | 可比性说明 |
|:---------|:-------|:--:|:--:|:----------|:-----|:-----|
| FLAD (Tang 2025) | CIFAR-10 | 50 | 20 | 64.8% (q=0.5) | 73.09% (α=0.5) | 我们 T=100 训练更充分 → +8pp 合理 |
| FLAD | CIFAR-10 | 50 | 20 | 68.8% (q≈IID) | 74.47% (α=100) | 同上 → +6pp 合理 |
| Fang 2025 | CIFAR-10 ResNet-18 | 100 | 1000 | 78% | 74.47% (α=100) | 我们 N=50 数据更稀疏 → −3.5pp 合理 |
| FLTrust | CIFAR-10 ResNet-20 | 100 | 1500 | 84% | 74.47% (α=100) | 不同模型(ResNet-20 vs 18),不直接可比 |
| FLAD | MNIST | 50 | 20 | 94.9% (q=0.8) | 97.95% (α=0.1) | 我们 T=100 训练更充分 → +3pp 合理 |
| FLTrust | MNIST | 100 | 2000 | 96% | 98.01% (α=100) | 我们模型更简单(LeNet-5),T 等效训练量相当 |

**结论**:全部 6 个数据集×α 组合的结果均在社区报告值的合理偏差范围内,无异常值。

---

## §7 收敛性分析

### 收敛状态汇总

| 数据集 | α | last-10 mean | last-10 std | 趋势 (后10轮 vs 前10轮) | 判定 |
|:-------|:--:|:------------|:------------|:-----------------------|:-----|
| CIFAR-10 | 0.1 | 54.82% | 1.59–6.50% | −3.03 ~ +3.79pp | 未充分收敛(client drift) |
| CIFAR-10 | 0.5 | 73.12% | 0.11–0.22% | −0.15 ~ +0.19pp | ✅ 完全收敛 |
| CIFAR-10 | 100 | 74.45% | 0.08–0.14% | −0.21 ~ −0.10pp | ✅ 完全收敛 |
| MNIST | 0.1 | 97.92% | 0.03–0.08% | +0.10 ~ +0.16pp | ✅ 完全收敛 |
| MNIST | 0.5 | 97.97% | 0.04–0.06% | +0.11 ~ +0.18pp | ✅ 完全收敛(极微上升趋势) |
| MNIST | 100 | 97.97% | 0.03–0.08% | +0.12 ~ +0.23pp | ✅ 完全收敛(极微上升趋势) |

CIFAR-10 α=0.1 的非完全收敛是 extreme non-IID 下的固有特性。N=10 基线在同条件下也存在相同问题(last-10 std=3.87pp),保持 T=100 确保了 N=10→N=50 对照的公平性。

---

## §8 论文 Table 1 推荐数据

建议在论文中使用 **last-20-round mean ± seed std** 作为报告值,以减轻 α=0.1 的末期振荡对 final-round 单点值的影响:

### CIFAR-10 + ResNet-18 (N=50)

| 条件 | Final-round mean ± std | Last-20 mean ± std | 推荐用值 |
|:-----|:----------------------|:-------------------|:---------|
| α=0.1 | 55.47% ± 7.94% | 54.82% ± 5.02% | 54.8 ± 5.0 |
| α=0.5 | 73.09% ± 0.33% | 73.12% ± 0.31% | 73.1 ± 0.3 |
| α=100 | 74.47% ± 0.29% | 74.45% ± 0.20% | 74.5 ± 0.3 |

### MNIST + LeNet-5 (N=50)

| 条件 | Final-round mean ± std | Last-20 mean ± std | 推荐用值 |
|:-----|:----------------------|:-------------------|:---------|
| α=0.1 | 97.95% ± 0.13% | 97.92% ± 0.12% | 97.9 ± 0.1 |
| α=0.5 | 98.05% ± 0.27% | 97.97% ± 0.27% | 98.0 ± 0.3 |
| α=100 | 98.01% ± 0.13% | 97.97% ± 0.14% | 98.0 ± 0.1 |

---

## §9 后续消费方更新

基于本实验结果,防御基线 AC-C-3 精度范围更新为:

| 数据集 | α | FedAvg mean | AC-C-3 新区间 [mean−15pp, mean+5pp] |
|:-------|:--:|:-----------|:------------------------------------|
| CIFAR-10 | 0.1 | 55.47% | [40.5%, 60.5%] |
| CIFAR-10 | 0.5 | 73.09% | [58.1%, 78.1%] |
| CIFAR-10 | 100 | 74.47% | [59.5%, 79.5%] |
| MNIST | 0.1 | 97.95% | [83.0%, 100%] |
| MNIST | 0.5 | 98.05% | [83.1%, 100%] |
| MNIST | 100 | 98.01% | [83.0%, 100%] |

---

## §10 执行日志

### 完成时间线

| 实验 TAG | 耗时 | 完成时间 |
|:---------|:-----|:---------|
| c10_baseline_a0.1_s0 | 1061s | 2026-04-11 00:13 |
| c10_baseline_a0.1_s1 | 1030s | 00:30 |
| c10_baseline_a0.1_s2 | 1068s | 00:48 |
| c10_baseline_a0.1_s3 | 989s | 01:05 |
| c10_baseline_a0.1_s4 | 1021s | 01:22 |
| c10_baseline_a0.5_s0 | 1026s | 01:39 |
| c10_baseline_a0.5_s1 | 1032s | 01:56 |
| c10_baseline_a0.5_s2 | 982s | 02:12 |
| c10_baseline_a0.5_s3 | 974s | 02:28 |
| c10_baseline_a0.5_s4 | 962s | 02:44 |
| c10_baseline_a100_s0 | 965s | 03:01 |
| c10_baseline_a100_s1 | 1018s | 03:18 |
| c10_baseline_a100_s2 | 1012s | 03:34 |
| c10_baseline_a100_s3 | 1040s | 03:52 |
| c10_baseline_a100_s4 | 1015s | 04:09 |
| mn_baseline_a0.1_s0 | 304s | 04:14 |
| mn_baseline_a0.1_s1 | 315s | 04:19 |
| mn_baseline_a0.1_s2 | 312s | 04:24 |
| mn_baseline_a0.1_s3 | 313s | 04:29 |
| mn_baseline_a0.1_s4 | 311s | 04:35 |
| mn_baseline_a0.5_s0 | 273s | 04:39 |
| mn_baseline_a0.5_s1 | 287s | 04:44 |
| mn_baseline_a0.5_s2 | 274s | 04:48 |
| mn_baseline_a0.5_s3 | 289s | 04:53 |
| mn_baseline_a0.5_s4 | 282s | 04:58 |
| mn_baseline_a100_s0 | 259s | 05:02 |
| mn_baseline_a100_s1 | 265s | 05:07 |
| mn_baseline_a100_s2 | 260s | 05:11 |
| mn_baseline_a100_s3 | 267s | 05:15 |
| mn_baseline_a100_s4 | 264s | 05:20 |

### 产出文件清单

- JSONL 指标文件:30 个(`doc_fedavg/n50_results/metrics/metrics_*_shieldfl_atknone_defnone_*_gauto_seed*.jsonl`)
- YAML 配置快照:30 个(`doc_fedavg/n50_results/configs/config_*_shieldfl_atknone_defnone_*.yaml`)
- 结果归档说明:`doc_fedavg/n50_results/README.md`
- 分析脚本:`doc_fedavg/tools/analyze_baseline.py`
- 批量执行脚本:`python/examples/federate/prebuilt_jobs/shieldfl/scripts/batch_baseline_n50.sh`

说明:运行期 `batch_logs/`、`done.txt` 等过程文件未作为最终学术交付物纳入仓库归档;本次入库仅保留可复核的原始 metrics / configs、说明文档与复盘脚本。
29 changes: 29 additions & 0 deletions doc_fedavg/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# N=50 FedAvg Baseline Archive

本目录是对 PR `#2263`(`Exp/n50 fedavg baseline 20260411`)的整理入库版本,只保留 **N=50 FedAvg 无攻击基线** 的可复现实验资产。

## 内容概览

- `27_[2026-04-11]_N50_FedAvg_无攻击基线实验设计.md`:实验设计与验收标准归档版。
- `28_[2026-04-12]_N50_FedAvg_实验结果与验收归档说明.md`:结果汇总、验收结论与对照分析。
- `n50_results/`:30 组实验的原始 metrics / configs 快照。
- `tools/analyze_baseline.py`:用于复盘统计与 AC 检查的离线分析脚本。
- `../python/examples/federate/prebuilt_jobs/shieldfl/scripts/batch_baseline_n50.sh`:批量执行脚本。

## 整理原则

- 排除 PR 中与本次基线无关的临时草稿、过程记录和工作台文件。
- 保留完整的 `2 数据集 × 3 α × 5 seeds = 30` 组实验矩阵。
- 原始文件名保持不变,以便与报告、脚本和历史运行结果逐项对照。

## 命名说明

- 原始 JSONL / YAML 文件名沿用现有实验管线的 `shieldfl` 命名;在这批实验里,它表示由 ShieldFL 实验框架产出的 **no-attack / no-defense 基线记录**,并不表示额外启用了某种防御。
- 指标文件中的 `gauto` 后缀也保留原样;由于本实验 `attack=none`,文件内 `gamma_actual` 为 `null`,该后缀仅用于保持与 PR 原始资产一致。
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml` 在 `master` 上已存在,因此未出现在 PR diff 中;本次归档时已将其补齐,以完整覆盖 30 组矩阵。
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This README refers to the default branch as master, but this repository uses main (as indicated by the diff base). To avoid confusion for readers trying to locate the referenced existing config, update the branch name here (or rephrase to “main branch/default branch”).

Suggested change
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml``master` 上已存在,因此未出现在 PR diff 中;本次归档时已将其补齐,以完整覆盖 30 组矩阵。
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml``main` 上已存在,因此未出现在 PR diff 中;本次归档时已将其补齐,以完整覆盖 30 组矩阵。

Copilot uses AI. Check for mistakes.
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This bullet says the ...a0.5...seed0.yaml config “already existed” and therefore “did not appear in the PR diff”, but in this PR it is actually being added as a new file. Please reconcile the provenance note (either remove the “already existed/not in diff” claim or clarify what PR/branch that statement refers to).

Suggested change
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml` `master` 上已存在,因此未出现在 PR diff 中;本次归档时已将其补齐,以完整覆盖 30 组矩阵
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml` 已在本次归档中纳入,用于完整覆盖 `2 数据集 × 3 α × 5 seeds = 30` 组实验矩阵

Copilot uses AI. Check for mistakes.

## 关联路径

- 原始执行脚本:`python/examples/federate/prebuilt_jobs/shieldfl/scripts/batch_baseline_n50.sh`
- 原始运行结果根目录:`python/examples/federate/prebuilt_jobs/shieldfl/results/`
- 原始 PR 分支:`YKDZ/FedML:exp/n50-fedavg-baseline-20260411`
31 changes: 31 additions & 0 deletions doc_fedavg/n50_results/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# N=50 FedAvg Baseline Results Archive

本目录存放从 PR `#2263` 整理入库的 **N=50 FedAvg 无攻击基线** 原始结果快照。

## 来源

- 来源 PR:`#2263 Exp/n50 fedavg baseline 20260411`
- 来源分支:`YKDZ/FedML:exp/n50-fedavg-baseline-20260411`
- 整理日期:`2026-04-12`
- 原始结果根目录:`python/examples/federate/prebuilt_jobs/shieldfl/results/`
- 完整性校验:
- `30/30` 个 metrics 文件齐全
- 每个 metrics 文件均为 `100` 行,末轮 `round=99`
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The integrity check claims each metrics file has exactly 100 lines, but the archived JSONL files in this PR include an extra trailing blank line (they show up as 101 lines in the repo and have an empty final line). Please either remove the trailing blank lines from the metrics files or update this statement to match the actual archived artifacts.

Suggested change
- 每个 metrics 文件均为 `100` ,末轮 `round=99`
- 每个 metrics 文件包含 `100` 条 JSONL 记录,末轮 `round=99`;当前归档文件因末尾保留一个空白行,在仓库中显示为 `101`

Copilot uses AI. Check for mistakes.
- `30/30` 个 configs 文件齐全

## 目录说明

- `metrics/`:30 个原始 JSONL 指标文件,对应 30 组 baseline run。
- `configs/`:30 个 YAML 配置快照,用于参数审计与可复现性核对。

## 使用注意

- 文件名保留原始 `shieldfl` / `gauto` 命名,以维持与报告、脚本和 PR 证据链的一致性。
- 本归档只保留最终需要复核的原始 metrics / configs;运行期 `batch_logs/`、`done.txt` 等过程文件未纳入仓库。
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml` 来自主分支现有文件,用于补齐完整的 30 组实验矩阵;其余 29 个 config 和 30 个 metrics 来自 PR 分支。
Copy link

Copilot AI Apr 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This note claims ...a0.5...seed0.yaml comes from the main branch (and only the other 29 configs came from the PR branch), but in this PR the file is being added as a new artifact. Please update this provenance statement to match what’s actually in the repo/diff (or clarify the exact source branch/commit where it was taken from).

Suggested change
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml` 来自主分支现有文件,用于补齐完整的 30 组实验矩阵;其余 29 个 config 和 30 个 metrics 来自 PR 分支。
- `config_ResNet18_cifar10_shieldfl_atknone_defnone_a0.5_pmr0.0_seed0.yaml` 为本次归档中补齐 30 组实验矩阵而纳入的配置快照;其余 29 个 config 和 30 个 metrics 来自 PR 分支。

Copilot uses AI. Check for mistakes.

## 关联文档

- `doc_fedavg/27_[2026-04-11]_N50_FedAvg_无攻击基线实验设计.md`
- `doc_fedavg/28_[2026-04-12]_N50_FedAvg_实验结果与验收归档说明.md`
- `doc_fedavg/tools/analyze_baseline.py`
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
common_args:
training_type: "cross_silo"
random_seed: 0

data_args:
dataset: "mnist"
data_cache_dir: ./data
partition_method: "hetero"
partition_alpha: 0.1
val_per_class: 50
trust_per_class: 50
max_samples_per_client: 0
test_subset_size: 0
num_workers: 0

model_args:
model: "LeNet5"

train_args:
federated_optimizer: "FedAvg"
client_id_list:
client_num_in_total: 50
client_num_per_round: 50
comm_round: 100
epochs: 1
batch_size: 64
client_optimizer: sgd
learning_rate: 0.01
weight_decay: 0.0
momentum: 0.9
server_momentum: 0.0
server_lr: 1.0
pop_size: 15
generations: 10
lambda_reg: 0.01
cpu_transfer: true
enable_attack: false
attack_type: "none"
byzantine_client_num: 0
enable_defense: false
defense_type: "none"
beta: 0.2
eval_asr: false
target_label: 0
trigger_size: 3
trigger_value: 1.0
original_class_list: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
target_class_list: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
ratio_of_poisoned_client: 0.0


validation_args:
frequency_of_the_test: 1

device_args:
worker_num: 50
using_gpu: true
gpu_mapping_file: config/gpu_mapping.yaml
gpu_mapping_key: mapping_50clients_isolated

comm_args:
backend: "MPI"
is_mobile: 0

tracking_args:
log_file_dir: ./log
enable_wandb: false
using_mlops: false

shieldfl_args:
runtime_mode: "single-gpu-deterministic"
enforce_determinism: true
sort_client_updates: true
aggregator_type: "shieldfl"
metrics_output_dir: "./results"
Loading
Loading