LLM 微调实战指南 2026:从数据准备到部署,完整的模型定制化流程
什么时候值得微调,什么时候用 Prompt 工程就够了
返回教程列表特定领域输出格式:你需要模型始终按照非常特定的格式输出(如医疗记录格式、特定代码风格)
大量重复的上下文:系统 Prompt 超过 2000 tokens,且每次都要带上
专业术语和知识:模型需要学习你的行业术语和私有知识体系
延迟和成本:需要更快的响应速度或更低的调用成本 只是想改变行为:大多数行为可以通过 Prompt 工程实现
知识更新频繁:微调模型无法实时更新,RAG 更合适
预算有限:微调有一定的计算和时间成本
刚开始验证:先用 RAG/Prompt 工程验证可行性 原始模型的回答
微调后模型的回答
理想答案
本地 LLM 部署完整指南
Advanced RAG 高级技巧
LangChain vs LangGraph 实战指南
高级约 18 分钟
LLM 微调实战指南 2026:从数据准备到部署,完整的模型定制化流程
什么时候值得微调,什么时候用 Prompt 工程就够了
LLM 微调(Fine-tuning)在 2026 年已经变得更加可及,但"微调"不是万能药。本文讲解微调 vs Prompt 工程的选择原则,以及用 Unsloth + LoRA 进行高效微调的完整流程,包括数据准备、训练配置、评估和部署。
LLM微调Fine-tuningLoRAUnsloth模型训练Qwen微调
很多人在问"我能不能微调一个模型让它更了解我的业务"——答案通常是"可以,但你可能不需要"。
先搞清楚什么时候应该微调,什么时候 Prompt 工程就足够了。
一、微调 vs Prompt 工程:如何选择
需要微调的情况
不需要微调的情况
二、高效微调:Unsloth + LoRA
2026 年最流行的微调方案:Unsloth(训练加速) + LoRA(参数高效微调)
2.1 环境准备
bash
推荐环境:NVIDIA GPU 16GB+,或 Google Colab A100
pip install unsloth transformers datasets trl accelerate或者用 Unsloth 的一键安装
pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
2.2 数据准备(最关键的步骤)
微调质量 = 数据质量,不是数据量。
python
数据格式:ShareGPT 格式(推荐)
training_data = [
{
"conversations": [
{"from": "human", "value": "用户问题"},
{"from": "assistant", "value": "期望的模型回答"}
]
},
# ... 更多样本
]最少需要多少数据?
- 格式/风格微调:100-500 条
- 领域知识注入:500-2000 条
- 完全的行为改变:2000+ 条
数据质量检查清单
✅ 每个样本都是高质量的吗?(宁愿少而精)
✅ 数据分布均匀吗?(不要过度代表某一类问题)
✅ 有没有矛盾的样本?(同一类问题不同答案)
✅ 有没有数据泄露?(不要把测试集当训练集)
2.3 Unsloth 微调代码
python
from unsloth import FastLanguageModel
from trl import SFTTrainer
from transformers import TrainingArguments
from datasets import Dataset加载基础模型(选择适合你的大小)
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Qwen2.5-7B-Instruct", # 7B 适合入门
max_seq_length=2048,
load_in_4bit=True, # 4bit 量化,节省内存
)添加 LoRA 适配器
model = FastLanguageModel.get_peft_model(
model,
r=16, # LoRA rank,越大效果越好,内存越多
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
lora_alpha=16,
lora_dropout=0,
bias="none",
)准备数据集
dataset = Dataset.from_list(training_data)开始训练
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=2048,
args=TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
warmup_steps=5,
num_train_epochs=3, # 轮数,过多会过拟合
learning_rate=2e-4,
fp16=True,
output_dir="./output",
save_strategy="epoch",
),
)trainer.train()
三、评估微调效果
3.1 定量评估
python
from evaluate import load对于生成质量评估
rouge = load("rouge")
results = rouge.compute(
predictions=model_outputs,
references=reference_outputs
)
print(results) # ROUGE-1, ROUGE-2, ROUGE-L 分数对于特定任务
分类准确率、F1 分数等
3.2 定性评估(更重要)
建立一个人工评估集(50-100 个典型问题),对比:
每个维度打分(准确性/格式符合度/相关性),看微调是否有提升。
四、部署微调模型
4.1 保存和加载
python
保存 LoRA 权重(很小,通常 < 100MB)
model.save_pretrained("my-finetuned-model")
tokenizer.save_pretrained("my-finetuned-model")合并权重(可选,用于部署)
model.save_pretrained_merged(
"merged-model",
tokenizer,
save_method="merged_16bit"
)
4.2 部署选项
本地推理(Ollama):
bash
转换为 GGUF 格式
python llama.cpp/convert.py merged-model --outtype f16
导入 Ollama
ollama create my-model -f Modelfile
云端 API(Together AI / Fireworks AI): 这两个平台支持上传自定义模型并提供 OpenAI 兼容 API,适合生产部署。
延伸阅读
相关工具
UnslothLangChainOllamaQwen2.5Python