fix(simclr): 周期性落盘,中途中断不再丢失训练成果

此前 fit() 只在全部 epoch 跑完后才保存骨架,一次跑到 epoch 12 被停掉后
13 分钟的训练全部作废。

- 每 save_interval(默认 5)个 epoch 保存一次骨架
- 捕获 KeyboardInterrupt,中断时先落盘再返回
- 聚类脚本改用 resolve_device,自监督分支不再有 GPU 守卫

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Shaun Zhou
2026-09-02 21:43:35 +08:00
co-authored by Claude Opus 5
parent 141cb907f2
commit b6f83fcad0
3 changed files with 62 additions and 30 deletions
+5 -4
View File
@@ -22,12 +22,12 @@
work_dir: runs/cluster
seed: 42
device: cuda # method=pretrained 时可以 --set device=cpu
device: auto # auto 按 cuda > mps > cpu 挑最快的可用后端;也可写 cuda / mps / cpu
num_clusters: 6 # 想分几类改这里(或 --num-clusters 6)
num_clusters: 4 # 想分几类改这里(或 --num-clusters 6)
# pretrained: ImageNet 预训练卷积骨架直接抽特征,不训练,CPU 也能跑,几分钟出结果。
# simclr: 在本目录数据上自监督训练项目自己的卷积骨架,域适配更好,需要 Nvidia GPU。
# simclr: 在本目录数据上自监督训练项目自己的卷积骨架,域适配更好;Mac 上走 MPS 即可。
method: pretrained
# method=pretrained 用的骨架(method=simclr 的骨架配在 simclr.backbone,两者字段完全不同,
@@ -97,7 +97,8 @@ simclr:
epochs: 100
batch_size: 256
temperature: 0.2 # 越小越关注难负样本
amp: true
amp: auto # CUDA 上开、MPS 上关
save_interval: 5 # 每 5 个 epoch 落一次盘,中途中断也能拿到权重
log_interval: 20
checkpoint: null # 填已有的 simclr_backbone.pth 可跳过重复训练
projection: {hidden_channels: 256, out_channels: 128}