调参大师
常见error
- check‘optimizer = torch.optim.Adam(params’的params的写法,不同模态叠加时候,params不同
- 当loss震荡,比较锯齿不平滑,设置小一点lr:optimizer = torch.optim.Adam(params, lr=0.00001)
- 【已解决】RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors might be asynchronous-CSDN博客
- 大量NaN怎么办:大模型工程化必备技巧——模型训练过程中发现输出大量NaN怎么办?建议收藏 (qq.com)
- 四个常见原因,包括梯度爆炸、学习率过大、数据本身过于稀疏或质量太差以及 backward 时出现 0 在分母上或有无穷大的数。
- 针对学习率过大或数据质量差可调整学习率和进行数据消融,对梯度爆炸可在 model.step () 前进行梯度裁剪
1
torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)
- 对于出现 0 或无穷大的情况可打印运算结果并对出现 NaN 的值进行替换
1
2
3
4
5# 假设a为第一次出现NaN的向量
a = torch.where(torch.isnan(a), torch.full_like(a, 0), a)
# 下面是当a中出现无穷大时
a = torch.where(torch.isinf(a), torch.full_like(a, 0), a)
- 训练不好,查看梯度变化,第几层导致。eg:MocoV3冻结
patch projection
可以解决训练不稳定的问题
数据模态少了。loss一直飙升——过拟合
- 增大epoch,增大lr,增大dropout,正则化
调参
- lr
- 只是把 lr 从 1 e-6 改成 1 e-5,就跑了 80 个 epoch 就开始报 nan 的 loss。 ——方法是把 batch 调大
- 数据量大了,learning rate 要调整小。
- loss 下降波动比较毛刺的时候,将 lr 调小,也不行,可能下降更慢
- ‘the clip used on video-text retrieval is learning-rate sensitivity’无监督训练好的去做下游任务finetune时候,对lr很敏感,甚至moco设置的30,可以试下gradient search,多试试
- scheduler
- 可以scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode=’min’, factor=0.1, patience=10, min_lr=1e-8),
- 调小epoch size
- 最详细最清晰的epoch、batchsize和iteration概念辨析_batch size和epoch-CSDN博客
- batch size
- 非常大所有数据一次性传,效果好了。
- 在使用具有线性学习率缩放的标准 SGD/Momentum 时,大批次的训练可能会不稳定(Goyal 等人,2017 年)。为了稳定训练,我们对所有批次规模都使用了 LARS 优化器(You 等人,2017 年)。
- 模型实验代码技巧_模型设置seed-CSDN博客 求导监测
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21# 正向传播开启自动求导异常侦测
torch.autograd.set_detect_anomaly(True)
# 查看参数梯度和更新情况
for name, parms in model.named_parameters():
print("更新前/后")
print('-->name:', name)
print('-->para:', parms)
print('-->grad_requirs:', parms.requires_grad)
print('-->grad_value:', parms.grad)
# 反向传播求导侦测
from apex import amp
# from torch.cuda import amp
with torch.autograd.detect_anomaly():
if use_amp:
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward()
else:
loss.backward(retain_graph=True)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 chiblog!