一、大模型微调的主要步骤

  1. 环境准备

    • 安装必要库:transformers, datasets, peft(lora训练框架), swanlab (用于可视化训练过程)等。

    • transformers加载预训练模型。

  2. 数据集构造

    • 先查模型的特定的指令微调格式,按格式构造数据。

    • 每条样本包含 instructioninputoutput

    • 适配模型的 chat template

  3. 数据预处理

    • 使用 Tokenizer 将文本转为模型输入格式。

    • 设置 labels,将非目标部分(如 instruction)设为 -100 以忽略其 loss防止模型预测这部分。

    • 控制最大长度(如 1024 tokens)并截断。

  4. 微调配置(LoRA)

    • 使用 peft 库配置 LoRA 参数:

      • r=8, lora_alpha=32, target_modules 指定微调层(如 q_proj, v_proj)。

    • 仅训练插入的低秩矩阵,冻结原模型参数。

    • 启用 gradient_checkpointing=True 降低显存占用。

  5. 训练与监控

    • 使用 Trainer 进行训练,配置 TrainingArguments

    • 使用 SwanLabCallback 监控训练过程(loss、GPU 利用率等)。

    • 保存 LoRA 权重(非完整模型)。

  6. 推理与合并

    • 加载原模型和 LoRA 权重。

    • 使用 PeftModel.from_pretrained() 合并权重。

    • 使用 apply_chat_template() 构造输入,进行推理测试。



三、lora高效微调的优缺点分析

✅ 优点
  • 高效性:LoRA 只训练少量参数,显存占用低,训练速度快。

  • 保留原模型能力:原模型参数不变,避免灾难性遗忘。

  • 部署灵活:LoRA 权重可插拔,便于多任务切换。

  • 推理无损:LoRA 权重可合并回原模型,推理速度无显著下降。

❌ 缺点
  • 表达能力有限:相比全量微调,LoRA 表达能力受限,复杂任务可能效果不佳。

  • 依赖原模型质量:若基座模型能力弱,LoRA 提升空间有限。

  • 调试复杂:需适配 chat template、tokenizer、数据格式等,调试成本高。

  • 任务泛化差:LoRA 模型对未见过的新任务泛化能力较弱。


四、lora技术局限时的备选方案(网上找的)

方法简介适用场景
全量微调(Full Fine-tuning)训练所有参数,效果最强数据充足、算力充足、任务复杂
QLoRA结合 4bit 量化的 LoRA,显存占用更低显存极度受限,仍想微调大模型
Prompt Tuning / P-Tuning v2只训练 prompt 参数,适合小模型轻量级任务、快速验证
Adapter Tuning插入小型网络模块,类似 LoRA与 LoRA 类似,但结构不同
RAG(检索增强生成)不微调模型,外挂知识库知识更新频繁、无需微调的场景
In-Context Learning(ICL)不训练,只通过 prompt 引导零样本/少样本任务,快速试错

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐