移除"训练必须有 Nvidia GPU"的硬性守卫,改为按后端能力分派。
- utils/device: resolve_device("auto") 按 cuda > mps > cpu 挑最快的可用后端;
显式指定不可用的后端时直接报错,不会悄悄退回 CPU——训练慢几十倍却不吭声是最坏的情况
- AMP 随后端取默认值:CUDA 开、MPS 关。MPS 上 autocast 数值正常但实测更慢
(tiny_conv @128²:fp32 76 ms/步、fp16 90 ms、bf16 108 ms),需要时 amp: true 可强开
- PeakMemory 统一显存峰值统计:CUDA 读内置计数器,MPS 无峰值 API 改用逐 step 采样
(是下界,日志与产出里已标注)
- profile_inference 支持 MPS,并提示 torch.profiler 没有 MPS 的 ProfilerActivity,
算子明细只反映 CPU 侧下发耗时
- train.py / eval.py 新增 --device,配置默认改为 auto
- check_env 改为列出全部可用后端与 auto 的选择结果
实测:tiny_conv 训练在 MPS 上比 CPU 快约 32 倍。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
43 lines
1.0 KiB
YAML
43 lines
1.0 KiB
YAML
_base_:
|
|
- ../model/tiny_conv.yaml
|
|
- ../dataset/film_defect.yaml
|
|
|
|
work_dir: runs/baseline
|
|
seed: 42
|
|
deterministic: false
|
|
device: auto # auto 按 cuda > mps > cpu 挑最快的可用后端;也可写 cuda / mps / cpu
|
|
|
|
train:
|
|
epochs: 100
|
|
amp: auto # auto: CUDA 上开、MPS 上关(实测 MPS autocast 比 fp32 慢);也可写 true / false
|
|
clip_grad: 5.0
|
|
log_interval: 20
|
|
monitor: f1 # 用于挑选 best.pth 的验证指标
|
|
|
|
optimizer:
|
|
name: adamw
|
|
lr: 0.001
|
|
weight_decay: 0.0001
|
|
|
|
scheduler:
|
|
name: cosine
|
|
|
|
loss:
|
|
heatmap_weight: 1.0
|
|
wh_weight: 0.1
|
|
offset_weight: 1.0
|
|
cls_weight: 1.0
|
|
|
|
eval:
|
|
score_threshold: 0.3
|
|
iou_threshold: 0.5
|
|
topk: 50
|
|
|
|
# 训练过程可视化(SwanLab)。未安装或 enabled=false 时自动跳过。
|
|
swanlab:
|
|
enabled: true
|
|
project: film-defect
|
|
name: null # 缺省用 work_dir 的目录名
|
|
mode: online # online(云端) | local(本地看板) | offline(仅存盘) | disabled
|
|
tags: [tiny_conv, center-head]
|