作为一名对 AI 和机器学习充满热情的人,我花了不少时间研究怎么让强大的语言模型更好地完成特定任务。今天,我想分享一份详细的指南,教你如何用 Python 微调 LLM(大型语言模型),然后用 Ollama 这个工具在本地运行微调后的模型。这份指南基于我看到的一个实际操作教程,但我会加上详细的解释和例子,让它更全面、更适合新手

在这里插入图片描述

什么是 LLM 微调?

想象一下,你请了个世界级大厨,他啥菜都会做,但还得学会你家的独门菜谱。你不用从头教他做饭,只需要给他看几道你的菜就行。这就是微调!

微调是拿一个已经预训练好的 LLM(比如 GPT 或 Llama),它已经很懂得通用语言了,然后针对你的特定任务“调校”一下。你给它喂一些你领域的例子,它就会调整自己的知识,专门为这个领域发光发热。

它咋工作的?
从一个懂得英语(或其他语言)的 base model 开始,给它一堆“输入”(比如一个问题)和“输出”(比如完美答案)的配对。模型会调整内部 weights 来匹配这些例子。
跟 prompting 的区别?
Prompting 就像临时给指令(比如“写得像莎士比亚”),而微调是永久改变模型,让它表现更稳定。
跟 parameter tuning 的区别?
Parameter tuning 是调整像“temperature”(输出多有创意)这样的设置,就像调车上的收音机。微调则是给引擎升级,让它能跑越野。

举个例子:
假设你想让 LLM 从乱糟糟的邮件里提取信息。
没微调前:
Prompt: “从‘嗨,我是 John。订个披萨。’中提取名字和订单。”
输出:可能很随机,比如“Name: John, Food: Pizza”或者只是个总结。
微调后:
用 100 封邮件例子训练。现在它总会输出 JSON 格式:{"name": "John", "order": "pizza"}

在这里插入图片描述

在这里插入图片描述

什么时候需要微调 LLM?

别啥都微调,这就像买跑车去买菜,得看情况用:

  • 需要一致的格式/风格: Prompting 搞不定严格的输出,比如 JSON 或法律文档。
  • 领域专属数据: 模型没见过你的小众领域(比如医学术语或公司日志)。
  • 省钱: 用一个小的、微调过的模型,替代像 GPT-4 这样的大模型。

优点和缺点:

微调的替代方案:

  • Prompt Engineering: 快又免费,但不稳定。
  • Retrieval-Augmented Generation (RAG): 实时加外部数据(比如先搜文档再回答)。
  • 从头训练: 只有像 OpenAI 这样的大公司才玩得起,需要海量数据和算力。

微调 LLM 的完整步骤

下面是全流程。我们会用 Unsloth(一个免费、开源、快速微调工具)和 Google Colab(免费的云端 GPU,不用高端硬件)。Base model 用 Phi-3 Mini(又小又快)。

流程图:

步骤 1:收集数据

这步很关键,垃圾数据 = 垃圾模型。需要 JSON 格式的输入-输出配对。

示例数据集(用于 HTML 提取,比如从网页代码里提取产品信息):
文件: extraction_dataset.json
内容(简化版,500 个例子中的 2 个):

[
{
"input":"<div><h2>Product: Laptop</h2><p>Price: $999</p><span>Category: Electronics</span><span>Manufacturer: Dell</span></div>",
"output":{"name":"Laptop","price":"$999","category":"Electronics","manufacturer":"Dell"}
},
{
"input":"<div><h2>Product: Book</h2><p>Price: $20</p><span>Category: Literature</span><span>Manufacturer: Penguin</span></div>",
"output":{"name":"Book","price":"$20","category":"Literature","manufacturer":"Penguin"}
}
]

小贴士: 如果需要,可以用 AI 生成数据,但最好用真实数据,效果更佳。

步骤 2:设置环境

用 Google Colab 来用免费 GPU。

  • • 打开 Colab:去 colab.research.google.com
  • • 上传你的 JSON 文件。
  • • 连接 T4 GPU:Runtime > Change runtime type > T4 GPU。
  • • 安装依赖(在 Colab cell 里跑):
!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install --no-deps xformers "trl<0.9.0" peft accelerate bitsandbytes

输出: 安装包(大概 2 分钟)。如果提示,重启 runtime。

检查 GPU:

import torch
print(torch.cuda.is_available())  # 应该输出:True
print(torch.cuda.get_device_name(0))  # 比如 Tesla T4
步骤 3:加载模型

选一个 base model(比如 Phi-3 Mini)。

代码:

from unsloth import FastLanguageModel
model_name = "unsloth/Phi-3-mini-4k-instruct"
max_seq_length = 2048# 根据需要调整
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name,
    max_seq_length=max_seq_length,
    load_in_4bit=True
)

输出: 下载模型(小型模型大概 5-10 分钟)。

步骤 4:预处理数据

把输入格式化成单一字符串。

代码:

import json
from datasets import Dataset

# 加载数据
withopen("extraction_dataset.json", "r") as f:
    data = json.load(f)

# 格式化函数
defformat_prompt(item):
returnf"{item['input']}\n{json.dumps(item['output'])}<|endoftext|>"

# 创建格式化列表
formatted_data = [{"text": format_prompt(item)} for item in data]
dataset = Dataset.from_list(formatted_data)

# 打印示例
print(formatted_data[0]["text"])

输出示例:

<div><h2>Product: Laptop</h2><p>Price: $999</p><span>Category: Electronics</span><span>Manufacturer: Dell</span></div>
{"name": "Laptop", "price": "$999", "category": "Electronics", "manufacturer": "Dell"}<|endoftext|>
步骤 5:添加 LoRA Adapters

LoRA 让微调更高效(只训练一小部分)。

代码:

model = FastLanguageModel.get_peft_model(
    model,
    r=16,  # Rank
    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…”(很快)。

LoRA 是什么?
Low-Rank Adaptation:给模型加“侧挂”层,只训练 ~1% 的参数,省时间和内存。

步骤 6:训练模型

用 SFTTrainer 训练。

代码:

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",
        weight_decay=0.01,
        lr_scheduler_type="linear",
        seed=3407,
        output_dir="outputs",
    ),
)

trainer.train()

输出: 进度条显示 loss 下降(500 个例子大概 10 分钟)。

步骤 7:测试推理

跑个快速测试。

代码:

FastLanguageModel.for_inference(model)
messages = [{"role": "user", "content": "<div><h2>Product: Phone</h2><p>Price: $500</p><span>Category: Gadgets</span><span>Manufacturer: Apple</span></div>"}]
inputs = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt").to("cuda")
outputs = model.generate(inputs, max_new_tokens=256, use_cache=True)
print(tokenizer.batch_decode(outputs)[0])

输出:

User: <div><h2>Product: Phone</h2><p>Price: $500</p><span>Category: Gadgets</span><span>Manufacturer: Apple</span></div>
Assistant: {"name": "Phone", "price": "$500", "category": "Gadgets", "manufacturer": "Apple"}

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

步骤 8:导出到 GGUF 格式给 Ollama

保存成 Ollama 支持的格式。

代码:

model.save_pretrained_gguf("fine_tuned_model", tokenizer, quantization_method="q4_k_m")

然后下载:在 Colab 文件里右键 > 下载(10-20 分钟)。

步骤 9:为 Ollama 创建 Modelfile

安装 Ollama(去 ollama.com)。

在终端:

cd ~/Downloads
mkdir ollama-test
mv unsloth.Q4_K_M.gguf ollama-test/
cd ollama-test
touch Modelfile
nano Modelfile  # 粘贴以下内容

Modelfile 内容:

FROM ./unsloth.Q4_K_M.gguf
PARAMETER temperature 0.8
PARAMETER top_p 0.9
PARAMETER stop "<|endoftext|>"
TEMPLATE "{{ .Prompt }}"
SYSTEM "You are a helpful AI assistant."

创建模型:

ollama create html-extractor -f Modelfile

###¥ 步骤 10:在 Ollama 中运行

ollama run html-extractor

Prompt: 粘贴 HTML 示例。
输出: 提取的 JSON(本地运行,隐私安全!)。

最佳实践和常见问题

  • 数据质量: 用多样化的例子,防止 overfitting。
  • 评估: 用没见过的数据测试。
  • 扩展: 用更大的模型(比如 Llama 3.1)效果更好。
  • 常见问题: 数据集太小会导致“hallucinations”,多加数据!

微调的伦理问题

  • • 避免偏见数据(比如用多样化的数据源训练)。
  • • 隐私:用匿名数据进行微调。

总结

微调 LLM 就像给你的 AI 项目加了个超级技能,把通用工具变成专属专家!按照这篇指南的简单步骤——收集好数据、设置环境、用 Unsloth 训练、用 Ollama 部署,你就能打造出精准、一致的定制模型,满足你的独特任务需求。不管是从 HTML 提取数据、写小众客服回复,还是解决领域专属难题,微调让新手也能轻松上手!

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
在这里插入图片描述

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
在这里插入图片描述

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

图片

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01 教学内容

图片

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

image.png

vx扫描下方二维码即可
在这里插入图片描述

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03 入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:
图片

04 视频和书籍PDF合集

图片

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

图片

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
图片

05 行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!
图片

06 90+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)图片
在这里插入图片描述

07 deepseek部署包+技巧大全

在这里插入图片描述

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐