想知道怎么让 AI 模型真正为你所用吗?我来分享一下我是怎么从一个一脸懵的新手,在一个周末变成微调大神的!

图片

改变一切的“啊哈!”时刻 💡

想象一下:你想让 ChatGPT 从一堆乱七八糟的 HTML 里提取产品信息,但每次它给你的格式都不一样。有时候是一段话,有时候是项目符号列表,有时候它干脆“忘了”一半数据。听起来是不是很熟悉?

这就是三个月前的我,直到我发现了微调的魔法。相信我,一旦你搞定这个,你再也不会在 prompt 里苦苦哀求 AI 模型“拜托保持一致”了。

微调到底是什么?(厨师类比) 👨‍🍳

这么想吧:你雇了 Gordon Ramsay(他啥都会做,厨艺超棒),但你需要他学会你奶奶的独家意面秘方。你不用从头教他做饭,只需要给他看 100 份完美菜品的例子。

这就是微调!

  • • Base model = Gordon Ramsay 的通用厨艺

  • • Your training data = 奶奶的菜谱例子

  • • Fine-tuned model = Gordon 现在每次都能做出完美的意面

什么时候需要微调? 🤔

别啥都微调!这就像买辆法拉利去买菜。以下是微调有意义的场景:

  • • 需要严格的格式 — JSON 输出、法律文件、结构化数据

  • • 特定领域的术语 — 医疗报告、法律文件、公司特定术语

  • • 成本优化 — 使用更小、更专用的模型,而不是昂贵的 GPT-4 调用

  • • 隐私顾虑 — 在你自己的服务器上保存敏感数据

快速现实检查:先试试其他方法! ⚡

在开始微调之前,先试试这些:

  • • Prompt engineering(免费,但不稳定)

  • • RAG (Retrieval-Augmented Generation)(即时添加上下文)

  • • Few-shot prompting(在 prompt 里给例子)

如果这些都不行,那就该微调了!

完整的逐步指南 📋

好了,卷起袖子干活吧!我们会用到:

  • • Unsloth(让微调速度快 2 倍,还免费!)

  • • Google Colab(免费 GPU,不需要高端硬件)

  • • Phi-3 Mini(小而强大的基础模型)

    图片

步骤 1:收集你的黄金数据集 📊

这可是成败的关键。数据烂,模型就烂,没得商量。

你需要 JSON 格式的输入-输出对。我的 HTML 提取数据看起来是这样的:

[
  {
    "input":"<div><h2>Product: Gaming Laptop</h2><p>Price: $1299</p><span>Category: Electronics</span><span>Brand: ASUS</span></div>",
    "output":{"name":"Gaming Laptop","price":"$1299","category":"Electronics","brand":"ASUS"}
},
{
    "input":"<div><h2>Product: Coffee Mug</h2><p>Price: $15</p><span>Category: Kitchen</span><span>Brand: Starbucks</span></div>",
    "output":{"name":"Coffee Mug","price":"$15","category":"Kitchen","brand":"Starbucks"}
}
]

Pro tip:先用 20-30 个例子快速测试,然后扩展到 100-500 个以达到生产质量!

步骤 2:设置你的免费 GPU 动力源 ⚡

打开 Google Colab,按照以下步骤操作:

  1. 1. 创建新 notebook

  2. 2. 运行时 → 更改运行时类型 → T4 GPU(如果 T4 不可用,选 V100 或 P100)

  3. 3. 上传你的 JSON 数据集

  4. 4. 安装魔法材料:

# 这大概需要 2 分钟,泡杯咖啡吧! ☕
!pip install unsloth
# 如果需要最新功能,可以用这个:
# !pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
!pip install --no-deps trl peft accelerate bitsandbytes transformers datasets

验证 GPU 设置:

import torch
print(f"GPU Available: {torch.cuda.is_available()}")  
print(f"GPU Name: {torch.cuda.get_device_name(0)}")
# 应该显示:Tesla T4 或类似型号
步骤 3:加载你的基础模型 🤖

是时候唤醒我们的 AI 小助手了:

from unsloth import FastLanguageModel

model_name = "unsloth/phi-3-mini-4k-instruct-bnb-4bit"
max_seq_length = 2048  # 根据你的数据长度调整
dtype = None  # 自动检测。Tesla T4, V100 用 Float16,Ampere+ 用 Bfloat16
load_in_4bit = True  # 使用 4bit 量化减少内存占用
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_name,
    max_seq_length=max_seq_length,
    dtype=dtype,
    load_in_4bit=load_in_4bit,
)

这会下载模型(5-10 分钟)。正好去吃个小点心! 🍪

步骤 4:把你的数据变成 AI 的“食物” 🍽️
import json
from datasets import Dataset

# 加载你的数据集
withopen("your_dataset.json", "r") as f:
    data = json.load(f)
# 使用聊天模板格式化数据
defformat_chat_template(item):
    return tokenizer.apply_chat_template(
        [
            {"role": "user", "content": item['input']},
            {"role": "assistant", "content": json.dumps(item['output'])}
        ],
        tokenize=False,
        add_generation_prompt=False
    )
# 创建训练数据集
formatted_data = [{"text": format_chat_template(item)} for item in data]
dataset = Dataset.from_list(formatted_data)
# 检查数据样子
print("Sample training example:")
print(formatted_data[0]["text"])
步骤 5:添加 LoRA 魔法 ✨

LoRA (Low-Rank Adaptation) 是让微调高效的秘诀。我们不用重新训练整个模型,只加一些小的“适配器”层:

model = FastLanguageModel.get_peft_model(
    model,
    r=16,  # 秩 - 越高参数越多
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", 
                   "gate_proj", "up_proj", "down_proj"],
    lora_alpha=16,
    lora_dropout=0,
    bias="none",
    use_gradient_checkpointing="unsloth",
    random_state=3407
)

你会看到:“Unsloth: Patched 32 layers with LoRA...” - 这就是成功! 🎉

步骤 6:训练你的定制 AI 🏋️‍♂️

魔法时刻来了:

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=not torch.cuda.is_bf16_supported(),
        bf16=torch.cuda.is_bf16_supported(),
        logging_steps=1,
        optim="adamw_8bit",  # 如果优化器报错,换成 "adamw_torch"
        weight_decay=0.01,
        lr_scheduler_type="linear",
        seed=3407,
        output_dir="outputs",
        save_steps=30,
    ),
)
# 开始训练! 🚀
trainer.train()

看着 loss 下降吧!越低越好。500 个例子大概需要 10-15 分钟。

步骤 7:测试你的成果 🧪

看看它是不是真的好使:

# 切换到推理模式
FastLanguageModel.for_inference(model)

# 测试输入
test_html = "<div><h2>Product: Wireless Headphones</h2><p>Price: $79</p><span>Category: Audio</span><span>Brand: Sony</span></div>"
# 使用聊天模板格式化输入
messages = [{"role": "user", "content": test_html}]
inputs = tokenizer.apply_chat_template(
    messages, 
    tokenize=True, 
    add_generation_prompt=True, 
    return_tensors="pt"
).to("cuda")
# 生成响应
with torch.no_grad():
    outputs = model.generate(
        input_ids=inputs, 
        max_new_tokens=256, 
        use_cache=True,
        temperature=0.1,  # 低 temperature = 更一致
        do_sample=True,
        pad_token_id=tokenizer.eos_token_id
    )
# 提取新生成的内容(不包括完整对话)
response = tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True)
print("Model output:")
print(response.strip())

预期输出:

{"name": "Wireless Headphones", "price": "$79", "category": "Audio", "brand": "Sony"}

如果结果不稳定,就多训练几步!

步骤 8:导出到 Ollama(本地运行!) 💻

这部分超激动人心 —— 在本地、私密地运行你的模型:

# 导出到 GGUF 格式(兼容 Ollama)- 这是 Unsloth 专用的!
model.save_pretrained_gguf(
    "fine_tuned_model", 
    tokenizer, 
    quantization_method="q4_k_m"  # 大小和质量的良好平衡
)

注意:这个 save_pretrained_gguf 函数是 Unsloth 专用的,普通 Hugging Face 模型不能用!

从 Colab 下载文件(右键 → 下载)。这需要 10-20 分钟。

步骤 9:设置 Ollama(你的本地 AI 服务器) 🏠
  1. 1. 安装 Ollama:访问 ollama.com,下载适合你操作系统的版本

  2. 2. 创建模型目录:

cd ~/Downloads
mkdir my-fine-tuned-model
mv unsloth.Q4_K_M.gguf my-fine-tuned-model/
cd my-fine-tuned-model
  1. 3. 创建 Modelfile:

touch Modelfile
nano Modelfile  # 或者用其他文本编辑器

Modelfile 内容

FROM ./unsloth.Q4_K_M.gguf
PARAMETER temperature 0.1
PARAMETER top_p 0.9
PARAMETER stop ["<|endoftext|>"]
TEMPLATE "{{ .Prompt }}"
SYSTEM "You are a specialized HTML data extraction assistant."
  1. 4. 创建你的 Ollama 模型:

ollama create html-extractor -f Modelfile
步骤 10:享受你的定制 AI! 🎉
ollama run html-extractor

现在粘贴任何 HTML,观看你的模型每次都能提取出完美、一致的 JSON —— 这就是微调的真正魔法!

专业小贴士,省你几小时! ⚡

  • • 从小开始:100 个例子 → 测试 → 如果需要再加

  • • 数据多样性:别只用相似例子,多样性防止过拟合

  • • 保存检查点:设置 save_steps=30,避免进度丢失

  • • 监控 loss:应该稳步下降,如果没有,检查数据

  • • Temperature 很重要:用 0.1-0.3 确保一致输出,0.7+ 适合创意输出

常见陷阱(从我的错误中吸取教训!) 😅

  • • 格式不一致 → 多训练几步或用更好的数据

  • • “幻觉” → 需要更多样化的例子

  • • 内存不足错误 → 减小 batch size 或序列长度

  • • 训练慢 → 用 Unsloth(速度提升 2 倍)并启用 bf16

  • • 模型在 Ollama 加载失败 → 检查 GGUF 文件是否损坏

下一步是什么? 🚀

现在你已经掌握了基础,这里有一些激动人心的方向:

  • • 尝试更大的模型:Llama 3.1 8B 效果更好

  • • 多任务训练:一个模型处理多个提取任务

  • • 高级技术:QLoRA、gradient checkpointing、自定义 loss 函数

  • • 部署:Docker 容器、API 端点、Web 界面

最终思考 💭

微调一开始感觉挺吓人,但一步步拆解后完全可控。最棒的部分?一旦你掌握了这个流程,你就能在一小时内为任何任务微调模型。

不管是提取数据、生成特定格式,还是打造领域专家,微调赋予你的超能力是任何 prompt engineering 都比不上的。

你会先微调什么?在下面留言吧 —— 我很想听听你的项目!

我们该怎样系统的去转行学习大模型 ?

很多想入行大模型的人苦于现在网上的大模型老课程老教材,学也不是不学也不是,基于此,我用做产品的心态来打磨这份大模型教程,深挖痛点并持续修改了近100余次后,终于把整个AI大模型的学习门槛,降到了最低!

您只需要听我讲,跟着我做即可,为了让学习的道路变得更简单,这份大模型教程已经给大家整理并打包,现在将这份 LLM大模型资料 分享出来: 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

一、大模型经典书籍(免费分享)

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

二、640套大模型报告(免费分享)

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)
在这里插入图片描述

三、大模型系列视频教程(免费分享)

在这里插入图片描述

四、2025最新大模型学习路线(免费分享)

我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代

L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调。

L5阶段:专题集丨特训篇 【录播课】

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方二维码,免费领取

Logo

一座年轻的奋斗人之城,一个温馨的开发者之家。在这里,代码改变人生,开发创造未来!

更多推荐