从 Python 到 Ollama:将微调后的 Llama-3/Qwen 一键导出为 GGUF

从 Python 到 Ollama:将微调后的 Llama-3/Qwen 一键导出为 GGUF

摘要 :在上一篇教程中,我们在 RTX 3090 上成功微调了 Llama-3。但现在的模型还"躺"在 Python 脚本里,不够通用。本文将教你如何利用 Unsloth 强大的导出功能,将微调后的模型转换为 GGUF 格式 ,并导入到 Ollama 中。这样,你就可以在终端、Obsidian 插件或任何支持 Ollama 的工具中随时调用你的专属模型了!

关键词 :Unsloth GGUF Ollama 模型导出 量化


0. 为什么要做这一步?

微调后的模型通常是以 LoRA Adapter (适配器) 的形式存在的(文件夹里只有几百 MB)。要让它像一个独立模型一样运行(比如发给朋友,或者在没有 Python 环境的电脑上跑),我们需要做两件事:

  1. 合并 (Merge):把 LoRA 的"补丁"打回到 Base Model(底座)上。
  2. 量化与导出 (Quantize & Export) :转换为 llama.cpp 生态通用的 GGUF 格式,通常使用 4bit (q4_k_m) 量化以平衡体积和性能。

好消息 :Unsloth 框架原生支持这一步,只需几行代码,不需要 复杂的 make 编译 llama.cpp 过程。


1. 环境确认

确保你处于我们之前的 Conda 环境中:

bash 复制代码
conda activate llm_learn

2. 编写导出脚本

在工作目录下新建 export_to_ollama.py。

我们将以 Llama-3-8B 为例(Qwen 同理,只需改路径)。

python 复制代码
from unsloth import FastLanguageModel
import torch

# 1. 加载微调后的模型
# 这里的路径是我们上一篇教程保存 LoRA 的目录
lora_model_path = "lora_model_llama3" 
print(f" 正在加载 LoRA 模型: {lora_model_path}...")

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = lora_model_path,
    max_seq_length = 2048,
    dtype = None,
    load_in_4bit = True,
)

# 2. 执行导出
# Unsloth 会自动处理合并、转换和量化
# 导出为 q4_k_m (推荐,平衡速度和精度)
print(" 正在合并并导出为 GGUF (q4_k_m)... 这可能需要几分钟...")

model.save_pretrained_gguf(
    "model_export", # 导出文件的存放目录
    tokenizer,
    quantization_method = "q4_k_m",
)

print(" 导出完成!文件位于 model_export 目录下。")

3. 执行导出

运行脚本:

bash 复制代码
python export_to_ollama.py

执行过程解析:

  1. 脚本会加载底座模型和你的 LoRA 权重。
  2. 自动下载必要的转换工具(如果是第一次运行)。
  3. 开始转换...(RTX 3090 上大约需要 3-5 分钟)。
  4. 最终在 model_export 目录下生成一个约 5GB 的 .gguf 文件(文件名通常包含 unsloth 和 q4_k_m 字样)。

4. 导入 Ollama

假设你已经安装了 Ollama(如果没有,请运行 curl -fsSL https://ollama.com/install.sh | sh)。

4.1 创建 Modelfile

在 model_export 目录下创建一个名为 Modelfile 的文件:

dockerfile 复制代码
# 这里的路径要替换成你实际生成的 gguf 文件名
FROM ./unsloth.Q4_K_M.gguf

# 设置系统提示词 (System Prompt)
SYSTEM """
你是由 Soar 微调的 Llama-3 中文助手。请务必使用中文回答用户的问题。
"""

# 设置参数 (可选)
PARAMETER temperature 0.3
PARAMETER num_ctx 4096

4.2 导入模型

在终端中运行:

bash 复制代码
cd model_export
ollama create my-llama3-cn -f Modelfile

等待进度条跑完,显示 success 即大功告成!


5. 见证奇迹

现在,你可以随时随地在终端呼叫你的模型了:

bash 复制代码
ollama run my-llama3-cn

测试输入:

"Who are you?"

预期输出:

"我是由开发者在 RTX 3090 上微调的 Llama-3 中文助手..."

恭喜!你已经完成了从模型训练 到模型产品化的完整闭环。

相关推荐
羲云网络2 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
张张123y2 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
冻柠檬飞冰走茶5 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划
FRing035 小时前
vue2干货总结7(自定义指令、插槽、单页应用程序、路由的使用(VueRouter))
开发语言·前端·vue.js·vue2
橙橙笔记5 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
雪落漂泊5 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
小小张说故事5 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
波力海苔夹心脆6756 小时前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
不会算法的笨小孩7 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
天天被压力7 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python