feat(simclr): 接入 SwanLab 可视化,并补上本地看板缺失的依赖

- SimCLRTrainer 记录 simclr/loss、loss_avg、lr(按 step)与 epoch_loss、
  epoch_seconds、gpu_mem_peak_mb(按 epoch),超参为完整 yaml 配置;
  正常结束与 KeyboardInterrupt 两条路径都会 finish()
- 配置新增 simclr.swanlab(字段同 train.swanlab),默认 mode: local,
  不需要登录,日志写到 <work_dir>/swanlog
- 依赖改为 swanlab[dashboard]:此前 `swanlab watch` 在干净环境里会报
  "Please install the swanboard package",README 里检测训练那节的看板命令
  同样受影响,现已随 uv sync 装好
- README 补齐本地看板/云端/离线补传三种用法与端口、局域网参数

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Shaun Zhou
2026-09-03 09:24:39 +08:00
co-authored by Claude Opus 5
parent 7d5b6ec423
commit be6173c746
7 changed files with 304 additions and 14 deletions
+24 -5
View File
@@ -127,11 +127,21 @@ train:
```
```bash
swanlab login # 首次使用云端模式需登录
uv run python train.py --config configs/train/baseline.yaml --set train.swanlab.mode=offline
uv run swanlab watch runs/baseline/swanlog # 本地看板
# 本地看板:不需要账号,训练时用 local 模式,另开终端起看板
uv run python train.py --config configs/train/baseline.yaml --set train.swanlab.mode=local
uv run swanlab watch runs/baseline/swanlog # 默认 http://127.0.0.1:5092
# 云端
uv run swanlab login # 首次使用需登录
uv run python train.py --config configs/train/baseline.yaml # mode 默认 online
# 离线跑完后再补传云端
uv run swanlab sync runs/baseline/swanlog
```
看板可以在训练**进行中**打开,指标边训边刷。端口冲突用 `-p 5100`,要局域网访问加 `-h 0.0.0.0`。
本地看板依赖 `swanlab[dashboard]`,已包含在 `uv sync` 里。
未安装 swanlab、未登录或网络不通时会打一条警告并继续训练,不会中断。关掉用
`--set train.swanlab.enabled=false`。
@@ -290,8 +300,17 @@ view_transforms: # 生成两个视图的随机增强
> `RandomResizedCrop` 的 `scale` 下限别低于 0.4:裁太狠会让两个视图都只剩背景,
> "背景 vs 背景"被当成正样本对,学出来的特征会退化。
> SimCLR 训练目前**没有接 SwanLab**,只往 `<work_dir>/cluster.log` 打文本日志,
> 盯 loss 要看日志(`grep "完成 loss" runs/simclr/cluster.log`)。
SimCLR 训练同样接了 SwanLab(配置在 `simclr.swanlab`,字段与 `train.swanlab` 相同,
默认 `mode: local` 不需要登录)。训练跑起来后另开一个终端:
```bash
uv run swanlab watch runs/simclr/swanlog
```
记录的指标:按 step 的 `simclr/loss`、`simclr/loss_avg`、`simclr/lr`,按 epoch 的
`simclr/epoch_loss`、`simclr/epoch_seconds`、`simclr/gpu_mem_peak_mb`,超参是完整的 yaml 配置。
不想要就 `--set simclr.swanlab.enabled=false`;纯看文本日志用
`grep "完成 loss" runs/simclr/cluster.log`。
训练出的骨架和检测模型用的是同一套卷积骨架,可以直接拿去初始化 `DefectNet` 的 backbone——
标注量有限时,通常比 ImageNet 权重更贴合薄膜的成像特性。