Ollama 和 Python 打造高效极简工作流

简介: 本文教你如何利用Ollama和Python工具,仅用消费级GPU或CPU,在一小时内完成大模型的个性化微调。从准备数据、转换格式到训练测试,手把手带你打造懂专业、仿风格的专属模型。

你是否曾经希望那些强大的开源大模型能更贴合你的专业领域,或者学会模仿你的行文风格?其实,实现这个目标的关键就在于“微调”。曾几何时,微调模型是大公司的专属游戏——动不动就需要几十张GPU和复杂的分布式训练技术。

而现在,借助 Ollama 和丰富的 Python 工具链,一切都变得简单多了。只需要一张消费级显卡,甚至直接用CPU,用不了一个小时,你就能亲手微调出属于自己的模型——这篇文章就会带你一步步实现它。

准备工作:安装核心工具

在开始之前,我们需要准备好两样核心工具:

  1. Ollama: 用于本地拉取、运行和管理大模型。
  2. Python 环境: 用于准备微调数据和执行微调脚本。

步骤一:安装 Ollama访问 Ollama 官网 (https://ollama.com),根据你的操作系统 (Windows/macOS/Linux) 下载并安装。安装完成后,打开终端/命令提示符,拉取一个我们要微调的基础模型,例如小巧高效的 Llama 2

ollama pull llama2

步骤二:创建 Python 环境并安装库创建一个新的项目目录,然后建立一个 Python 虚拟环境(推荐),并安装必要的库。

# 创建项目目录
mkdir ollama-finetune-tutorial
cd ollama-finetune-tutorial

# 创建虚拟环境 (可选但推荐)
python -m venv .venv
# 激活虚拟环境
# On Windows: .venv\Scripts\activate
# On macOS/Linux: source .venv/bin/activate

# 安装核心库
pip install transformers datasets peft huggingface_hub
# 用于后续格式转换和推送
pip install ollama

第一步:准备微调数据

微调的成功很大程度上取决于数据。数据不需要多,但需要“精”和“相关”。我们以“让模型学会用莎士比亚的风格写作”为例。

创建一个名为 data.jsonl 的文件,每行是一个 JSON 对象,包含 prompt(指令)和 completion(期望的回复)。

{"prompt": "Write a poem about the sun:", "completion": "Hark! The golden eye of heaven doth rise,"}
{"prompt": "What is love?", "completion": "Love is a smoke made with the fume of sighs,"}
{"prompt": "Describe the sea.", "completion": "The vasty deep, a restless field of salt and sorrow,"}

提示:对于实际任务,你可以准备问答对、指令-回复对,或者任何你希望模型学习的文本格式。数据量从几十条到几千条均可。

第二步:转换数据格式

Ollama 的微调需要一种特定的格式。我们需要将上面的 data.jsonl 转换为一个 .parquet 文件。创建一个名为 convert_to_parquet.py 的脚本:

import json
import pandas as pd
from datasets import Dataset

# 读取我们准备的 jsonl 文件
data = []
with open('data.jsonl', 'r') as f:
   for line in f:
       data.append(json.loads(line))

# 转换为 Hugging Face Dataset 格式
df = pd.DataFrame(data)
dataset = Dataset.from_pandas(df)

# 保存为 Parquet 格式,这是 Ollama 微调所需的
dataset.to_parquet('fine_tuning_data.parquet')

运行这个脚本:

python convert_to_parquet.py

现在你的目录下会生成一个 fine_tuning_data.parquet 文件。


第三步:执行微调!

这是最激动人心的一步。Ollama 的命令行工具直接支持微调。打开终端,确保你在项目根目录下,然后运行以下命令:

ollama create my-shakespeare-model -f Modelfile

这里的 my-shakespeare-model 是你自定义的新模型名字,Modelfile 是一个配置文件。我们需要先创建这个 Modelfile

创建一个名为 Modelfile 的文件(无后缀),内容如下:

FROM llama2 # 指定基础模型

TEMPLATE """[INST] {{ .Prompt }} [/INST] {{ .Response }} </s>""" # 使用与Llama2匹配的对话模板

PARAMETER stop "[INST]"
PARAMETER stop "[/INST]"

SYSTEM """You are William Shakespeare. Respond to all prompts in the style of the Bard of Avon."""

ADAPTER ./fine_tuning_data.parquet # 指向我们的微调数据

关键解释:

  • FROM: 指定从我们之前拉取的 llama2 模型开始微调。
  • TEMPLATE: 定义了模型如何理解输入和输出。这里的格式与 Llama 2 的指令格式保持一致。
  • SYSTEM: 给模型一个系统级别的角色设定。
  • ADAPTER: 这是核心,它告诉 Ollama 使用我们准备好的 fine_tuning_data.parquet 文件来进行微调。

现在,再次运行微调命令:

ollama create my-shakespeare-model -f Modelfile

终端会开始输出日志。你会看到模型正在被训练。这个过程的速度取决于你的数据大小和电脑硬件(GPU/CPU)。对于示例中的几条数据,几乎是瞬间完成的。


第四步:测试你的微调模型

微调完成后,你就可以像使用任何其他 Ollama 模型一样使用它了!

在终端中直接运行:

ollama run my-shakespeare-model
>>> Write a poem about Python code.

或者,用 Python 代码来调用:

import requests
import json

# 设置 Ollama 服务器的本地 API 地址
url = 'http://localhost:11434/api/generate'

# 准备请求数据
data = {
   "model": "my-shakespeare-model", # 使用你刚创建的模型名
   "prompt": "What is the meaning of life?",
   "stream": False
}

# 发送 POST 请求
response = requests.post(url, json=data)

# 解析并打印结果
result = response.json()
print(result['response'])

预期效果: 此时,模型回答“生命的意义是什么?”这个问题时,不再是用它原本的风格,而是会尝试模仿莎士比亚的戏剧性、诗歌化的语言风格。



总结与进阶

恭喜!你已经成功完成了第一次 LLM 微调。这个过程的核心流程可以总结为:

  1. 准备数据 -> 2. 转换格式 -> 3. 编写 Modelfile -> 4. 执行 ollama create

下一步你可以尝试:

  • 领域知识微调:准备你所在行业(如法律、医疗、编程)的问答数据,打造一个专业顾问。
  • 风格模仿:提供大量某个作家或你自己的写作样本,让模型学会这种文风。
  • 使用更多数据:尝试更大的数据集,体验模型能力更显著的变化。
  • 调整参数:在 Modelfile 中,你还可以添加 PARAMETER num_epochs 10 这样的语句来控制训练轮数,可能会获得更好的效果(但也要小心过拟合)。

微调不再遥不可及。借助 Ollama 和 Python,每个人都可以轻松地打造出更贴心、更专业的专属大语言模型。现在,就快去用你的数据创造独一无二的AI吧!


相关文章
|
7天前
|
人工智能 运维 安全
|
5天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
604 21
|
12天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
969 110
|
6天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。