简介

本文详细介绍了如何使用Python微调大型语言模型(LLM)并借助Ollama在本地运行。文章首先解释了LLM微调的基本概念和工作原理,然后提供了完整的实操流程,包括数据收集、环境配置、模型加载、LoRA适配器添加、模型训练、测试推理及GGUF格式导出等步骤。通过使用Unsloth工具和Google Colab免费GPU,即使没有高端硬件也能完成微调。最后还分享了最佳实践、常见问题解决方案和伦理考量,帮助读者打造满足特定需求的定制化AI模型。


作为一名对 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"}


一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

什么时候需要微调 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 torchprint(torch.cuda.is_available())  # 应该输出:Trueprint(torch.cuda.get_device_name(0))  # 比如 Tesla T4
步骤 3:加载模型

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

代码:

from unsloth import FastLanguageModelmodel_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 jsonfrom 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 SFTTrainerfrom transformers import TrainingArgumentstrainer = 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 ~/Downloadsmkdir ollama-testmv unsloth.Q4_K_M.gguf ollama-test/cd ollama-testtouch Modelfilenano Modelfile  # 粘贴以下内容

Modelfile 内容:

FROM ./unsloth.Q4_K_M.ggufPARAMETER temperature 0.8PARAMETER top_p 0.9PARAMETER 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的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

在这里插入图片描述

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

02.大模型 AI 学习和面试资料

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐