从零开始用 Python + Ollama 玩转 LLM 微调
想知道怎么让 AI 模型真正为你所用吗?我来分享一下我是怎么从一个一脸懵的新手,在一个周末变成微调大神的!
想知道怎么让 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. 创建新 notebook
-
2. 运行时 → 更改运行时类型 → T4 GPU(如果 T4 不可用,选 V100 或 P100)
-
3. 上传你的 JSON 数据集
-
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. 安装 Ollama:访问 ollama.com,下载适合你操作系统的版本
-
2. 创建模型目录:
cd ~/Downloads
mkdir my-fine-tuned-model
mv unsloth.Q4_K_M.gguf my-fine-tuned-model/
cd my-fine-tuned-model
-
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."
-
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大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方二维码,免费领取

更多推荐



所有评论(0)