
配套视频:https://www.bilibili.com/video/BV1VS1qBCEQr/
一、什么是微调(Fine-tuning)
1.1 核心概念
微调就是拿一个预训练的语言模型,教会它更擅长处理你的特定任务。这就像聘请一位经验丰富的厨师,然后培训他们掌握你餐厅的专属菜谱——你不必从头教人做菜。
关键区别:
从头训练:需要数百万样本和数月时间
微调:只需数千甚至数百个样本,训练几分钟或几小时
参数调优:仅调整temperature、top_k等参数(就像调节汽车收音机)
微调:真正教会模型新技能(就像教汽车驾驶新路线)
1.2 工作原理
无需从零训练模型,而是基于类似GPT或Claude这类已懂人类语言的模型,再输入你的特定用例数据。模型会据此调整现有知识,以精通你的特定领域。
二、何时需要微调
场景1:需要一致的格式或风格
当你需要模型输出特定格式(如JSON结构),而仅靠提示词无法稳定实现时。
场景2:拥有领域特定数据
你有大量模型从未见过的专业数据,例如:
医疗病历记录
法律文件
客服对话记录
行业专属信息
场景3:降低成本
使用更小的专用模型替代庞大的通用模型,降低运行成本。
微调的优势
✅ 无需从零开始训练
✅ 所需数据量少得多
✅ 计算资源需求低
✅ 训练时间短
⚠️ 重要提醒
微调会使模型在通用任务上表现变差,但在你的特定任务上大幅提升。这是一个权衡取舍。
三、数据准备:成败的关键
3.1 数据质量至关重要
如果数据不好,结果就会很差。 这是整个流程中最关键的一步,务必认真对待。
3.2 数据格式
本教程使用的示例数据集:
任务类型:HTML信息提取
样本数量:500个
数据格式:JSON文件,包含输入-输出对
{
  "input": "<div><h2>产品名称</h2><span class='price'>$99</span>...</div>",
  "output": {
    "name": "产品名称",
    "price": "$99",
    "category": "电子产品",
    "manufacturer": "品牌名"
  }
}3.3 数据要求
提供示例提示(输入)
提供期望的答案(输出)
可以是任何类型的数据:客服对话、医疗报告、文档等
输入和输出应该是字符串格式
四、工具准备
4.1 Unsloth
开源免费的微调框架
训练速度极快
支持大多数开源模型(Llama 3.1、Mistral、Mixtral等)
4.2 Google Colab
免费的在线代码环境
提供免费GPU(T4)
无需本地高端显卡
为什么选择Colab?
除非你有强大的GPU(如RTX 4080/4090),否则本地训练会非常慢。Colab提供免费的高端GPU,让训练过程快速完成。
4.3 Ollama
用于在本地运行微调后的模型。
五、微调实操流程
Step 1: 打开Google Colab笔记本
访问提供的Colab笔记本链接
点击"连接"按钮,连接到T4 GPU运行时
验证GPU连接:点击右上角查看可用资源
检查运行时类型:
运行时 → 更改运行时类型
确保选择:T4 GPU + Python 3
Step 2: 上传训练数据
点击左侧"文件"按钮
点击"上传"图标
选择你的JSON数据集文件
运行加载数据的代码单元
import json
# 加载数据集
with open('json_extraction_dataset_500.json', 'r') as f:
    data = json.load(f)
# 查看第一个样本
print(data[0])Step 3: 安装依赖
运行安装命令(需要1-2分钟):
!pip uninstall unsloth -y
!pip install unsloth重要:安装完成后,需要重启运行时才能使用新安装的版本。点击"重启会话"按钮。
Step 4: GPU检测
重启后,运行GPU检测代码:
import torch
print(f"CUDA可用: {torch.cuda.is_available()}")
print(f"GPU设备: {torch.cuda.get_device_name(0)}")应该看到:
CUDA可用: True
GPU设备: Tesla T4
Step 5: 选择并加载模型
from unsloth import FastLanguageModel
model_name = "unsloth/Phi-3-mini-4k-instruct"
max_seq_length = 2048
dtype = None  # 自动检测
load_in_4bit = True  # 使用4位量化
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_name,
    max_seq_length=max_seq_length,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
)模型选择说明:
本教程使用Phi-3 Mini(小型模型,训练快)
可以选择其他模型:Llama 3.1、Mistral等
模型越大,效果越好,但训练时间越长
Step 6: 数据预处理
创建格式化函数,将输入-输出对转换为单一字符串:
def format_prompt(example):
    input_text = example['input']
    output_text = json.dumps(example['output'])  # 将JSON对象转为字符串
    
    prompt = f"""输入: {input_text}
输出: {output_text}<|end_of_text|>"""
    
    return prompt
# 格式化所有数据
formatted_data = [format_prompt(item) for item in data]
# 创建数据集
from datasets import Dataset
dataset = Dataset.from_dict({"text": formatted_data})Step 7: 添加LoRA适配器
LoRA(Low-Rank Adaptation)是一种高效的微调方法,它在模型中添加少量可训练层:
model = FastLanguageModel.get_peft_model(
    model,
    r=16,  # LoRA秩
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_alpha=16,
    lora_dropout=0,
    bias="none",
    use_gradient_checkpointing=True,
)参数说明:
可以右键点击代码 → "用Gemini解释代码"获取详细说明
大多数情况下使用默认参数即可
Step 8: 配置训练器
from trl import SFTTrainer
from transformers import TrainingArguments
trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset,
    dataset_text_field="text",
    max_seq_length=max_seq_length,
    args=TrainingArguments(
        per_device_train_batch_size=2,
        gradient_accumulation_steps=4,
        warmup_steps=5,
        max_steps=60,
        learning_rate=2e-4,
        fp16=True,
        logging_steps=1,
        output_dir="outputs",
    ),
)Step 9: 开始训练
trainer.train()训练时间:
本示例:约10分钟
取决于样本数量和模型大小
可以看到实时进度条
Step 10: 测试模型
训练完成后,在下载前先测试效果:
# 设置推理模式
FastLanguageModel.for_inference(model)
# 准备测试消息
messages = [
    {"role": "user", "content": "你的测试HTML代码..."}
]
# 格式化输入
inputs = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt",
).to("cuda")
# 生成输出
outputs = model.generate(
    input_ids=inputs,
    max_new_tokens=256,
    temperature=0.7,
)
# 解码结果
result = tokenizer.decode(outputs[0])
print(result)验证输出格式是否符合预期。
六、导出模型
Step 11: 保存为GGUF格式
GGUF是Ollama使用的模型格式:
model.save_pretrained_gguf(
    "model",
    tokenizer,
    quantization_method="q4_k_m"
)注意:
这一步需要10-20分钟
会生成一个.gguf文件
文件较大,请耐心等待
Step 12: 下载到本地
运行下载单元格,文件会保存到你的下载文件夹:
from google.colab import files
files.download("model/unsloth.Q4_K_M.gguf")下载时间:
取决于网速
本示例总共约25分钟(生成+下载)
七、在Ollama中部署
Step 13: 准备模型文件
打开终端
验证Ollama已安装:
ollama --version进入下载文件夹:
cd ~/Downloads创建工作目录:
mkdir ollama-test && cd ollama-test将下载的.gguf文件移动到此目录
Step 14: 创建Modelfile
touch Modelfile
nano Modelfile在Modelfile中输入以下内容:
FROM ./unsloth.Q4_K_M.gguf
PARAMETER temperature 0.7
PARAMETER top_p 0.9
PARAMETER stop "<|end_of_text|>"
TEMPLATE """{{ if .System }}系统: {{ .System }}{{ end }}
用户: {{ .Prompt }}
助手: """
SYSTEM """你是一个有用的AI助手。"""Modelfile说明:
FROM:指向本地模型文件PARAMETER:设置生成参数TEMPLATE:定义对话格式SYSTEM:系统提示词
保存:Ctrl+X → Y → Enter
Step 15: 创建Ollama模型
ollama create html-model -f Modelfile验证创建成功:
ollama list应该能看到html-model出现在列表中。
Step 16: 运行模型
ollama run html-model现在可以输入测试提示,查看模型输出!
八、测试与评估
测试示例
从数据集中复制一个HTML示例,粘贴到Ollama命令行中:
>>> 提取以下HTML中的信息:<div><h2>笔记本电脑</h2>...预期结果
模型应该输出格式化的JSON:
{
  "name": "笔记本电脑",
  "price": "$999",
  "category": "电子产品",
  "manufacturer": "某品牌"
}注意事项
由于使用了较小的模型和有限的数据集,效果可能不完美
更多样本和更大的模型会带来更好的结果
可以多次测试不同的输入
九、优化建议
9.1 提升效果的方法
增加训练样本
500个样本 → 2000-5000个样本
样本质量比数量更重要
使用更大的模型
Phi-3 Mini → Llama 3.1 8B
或 Mistral 7B
调整训练参数
增加训练步数(max_steps)
调整学习率(learning_rate)
尝试不同的batch size
改进数据质量
确保输入-输出对准确
覆盖更多边缘情况
保持格式一致性
9.2 常见问题
Q: 训练时间太长怎么办?
A: 使用Google Colab Pro获得更好的GPU,或减少样本数量。
Q: 模型输出不稳定?
A: 增加训练样本,调低temperature参数。
Q: 内存不足错误?
A: 减小batch size或使用更小的模型。
十、总结
完整流程回顾
✅ 准备高质量的输入-输出数据集
✅ 在Google Colab上配置环境
✅ 选择合适的基础模型
✅ 预处理数据并添加LoRA适配器
✅ 执行训练(约10分钟)
✅ 测试模型效果
✅ 导出为GGUF格式
✅ 在Ollama中部署
✅ 本地运行和测试
关键要点
数据质量决定一切:垃圾进,垃圾出
从小开始:先用小模型和少量数据验证流程
迭代优化:根据测试结果不断改进
成本效益:微调比从头训练便宜得多
适用场景
✅ 特定格式输出(JSON、XML等)
✅ 领域专业知识(医疗、法律、金融)
✅ 企业内部数据处理
✅ 客服自动化
✅ 文档信息提取
下一步
尝试不同的模型和参数
扩大训练数据集
集成到Python应用中
探索更高级的微调技术
资源链接:
Google Colab笔记本:见视频描述
示例数据集下载:见视频描述
Unsloth文档:查看官方GitHub
Ollama文档:ollama.ai
现在你已经掌握了从零到部署的完整LLM微调流程,开始创建你自己的专属AI模型吧!🚀
如果这篇文章对你有帮助,欢迎点赞、收藏、转发。也欢迎在评论区分享你的经验,我们一起交流学习!
我是 dtsola【IT解决方案架构师 | AI创业者】 ;专注AI创业、商业、技术、心理学、哲学内容分享。
提供服务:AI项目咨询 | 技术解决方案 | IT项目实施 | 企业技术顾问
博客:https://www.dtsola.com
公众号&VX:dtsola
需提供服务,加微信 dtsola,备注:IT咨询,并说明来意。
#独立开发者 #AI编程 #AI创业 #微调 #LLM #大模型 #独立开发 #AI工具 #效率工具 #生产力