当前位置: 首页 > news >正文

Ollama + Python 极简工作流

你是否曾想过让强大的开源大模型(LLM)更懂你的专业领域,或者更能模仿你的写作风格?微调(Fine-Tuning)就是实现这一目标的钥匙。过去,微调是资源雄厚的大公司的专利,动辄需要数十张GPU和复杂的分布式训练知识。

但现在,感谢 Ollama 和 Python 生态的强大工具,这一切变得前所未有的简单。本文将手把手带你,用一个消费级GPU(甚至CPU!),在1小时内完成属于你自己的模型微调。

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

Ollama: 用于本地拉取、运行和管理大模型。
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 }} """ # 使用与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'])
预期效果: 此时,模型回答“生命的意义是什么?”这个问题时,不再是用它原本的风格,而是会尝试模仿莎士比亚的戏剧性、诗歌化的语言风格。

人工智能技术学习交流群

image

推荐学习

image

行业首个「知识图谱+测试开发」深度整合课程【人工智能测试开发训练营】,赠送智能体工具。提供企业级解决方案,人工智能的管理平台部署,实现智能化测试,落地大模型,实现从传统手工转向用AI和自动化来实现测试,提升效率和质量。

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

准备数据 -> 2. 转换格式 -> 3. 编写 Modelfile -> 4. 执行 ollama create
下一步你可以尝试:

领域知识微调:准备你所在行业(如法律、医疗、编程)的问答数据,打造一个专业顾问。
风格模仿:提供大量某个作家或你自己的写作样本,让模型学会这种文风。
使用更多数据:尝试更大的数据集,体验模型能力更显著的变化。
调整参数:在 Modelfile 中,你还可以添加 PARAMETER num_epochs 10 这样的语句来控制训练轮数,可能会获得更好的效果(但也要小心过拟合)。
微调不再遥不可及。借助 Ollama 和 Python,每个人都可以轻松地打造出更贴心、更专业的专属大语言模型。现在,就快去用你的数据创造独一无二的AI吧!

http://www.wxhsa.cn/company.asp?id=4706

相关文章:

  • 快速搞定Dify+Chrome MCP:打造能操作网页的AI助手
  • HCIP——RSTP
  • ORA-01555系列:三、ORA-01555总结与高级优化建议
  • Unstable Twin - TryHackMe
  • 单片机实现挡位调节
  • 完整教程:从 WildCard 野卡到 gptplus.plus:一次解决 OpenAI 支付难题的实战复盘,轻松搞定Gpt充值
  • 阿里 Qoder 新升级,Repo Wiki 支持共享、编辑和导出
  • 长城杯WriteUp
  • vite取别名@
  • JavaScript数据网格方案AG Grid 34.2 发布:更灵活的数据结构、更流畅的大数据交互与全新 UI 体验
  • BOE(京东方)IPC电竞嘉年华盛典圆满收官 第三届无畏杯总决赛引领电竞生态发展热潮
  • P1886 滑动窗口 /【模板】单调队列
  • kingbase金仓数据库docker部署完整步骤
  • glTF/glb功能、应用和 5 个基本最佳实践
  • AI 应用开发,不就是调个接口么?
  • 95.费解的开关
  • godot4人物移动一段距离后随机旋转代码,(死循环)
  • Spotify 音乐ML练习数据集含158 个特征,11
  • abc423
  • AI辅助分析HP DL360 GEN7 服务器安装USB3扩展卡
  • 最新药物数据集下载:来自Drugs
  • 【VPX361】基于3U VPX总线架构的XCZU47DR射频收发子模块
  • 自动驾驶ADAS数据集 13万张高清道路车辆识别图像 覆盖多场景智能交通应用 支持目标检测图像识别模型训练与AI视觉算法开发
  • Norwood-Hamilton男性脱发分级图像集|2400+张多角度高清头皮图像|涵盖7类脱发诊断标注|适用于AI诊断工具开发、皮肤科研究与植发产品研发|包含5角度标准化拍摄、支持秃顶早期检测
  • AI生成文本检测数据集:基于不平衡数据集(人类94% vs AI 6%)的高效机器学习模型训练,涵盖ChatGPT、Gemini等LLM生成内容
  • 400小时大规模南昌方言数据集助力方言保护、AI语音识别技术开发与文化传承研究,覆盖多样化场景与说话者,专业采集高质量音频与文本标注,支持深度学习、语音模型训练、方言教学工具及本地化智能语音交互应用
  • 350+张高清晰度冲积土、黑土、煤渣土、红土四类土壤类型图像资源 ,专为计算机视觉算法训练与地球科学研究设计,支持精准农业土壤识别、地质勘探辅助分析及环境监测应用,提升土壤分类模型准确性
  • 200 万份脑部 MRI 扫描 + 放射科报告数据集:DICOM 格式高分辨率影像,覆盖 50+ 脑部病理(脑肿瘤、神经退行性疾病、多发性硬化症等),支持 AI 病理识别 _ 分类 _ 分割
  • 30万份行业报告数据集:覆盖金融科技医疗能源等20+行业领域,2010-2024年完整时间跨度,提供高质量PDF和文本格式,支持深度学习模型训练、行业趋势分析、市场竞争研究、学术论文写作的多场景应用
  • 23,463张无人机和卫星图像高质量标注,覆盖20个类别包括港口船舶车辆飞机,支持YOLO和VOC格式,专为深度学习目标检测算法优化,训练集验证集均衡划分提升模型鲁棒性,填补小目标检测数据空白