调参不是玄学,它本质上是梯度下降的步长(LR)与样本代表性(Batch Size)之间的平衡。
1. 学习率(Learning Rate):步子别跨太大
DeepSeek 官方在预训练阶段采用了极大的集群和动态调整策略,但在微调阶段,策略完全不同。
-
官方参考值:
-
全参数 SFT: 建议在 $1 \times 10^{-5}$ 到 $5 \times 10^{-6}$ 之间。DeepSeek 的参数量巨大,过大的学习率会瞬间破坏预训练积累的权重分布。
-
LoRA / QLoRA: 建议在 $5 \times 10^{-5}$ 到 $2 \times 10^{-4}$ 之间。因为 LoRA 训练的是旁路矩阵,可以容忍略大一点的步长来加速收敛。
-
-
避坑指南: * 如果你发现 Loss 曲线在第一轮(Epoch)结束后突然“起飞”或者变成 NaN,百分之百是学习率给高了。
- Warm-up 必不可少: 建议设置 3% - 5% 的预热步数。给模型一点缓冲时间,让梯度逐渐稳定下来。
2. Batch Size:寻找“性价比”拐点
在 DeepSeek 的 MoE 架构下,Batch Size 不仅影响收敛速度,还影响 Router(路由)的稳定性。
-
全局 Batch Size 计算公式: $Global\_Batch = per\_device\_batch \times grad\_accum\_steps \times num\_gpus$
-
官方实战建议: * 对于 SFT(指令微调),建议总 Batch Size 在 128 到 512 之间。
- 对于 GRPO(强化学习),由于需要群体采样,Batch Size 建议拉大到 512 以上,以保证相对优势(Advantage)计算的准确性。
-
显存补救: 绝大多数人没有千卡集群。如果单卡显存爆了,把
per_device_train_batch_size设为 1 或 2,然后通过增加gradient_accumulation_steps(梯度累加)来硬凑出大的全局 Batch Size。这对模型效果几乎无损。
3. 黄金组合策略
-
线性缩放原则: 当你把总 Batch Size 翻倍时,理论上学习率也应该适当增加。但在微调 DeepSeek 时,建议采用“小步快跑”:低学习率 + 大 Batch Size。这种组合虽然训得慢,但产出的模型逻辑最稳。
-
余弦退火(Cosine Decay): 训练后期务必让学习率衰减到初始值的 10% 甚至更低,这是模型最终“开悟”、压低最后一点 Loss 的关键。
总结建议:
如果你是初学者,手里只有几张 3090/4090,建议起步参数:
-
Method: QLoRA
-
Learning Rate: $1 \times 10^{-4}$
-
Total Batch Size: 128 (通过累加实现)
-
LR Scheduler: Cosine with 3% Warmup