news 2026/9/15 11:09:56

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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-3
ViT-L 蒸馏(ImageNet-1k)vitl_im1k_lin834.yaml64 × 32 卡(4 节点)20481e-3
ViT-L 蒸馏(LVD-1689M)dinov3_vitl16_lvd1689m_distilled.yaml3 × 多卡19202e-4
ViT-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 个 epoch
  • ViT-7B 预训练:warmup_epochs: 100,共 1000 个 epoch
  • ConvNeXt 蒸馏(convnext_base_p16.yaml):warmup_epochs: 80,峰值 1e-4

学习率随批次大小怎么缩放

改批次时不要手算学习率,用配置里的scaling_rule,实现在 dinov3/configs/config.py:

cfg.optim.lr *= 4 * math.sqrt(cfg.train.batch_size_per_gpu * distributed.get_world_size() / 1024.0)

两种规则的行为对比:

规则公式总批次 1024 时系数总批次 2048 时系数
linear_wrt_256lr × 总批次 / 25648
sqrt_wrt_1024(预训练默认)lr × 4·√(总批次 / 1024)4约 5.66

也就是说,sqrt 规则下批次翻倍、学习率只涨 √2 倍,大批次训练更不容易炸。ViT-L 和 7B 配置用的都是sqrt_wrt_1024。另外两个容易忽略的系数:patch_embed_lr_mult: 0.2(patch embedding 层的学习率单独打 2 折)和layerwise_decay(0.9 / 0.98 / 0.99,学习率按层深逐层衰减,层越深衰减越多)。下游评测里线性探测则用简单的 256 线性缩放(dinov3/eval/linear.py 的scale_lr)。

三、DINOv3 权重衰减设置:从 0.04 起步,渐进加到 0.4

权重衰减惩罚大权重、抑制过拟合。DINOv3 的写法是"起始值 + 终止值",训练中从起点渐进取到终点,而不是全程一个常数:

场景起始值终止值
ViT-L 蒸馏(ImageNet-1k)0.040.4
ViT-L 蒸馏(LVD-1689M)0.040.2
ViT-7B 预训练0.040.04(恒定)
ConvNeXt-B 蒸馏0.020.2(500 个 epoch 内渐近)
ADE20K 线性探测1e-3—(单值)

用法上记住两点:

  • 训练初期权重还没长开,衰减取小(0.02~0.04);后期加大衰减能压住过拟合,0.2~0.4 是仓库里出现过的范围。
  • 头部参数有单独乘数dino_head_wd_multiplier(各配置均为 1.0),一般不用动。

四、按症状查参数:训练曲线不对劲时先查这张表

症状疑似参数调整方向
损失上下震荡、不收敛学习率、预热期基准学习率减半;warmup_epochs加长;确认clip_grad(ViT-L 为 3.0,7B 为 30.0)没被覆盖
收敛慢、曲线太平学习率缩放检查scaling_rule是否实际生效(日志会打印缩放前后的 lr);确认总批次确实变大
显存 OOM每卡批次batch_size_per_gpu,学习率交给缩放规则自动降;大模型开checkpointing: true,7B 还可开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_iterations(12500)自动跑;分割任务看 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 11:05:16

Python实现高效whois查询工具的技术解析

1. 为什么需要自己实现whois查询工具在网络安全和运维工作中,whois查询是最基础但也是最重要的信息收集手段之一。作为一名长期从事安全开发的技术人员,我经常需要快速获取域名的注册信息、过期时间、DNS服务器等关键数据。虽然网上有很多现成的whois查询…

作者头像 李华
网站建设 2026/9/15 11:01:57

iii 0.21:把任意函数变成 REST 端点的完整路径

iii 0.21:把任意函数变成 REST 端点的完整路径 【免费下载链接】iii Effortlessly compose, extend, and observe every service in real-time for the first time ever. 项目地址: https://gitcode.com/GitHub_Trending/mo/iii 这篇文章带你用 iii 0.21 内置…

作者头像 李华