Math-04.优化-20.大模型训练与微调

本页汇总大语言模型(large language model,LLM)与蛋白 LM 的优化实践,衔接 04–0510 DL 训练

段末注释ZeRO(Zero Redundancy Optimizer)将 optimizer 状态分片到多 GPU,降低单卡显存;FSDP(Fully Sharded Data Parallel)为 PyTorch 全分片数据并行方案。

系列入口00.系列规划 | 前置:05 学习率Math-03/20 LoRA


1. 预训练优化配方(D7)

图 1 大 batch + warmup + cosine

组件 典型选择
优化器 AdamW($\beta_1=0.9,\ \beta_2=0.95$–$0.999$)
学习率 peak $10^{-4}$–$3\times10^{-4}$(视模型规模)
调度 linear warmup + cosine decay
batch 大 global batch(M tokens);linear lr scaling
精度 BF16 训练(A100+)
稳定性 grad clip=1.0、weight decay 0.1

损失:token CE(Math-05/10)。


2. LoRA / 微调(D3–D7)

图 2 全量 vs LoRA 可训练参数

全量微调 LoRA
可训练参数 全部 $\boldsymbol{\theta}$ 仅 $A,B$ 低秩矩阵
典型 lr $10^{-5}$–$10^{-4}$ $10^{-4}$–$10^{-3}$(可更大)
优化器 AdamW AdamW
weight decay 常 0.01 作用于 $A,B$ 或仅 $A$
内存 高(存全梯度/状态)

实践:冻结 $W_0$;LoRA 注入 $W_Q,W_K,W_V,W_O$ 及 FFN;rank $r=8$–$64$ 任务依赖。

酶/蛋白 LM:酶功能大模型酶改造-06


3. 分布式与显存(D7)

图 3 并行策略

策略 作用
数据并行 DDP 每卡完整模型,不同 batch
ZeRO-1/2/3 分片 optimizer / 梯度 / 参数
FSDP PyTorch 原生分片
张量并行 TP 单层矩阵切多卡
流水线 PP 层切分到卡
梯度累积 小 micro-batch 模拟大 batch

微调 7B 模型单卡常需 LoRA + 量化(QLoRA)+ 累积。


4. RLHF 阶段的优化(D6)

对齐阶段(Math-05/20):

  • SFT:标准 CE + AdamW
  • RM:较小 lr,独立训练
  • PPO/DPO:policy lr 通常 低于 SFT;KL 系数 $\beta$ 约束相对 $\pi_{\mathrm{ref}}$

DPO 无显式 RM 采样循环,优化更稳、工程更简单。


5. 局限与 checklist(D8)

图 4 大模型优化陷阱

陷阱 对策
抄 lr 不改 batch linear scaling + warmup
LoRA rank 过小 消融 $r$
仅看 train PPL 下游任务 / 偏好 win rate
FP16 溢出 BF16 或 loss scaling
灾难性遗忘 KL、SFT mix、较小 lr

6. HuggingFace 风格配置(D12)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from transformers import TrainingArguments

args = TrainingArguments(
output_dir="./out",
per_device_train_batch_size=4,
gradient_accumulation_steps=8,
learning_rate=2e-4, # LoRA 微调可较大
weight_decay=0.01,
warmup_ratio=0.03,
lr_scheduler_type="cosine",
bf16=True,
max_grad_norm=1.0,
optim="adamw_torch",
)
# Trainer(model=peft_model, args=args, ...)

7. 小结

大模型优化 = AdamW + warmup/cosine + BF16 + clip;微调 = LoRA + 较大 lr + 少 epochMath-04 优化 系列至此完整。

系列导航00 规划 | Math-06 矩阵微积分

-------------本文结束感谢您的阅读-------------