预训练:数据清洗决定上限
现代LLM训练的第一步是预训练,但很多人低估了数据质量的影响。我踩过的坑是:直接拿原始网络数据训练,结果输出全是垃圾。关键在于过滤低质量文本(如重复、乱码、广告),并去重——用MinHash或SimHash,我习惯先跑一遍Bloom filter快速淘汰明显无效样本。

对齐:RLHF的实操经验
预训练后,模型会说人话但可能胡编乱造。对齐阶段常用RLHF:
- 收集人类偏好数据,让模型生成多个回答,人工排序。
- 训练奖励模型(Reward Model),我用DeBERTa-v3做基座,loss用Bradley-Terry模型。
- PPO微调,注意KL散度系数设0.1左右,太高模型忘得快,太低奖励模型过拟合。
核心原理:RLHF本质是把人类偏好编码进loss函数,避免纯监督学习导致的“平均化”输出。
部署:量化和推理优化
部署阶段,量化是刚需。我推荐PTQ(Post-Training Quantization)先用校准集算scale和zero-point,比QAT省事。关键代码片段:
python
1
2
3
4
5
import torch
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("model_path")
model = torch.quantization.quantize_dynamic(model, {torch.nn.Linear}, dtype=torch.qint8)
注意动态量化只对Linear层生效,且推理时再量化,显存能省一半。
常见问题与避坑
- 数据泄露:训练集含测试集样本,导致评估虚高——用哈希去重时保留测试集ID。
- RLHF不稳定:奖励模型训练时,如果正负样本比例失衡,加focal loss。
- 量化精度下降:针对敏感层(如attention的QKV)保留FP16,我用混合精度量化,损失控制在1%以内。
调参心得:学习率用cosine decay + warmup,batch size按显存尽可能大,但别超过2048,否则收敛变慢。