尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

DINOv3 超参数调优速查:批次大小、学习率、权重衰减一次配好

DINOv3 超参数调优速查:批次大小、学习率、权重衰减一次配好 DINOv3 超参数调优速查批次大小、学习率、权重衰减一次配好【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3这是一篇 DINOv3 超参数调优速查解决三个问题DINOv3 批次大小按 GPU 数量怎么定、DINOv3 学习率设置随批次怎么缩放、DINOv3 权重衰减的起止值取多少。全文按“定规模 → 配参数 → 按症状排查 → 验证效果”的顺序写所有数值都能在仓库配置文件中找到出处。需要代码的话git clone https://gitcode.com/GitHub_Trending/di/dinov3。一、先定训练规模按 GPU 数量选 DINOv3 批次大小批次大小决定模型每一步看多少张图学习率必须跟着它走所以这两个数要一起定不能各改各的。仓库里的预训练配置都在 dinov3/configs/train/不同规模的参考值如下场景配置文件每卡批次总批次基准学习率ADE20K 线性探测8 卡单机config-ade20k-linear-training.yaml2 × 8 卡161e-3ViT-L 蒸馏ImageNet-1kvitl_im1k_lin834.yaml64 × 32 卡4 节点20481e-3ViT-L 蒸馏LVD-1689Mdinov3_vitl16_lvd1689m_distilled.yaml3 × 多卡19202e-4ViT-7B 预训练dinov3_vit7b16_pretrain.yaml16 × 约 512 卡约 81925e-5注意规律批次越大单步看到的样本越多、梯度越稳基准学习率反而可以压得更低——7B 规模用 5e-5比 ViT-L 的 1e-3 小两个数量级。这是自监督大模型训练的常见取舍调参时别反着来。二、DINOv3 学习率设置线性预热 余弦衰减再按批次缩放学习率决定每一步走多远。DINOv3 不写死一个值而是走三段式调度从 0 线性预热到峰值再余弦衰减到min_lr各配置里均为 1e-6。调度逻辑在 dinov3/train/cosine_lr_scheduler.py 的CosineScheduler里核心就两行warmup_schedule np.linspace(start_warmup_value, base_value, warmup_iters) schedule final_value 0.5 * (base_value - final_value) * (1 np.cos(np.pi * iters / len(iters)))各配置的预热期长度差异很大别漏改ViT-L 蒸馏warmup_epochs: 10共 100 个 epochViT-7B 预训练warmup_epochs: 100共 1000 个 epochConvNeXt 蒸馏convnext_base_p16.yamlwarmup_epochs: 80峰值 1e-4学习率随批次大小怎么缩放改批次时不要手算学习率用配置里的scaling_rule实现在 dinov3/configs/config.pycfg.optim.lr * 4 * math.sqrt(cfg.train.batch_size_per_gpu * distributed.get_world_size() / 1024.0)两种规则的行为对比规则公式总批次 1024 时系数总批次 2048 时系数linear_wrt_256lr × 总批次 / 25648sqrt_wrt_1024预训练默认lr × 4·√(总批次 / 1024)4约 5.66也就是说sqrt 规则下批次翻倍、学习率只涨 √2 倍大批次训练更不容易炸。ViT-L 和 7B 配置用的都是sqrt_wrt_1024。另外两个容易忽略的系数patch_embed_lr_mult: 0.2patch embedding 层的学习率单独打 2 折和layerwise_decay0.9 / 0.98 / 0.99学习率按层深逐层衰减层越深衰减越多。下游评测里线性探测则用简单的 256 线性缩放dinov3/eval/linear.py 的scale_lr。三、DINOv3 权重衰减设置从 0.04 起步渐进加到 0.4权重衰减惩罚大权重、抑制过拟合。DINOv3 的写法是起始值 终止值训练中从起点渐进取到终点而不是全程一个常数场景起始值终止值ViT-L 蒸馏ImageNet-1k0.040.4ViT-L 蒸馏LVD-1689M0.040.2ViT-7B 预训练0.040.04恒定ConvNeXt-B 蒸馏0.020.2500 个 epoch 内渐近ADE20K 线性探测1e-3—单值用法上记住两点训练初期权重还没长开衰减取小0.02~0.04后期加大衰减能压住过拟合0.2~0.4 是仓库里出现过的范围。头部参数有单独乘数dino_head_wd_multiplier各配置均为 1.0一般不用动。四、按症状查参数训练曲线不对劲时先查这张表症状疑似参数调整方向损失上下震荡、不收敛学习率、预热期基准学习率减半warmup_epochs加长确认clip_gradViT-L 为 3.07B 为 30.0没被覆盖收敛慢、曲线太平学习率缩放检查scaling_rule是否实际生效日志会打印缩放前后的 lr确认总批次确实变大显存 OOM每卡批次降batch_size_per_gpu学习率交给缩放规则自动降大模型开checkpointing: true7B 还可开fp8_enabled前期指标好、后期不涨权重衰减终止值适当提高weight_decay_end检查layerwise_decay是否过松预热期就炸掉预热 梯度裁剪预热曲线检查是否从 0 起步clip_grad调小改参数时一次只动一个改完看两个 epoch 的曲线再动下一个否则分不清是哪个起的作用。五、验证效果三个监控点确认调参有没有用缩放日志启动时 dinov3/configs/config.py 会打印sqrt scaling learning rate; old: ..., new: ...先确认学习率真的按规则缩放过了再谈其他。梯度范数配置里有monitor_gradient_norm默认 false打开后能直接看到梯度是否发散震荡排查最有用。评测指标ViT-L 官方配置注释里记了基准——82.2 im1k-knn、83.3 im1k-linear每隔eval_period_iterations12500自动跑分割任务看 ADE20K 配置 里的 mIoU。同一规模下新配置跑完 10 个 epoch 的指标不低于基准线调参才算没跑偏。不确定怎么下手的话直接复制 dinov3/configs/train/vitl_im1k_lin834.yaml只改batch_size_per_gpu适配你的 GPU 数量学习率交给scaling_rule自动缩放其余先保持默认跑通。【免费下载链接】dinov3Reference PyTorch implementation and models for DINOv3项目地址: https://gitcode.com/GitHub_Trending/di/dinov3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表