微调
本章介绍模型的微调概念
LoRA技术
1.拟合(模型学习的过程)
训练模型
- 输入:高质量的标注数据集
- 过程:模型通过不断迭代,计算预测结果与真实答案之间的误差
- 结果:随着Loss下降,模型逐渐 ”理解“ 了数据分布规律,学会回答特定领域的问题
2.微调(Fine-tuning)站到巨人的肩膀
不需要从头训练一个几十亿参数的模型,那样成本太高
- 原理:冻结基础模型的绝大部分参数不动
- 优势:显存占用极低,训练速度快,且能保留基础模型的通用能力,同时注入领域知识
3.合并(Merging)
微调完成之后,我们得到的是基础模型 + LoRA 权重文件;
- 痛点:许多推理框架(如 Ollama、vLLM 的生产环境)更倾向于加载单一的完整模型文件,而不支持动态挂载 LoRA。
- 解决:将 LoRA 的增量参数数学融合进基础模型,生成一个新的、独立的 .gguf 或 .safetensors 模型文件(例如 Qwen-shop-model)
量化的概念
量化是指将模型权重从高经度(16-bit 或 32-bit 浮点数)转化为低经度(8-bit、4-bit甚至更低)
- 作用:降低显存占用:这是量化最显著的优势
- 加速推理:低经度可以带来更快的推理速度
- 赋能低成本微调:结合 LoRA 技术(即 QLoRA),使得在消费级显卡上微调大模型成为可能。
微调步骤
下载基础模型 → LoRA 微调 → 合并模型 → 转换为 Ollama 格式 → 部署 API
- 一、准备环境与基础模型
# 假设使用 HuggingFace CLI 下载
huggingface-cli download --resume-download Qwen/Qwen1.5-1.8B --local-dir ./base_model- 二、LoRA 微调(拟合数据)
训练结束后,你将得到 ./lora_adapter 文件夹,里面包含训练好的 LoRA 权重。
- 三、合并模型 将基础模型与LoRA模型融合,生成完整模型
- 四、转换为ollama 格式 ollama 主要支持.gguf格式,需要通过llama.cpp 工具进行操作
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make
使用官方提供脚本转换格式
python convert-hf-to-gguf.py ../merged_model --outfile model-f16.gguf
可以选择是否进行量化
./quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M- 五、部署接入
创建MOdelfile
FROM ./model-q4_k_m.gguf
# 设置系统提示词 (可选)
SYSTEM "你是一个专业的电商客服助手,请根据用户问题提供准确解答。"
# 设置参数 (可选)
PARAMETER temperature 0.7
PARAMETER top_p 0.9
# 导入模型到 Ollama,命名为 qwen-shop
ollama create qwen-shop -f Modelfile
# 交互式测试
ollama run qwen-shop "这款衣服有红色吗?"全量微调 (Full Fine-Tuning)
是指在大语言模型预训练完成后,使用特定领域的数据集,对模型的所有参数进行更新和训练的过程.
核心原理
- 参数状态:模型的所有参数都会参与计算梯度并更新
- 优化目标:让模型在保留通用知识的同时,深度适应新数据的分布、风格或逻辑
全量微调和微调的对比
| 特性 | 全量微调 (Full Fine-Tuning) | LoRA / QLoRA |
|---|---|---|
| 训练参数量 | 100% (例如 1.8B 模型就是 18 亿个参数) | < 1% (仅训练低秩矩阵,通常几百万参数) |
| 显存需求 | 极大 通常需要显存 = 模型权重(16/32bit) + 梯度(16/32bit) + 优化器状态(32bit) 经验法则:微调 7B 模型可能需要 80GB+ 显存 | 极小 主模型可量化(4bit),只需存储少量 LoRA 参数的梯度和优化器状态 经验法则:微调 7B 模型仅需 12-24GB 显存 |
| 训练速度 | 较慢(计算量大,通信开销大) | 较快(计算量小) |
| 性能上限 | 理论最高。模型能彻底“重塑”自己以适应新任务,适合任务差异极大的场景。 | 接近全量。在大多数指令微调(SFT)场景下,效果与全量微调持平甚至更好,但在极度复杂的领域适配上可能略逊一筹。 |
| 存储成本 | 高。每个任务都要保存一个完整的模型副本(几 GB 到几十 GB)。 | 低。每个任务只保存一个小文件(几 MB 到几百 MB)。 |
| 灾难性遗忘 | 风险较高。如果数据不够多样,模型容易忘记预训练时的通用能力。 | 风险相对较低。主模型参数冻结,保留了大部分原始知识。 |
版权所有
版权归属:念宇
