AI大模型微调
大模型微调Fine-tuning是指在预训练模型的基础上使用特定任务或领域的数据继续训练让模型更好地适应具体应用场景。下面是微调的完整过程包括主流方法和关键步骤。一、微调的核心思想预训练模型已经学习了通用的语言知识语法、推理、常识等微调相当于把通才变为专才——用少量高质量任务数据调整模型参数使其在特定任务如情感分析、法律问答、医疗诊断上表现更优。微调的两种常见模式全量微调更新模型所有参数效果好但计算开销大。参数高效微调 (PEFT)只更新少量额外参数如 LoRA、Adapter在保持效果的同时大幅降低显存需求。二、微调的完整流程步骤1明确任务与数据准备确定任务类型文本分类、指令跟随、代码生成、对话摘要等。收集/标注数据需要输入-输出对。例如情感分析数据(文本, 标签)对话数据(用户消息, 助手回复)。数据质量要求干净、一致、无噪声去除错误标注、重复、无关内容。规模几百到几十万条不等取决于任务难度和模型大小通常几千条已能看到明显效果。分布覆盖实际部署场景的边界情况。数据集划分训练集、验证集、测试集例如 8:1:1。步骤2预处理与格式化模板化将原始数据构造成模型能理解的对话/指令格式。例如微调 Llama 2 时常用text[INST] {用户问题} [/INST] {期望回答}分词将文本转换为令牌 ID同时填充/截断到统一长度例如 2048 tokens。遮蔽自回归训练时需要因果掩码causal mask确保模型只能看到前面的 token。处理标签对于生成任务通常将输入部分的标签设为 -100忽略损失只计算输出部分的损失。步骤3选择微调方法方法更新参数量显存需求效果适用场景全量微调100%极高最好数据量大、有充足计算资源LoRA0.1%~1%低媲美全量绝大多数场景QLoRA~0.1%极低4-bit量化接近全量单卡微调7B~70B模型Adapter~1%较低中等较旧的技术现较少用Prefix Tuning很少低中等生成任务LoRA 原理冻结原始权重在旁支插入低秩矩阵A和B训练时只更新这两个小矩阵最后与原始权重合并。步骤4设置训练超参数关键超参数及其典型值以 LoRA 微调 7B 模型为例参数全量微调LoRA说明学习率5e-6 ~ 5e-51e-4 ~ 5e-4LoRA 通常需要更高学习率批次大小4~324~16受限于显存训练轮次2~53~10小数据集可多轮防止过拟合优化器AdamW / AdamWAdamW常用梯度累积步数1~81~4等效增大 batch size学习率调度余弦退火 / 线性衰减余弦退火预热步数0~1000~200最大序列长度512~4096与基座一致LoRA 特有参数r秩通常 8, 16, 32。越大能力越强但参数增多。alpha缩放因子通常设为 2r 或与 r 相等。dropout0~0.1防过拟合。步骤5执行训练硬件要求7B 模型全量微调至少 1 张 80G A100 或 2~4 张 40G A100。7B LoRA/QLoRA1 张 24G 显卡RTX 3090/4090足够。13B QLoRA24G 勉强可跑33B 需要 2×24G 或 A100 40G。常见工具Hugging Face Transformers PEFT TRL最通用支持 SFTTrainer。LLaMA-FactoryWebUI 操作低代码。Axolotl配置化微调适合生产。Unsloth专门优化 Llama/Mistral 微调速度快 2~5 倍。训练循环示意伪代码pythonfor epoch in range(num_epochs): for batch in dataloader: # 前向输入 batch 得到 logits outputs model(input_idsbatch[input_ids], labelsbatch[labels]) loss outputs.loss # 反向传播 loss.backward() # 梯度裁剪防止爆炸 torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0) # 更新参数 optimizer.step() scheduler.step() optimizer.zero_grad() # 记录损失在验证集上评估步骤6评估与验证验证集损失判断是否过拟合训练损失持续降验证损失上升 → 停止。任务具体指标分类准确率、F1。生成ROUGE-L、BLEU参考答案、人工评分或 GPT-4 评估。对抗测试检查是否产生有害内容、幻觉、格式错误。步骤7合并与部署LoRA 权重合并可将 adapter 合并回基座模型得到一个完整的新模型文件。量化若需降低部署成本可再量化到 int8 或 int4GPTQ、AWQ。部署格式导出为 HuggingFace 格式或转换为 vLLM、TGI 能加载的格式。提供服务用 FastAPI 封装模型推理接口或使用推理引擎加速。三、微调中的常见陷阱与建议问题原因解决方案模型只重复输入模板错误 / 标签遮蔽不当检查 labels 中是否将输入部分设为 -100灾难性遗忘学习率过高 / 训练过久降低学习率添加少量原始预训练数据混合训练过拟合数据太少或轮次太多增加正则dropout权重衰减早停收集更多数据效果不如提示工程微调数据质量差或任务简单先尝试 few-shot 提示不行再微调显存不足模型大序列长使用 LoRA 梯度检查点 4-bit 量化四、一个最小的微调示例使用 LLaMA-Factorybash# 安装 LLaMA-Factory git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip install -e . # 准备数据data/medical.json (格式示例) [ {instruction: 什么是高血压, output: 高血压是指...}, ... ] # 启动微调命令行 llamafactory-cli train \ --model_name_or_path meta-llama/Llama-2-7b-hf \ --stage sft \ --dataset medical \ --template llama2 \ --finetuning_type lora \ --lora_rank 8 \ --output_dir ./lora_medical \ --per_device_train_batch_size 4 \ --learning_rate 1e-4 \ --num_train_epochs 5五、总结大模型微调的关键不在于复杂的代码而在于高质量的数据 合适的微调方法 正确的超参数。对于大多数开发者推荐LoRA/QLoRA Hugging Face PEFT 小型专用数据集可以在消费级显卡上快速得到效果不错的垂直领域模型。如果追求极致效果且资源充足才考虑全量微调。如果需要更深入解释某个环节例如数据构造细节、LoRA 原理、评估方法等可以继续问我。