目录

一、前置重要前提

✅ 1. 你训练 LoRA 后,手里到底有什么文件?

✅ 2. Ollama 的核心优势

二、核心前置知识:Ollama 部署的两种核心场景

✅ 场景一:「快速验证 / 测试」部署

✅ 场景二:「生产级正式」部署

三、必备前置准备

✅ 准备 1:安装好 Ollama

✅ 准备 2:本地有「完整的原始基座模型」+「训练好的 LoRA 文件」

✅ 准备 3:安装「模型合并必备工具」- HuggingFace Transformers + PEFT

四、场景一:快速验证部署

五、场景二:生产级正式部署

六、部署后的优化与避坑指南

七、最后的总结


训练完的 LoRA 微调模型,怎么基于 Ollama 部署上线、实际调用、生产可用。 Ollama 是最优解 —— 它是目前部署大模型最简单、最高效、最轻量化的工具,对新手友好、支持 GPU 加速、部署命令极简、还完美兼容我们训练的LoRA 微调模型完全不用写复杂的部署代码,和LoRA 训练无缝衔接,这也是企业 / 个人落地垂直领域模型的主流组合方案。

一、前置重要前提

先把「训练产出物 + Ollama 部署的核心关系」讲透,这是所有部署操作的基础,90% 的部署问题都源于这里没理清

✅ 1. 你训练 LoRA 后,手里到底有什么文件?

之前训练 LoRA,最终得到的不是「一个完整的新模型」,而是 2 类核心文件

原始基座模型:比如你微调的 qwen:7bllama2:7bbaichuan:7bchatglm3:6b (你本地 / 服务器里肯定有这个完整模型文件);

LoRA 微调适配器文件:训练后生成的小文件包,核心是 adapter_config.json + adapter_model.bin,大小只有 几 MB~ 几十 MB,这是你的「垂直领域知识包」(医疗 / 法律 / 金融专属)。

✅ 关键结论:LoRA 文件不能单独部署!必须和「原始基座模型」结合,才能生成「带垂直领域知识的完整模型」,LoRA 只是一个「插件」,原始模型是「主机」,插件必须装到主机上才能用。

✅ 2. Ollama 的核心优势

Ollama 尤其对垂直领域微调模型部署,优势拉满,对比 vLLM/TensorRT-LLM 这些框架:

✅ 部署命令极简,一行命令启动,无需配置复杂的推理框架、无需写 Python 代码;

✅ 自带GPU 显存优化,自动做 4/8bit 量化,24G 显存轻松跑 7B 模型,13B 模型也能流畅运行;✅ 原生支持API 调用 + 本地终端对话,部署后既能自己测试,也能对接业务系统(后端 / 前端);

✅ 完美兼容主流开源模型(Qwen、Llama2、百川、Phi3、Mistral 等),这些也是你做垂直领域微调的主流基座;

✅ 体积小、无冗余依赖,Linux/Windows/Mac 全平台支持,服务器 / 本地电脑都能部署;

✅ 支持自定义模型打包,能把「原始模型 + LoRA 微调包」打包成一个专属的 Ollama 模型文件,以后调用只需要一行命令,复用性极强。


二、核心前置知识:Ollama 部署的两种核心场景

我们训练完的 LoRA 微调模型,基于 Ollama 部署,分 2 个核心场景99% 的人只会用到这两种,从简单到复杂,场景 1 是新手首选,场景 2 是企业生产首选,你可以根据自己的需求选择,两个方案我都给你讲透、给完整实操命令:

✅ 场景一:「快速验证 / 测试」部署

✅ 适用人群:训练完模型后,快速验证微调效果、本地测试垂直领域问答是否准确、不需要长期部署、不需要对接业务系统;✅ 核心特点:无需合并模型、无需修改任何配置、直接加载「原始模型 + LoRA 文件」运行,命令极简、零配置、最快见效;✅ 缺点:只适合测试,不适合生产环境长期调用,重启后需要重新执行命令。

✅ 场景二:「生产级正式」部署

✅ 适用人群:验证效果没问题后,正式上线使用、需要长期稳定运行、需要对外提供 API 接口、对接业务系统(比如客服机器人、行业问答平台)、需要复用模型;✅ 核心特点:将原始模型 + LoRA 微调文件,永久合并打包成一个全新的 Ollama 专属模型(比如叫 medical-qwen:7b 医疗模型、law-llama2:7b 法律模型),合并后是一个独立的完整模型,部署 / 调用 / 迁移都极其方便;✅ 优点:生产环境首选,部署后永久可用,调用命令和原生 Ollama 模型完全一致,支持 GPU 加速、后台运行、开机自启,稳定性拉满。


三、必备前置准备

所有部署操作的前提,无门槛,所有人都能完成,缺一不可

✅ 准备 1:安装好 Ollama

到 Ollama 官方网站:https://ollama.com/ ,根据你的系统(Linux/Windows/Mac)下载安装包,一键安装即可,安装后在终端执行 ollama --version ,能输出版本号就是安装成功。

✅ 补充:Linux 服务器可以直接用命令安装:curl -fsSL https://ollama.com/install.sh | sh

✅ 准备 2:本地有「完整的原始基座模型」+「训练好的 LoRA 文件」

  • 原始基座模型:比如 qwen7b 的完整模型文件夹(里面有 config.jsonpytorch_model.bin 等文件);

  • LoRA 文件:训练后得到的文件夹,里面必须有 adapter_config.jsonadapter_model.bin 两个核心文件(其他文件可选);

  • 建议:把两个文件放到同一个目录,方便调用,比如 /root/models/ 下:

    • 原始模型路径:/root/models/qwen-7b-base

    • LoRA 文件路径:/root/models/qwen-7b-lora-medical(医疗领域的 LoRA 包)

✅ 准备 3:安装「模型合并必备工具」- HuggingFace Transformers + PEFT

LoRA 文件和原始模型的合并 / 加载,依赖 HuggingFace 的官方库,这是唯一需要安装的依赖,一行命令搞定,终端执行:

bash

运行

pip install transformers peft accelerate torch bitsandbytes -U

✅ 说明:这些库是大模型微调 / 部署的标配,你训练 LoRA 的时候大概率已经装过了,重复执行不会有问题。


四、场景一:快速验证部署

✅ 核心逻辑

这种方式的本质是:用 Ollama 加载原始模型,同时通过 PEFT 库「动态挂载」LoRA 微调文件不修改、不合并原始模型的任何文件,LoRA 的垂直领域知识会临时生效,关闭终端后挂载失效,非常适合快速测试微调效果

✅ 完整实操步骤(无任何坑,按顺序执行)

步骤 1:拉取 / 加载你的原始基座模型(和训练时一致)

首先用 Ollama 拉取你微调的同款基座模型,比如你用的是 Qwen-7B,终端执行:

bash

运行

# 拉取通义千问7B(国内垂直领域首选,中文效果最好)
ollama pull qwen:7b
# 如果是Llama2-7B,执行:ollama pull llama2:7b
# 如果是百川7B,执行:ollama pull baichuan:7b

✅ 补充:如果你的原始模型是本地下载的离线文件,不需要执行 pull,直接在 Ollama 的模型目录加载即可,后面场景二会讲。

步骤 2:编写「动态加载 LoRA」的启动脚本(核心,复制即用,无需修改)

新建一个 Python 文件,比如 ollama_lora_load.py直接复制下面的代码,只需要修改 2 个路径即可,其余代码完全不用动

python

运行

from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch

# ====================== 只需要修改这2个路径 ======================
LORA_MODEL_PATH = "/root/models/qwen-7b-lora-medical"  # 你的LoRA文件路径
BASE_MODEL_PATH = "qwen/qwen-7b-chat"  # 你的原始基座模型名称/本地路径
# =================================================================

# 1. 加载LoRA配置
peft_config = PeftConfig.from_pretrained(LORA_MODEL_PATH)
# 2. 加载原始基座模型和分词器
model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL_PATH,
    torch_dtype=torch.float16,
    device_map="auto",  # 自动分配GPU/CPU,优先用GPU
    load_in_8bit=True,  # 8bit量化,降低显存占用,24G显存足够
    trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL_PATH, trust_remote_code=True)
# 3. 核心:挂载LoRA适配器到原始模型上(动态加载,不合并文件)
model = PeftModel.from_pretrained(model, LORA_MODEL_PATH)
# 4. 启动对话管道,和Ollama原生对话逻辑一致
chat_pipeline = pipeline(
    "conversational",
    model=model,
    tokenizer=tokenizer,
    device_map="auto"
)

# 测试垂直领域问答(这里替换成你的行业问题)
print("✅ 垂直领域模型加载完成,开始对话(输入exit退出)")
while True:
    user_input = input("你:")
    if user_input == "exit":
        break
    conversation = [{"role": "user", "content": user_input}]
    result = chat_pipeline(conversation)
    print("模型:", result[-1]["content"])

步骤 3:启动脚本,验证垂直领域效果

终端执行脚本,一键启动:

bash

运行

python ollama_lora_load.py

启动后,输入你的垂直领域问题(比如医疗:高血压的一级预防措施有哪些?,法律:民间借贷合同的必备条款是什么?),模型会输出经过 LoRA 微调后的专业回答,对比原生模型的回答,能明显看到专业性提升,无幻觉、符合行业规范。

✅ 优点总结:这种方式最快、最简单、零配置,不用懂 Ollama 的底层配置,不用合并模型,适合快速验证微调是否有效,新手必用。


五、场景二:生产级正式部署

✅ 核心逻辑

这是你最需要掌握的核心部署方式,也是行业落地的标准流程,核心分为 2 步:

  1. 模型合并:将「原始基座模型」和「LoRA 微调文件」永久合并,生成一个全新的、完整的垂直领域模型文件(比如 medical-qwen-7b),合并后,这个新模型就是一个独立的模型,不再依赖任何 LoRA 文件和原始模型

  2. Ollama 打包部署:将合并后的完整模型,制作成 Ollama 专属的模型包(Modelfile),然后用 Ollama 一行命令打包、一行命令启动,启动后和 Ollama 原生的qwen:7bllama2:7b完全一样,支持终端对话、API 调用、后台运行、开机自启

✅ 关键优势:合并后,模型是独立的,你可以把这个模型包拷贝到任何服务器、任何电脑,只要装了 Ollama,就能一键启动,部署 / 迁移 / 复用成本为 0,这是生产环境的核心需求。

✅ 核心说明

为什么要合并?因为 LoRA 文件是「插件」,生产环境中如果每次都动态挂载,会有性能损耗、稳定性风险,合并后是完整模型,推理速度更快、稳定性更高,而且 Ollama 对完整模型的优化(GPU 加速、量化、缓存)能完全生效。


场景二 完整实操(分 3 大步,全部复制即用,无任何坑,垂直领域通用)

✅ 第一步:合并「原始模型 + LoRA 文件」→ 生成独立的完整模型(核心)

这一步是将 LoRA 的微调参数,永久融合到原始模型的参数中,生成一个全新的模型文件夹,这一步只需要执行一次,合并完成后永久可用。

步骤 1:编写合并脚本(复制即用,只改路径)

新建 Python 文件 merge_lora_to_base.py直接复制下面的代码只需要修改 3 个路径参数,其余代码完全不用动:

python

运行

from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
import os

# ====================== 只需要修改这3个路径 ======================
BASE_MODEL_PATH = "/root/models/qwen-7b-base"  # 原始基座模型本地路径
LORA_MODEL_PATH = "/root/models/qwen-7b-lora-medical"  # LoRA文件路径
MERGED_MODEL_SAVE_PATH = "/root/models/qwen-7b-medical"  # 合并后的新模型保存路径
# =================================================================

# 1. 创建保存目录
os.makedirs(MERGED_MODEL_SAVE_PATH, exist_ok=True)

# 2. 加载原始模型和分词器
print("✅ 正在加载原始基座模型...")
model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL_PATH,
    torch_dtype=torch.float16,
    device_map="auto",
    trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL_PATH, trust_remote_code=True)

# 3. 核心:加载LoRA并合并到原始模型
print("✅ 正在合并LoRA微调参数到原始模型...")
model = PeftModel.from_pretrained(model, LORA_MODEL_PATH)
model = model.merge_and_unload()  # 合并参数并卸载LoRA适配器,核心命令!

# 4. 保存合并后的完整模型和分词器
print(f"✅ 正在保存合并后的模型到 {MERGED_MODEL_SAVE_PATH} ...")
model.save_pretrained(MERGED_MODEL_SAVE_PATH, safe_serialization=True)
tokenizer.save_pretrained(MERGED_MODEL_SAVE_PATH)

print("🎉 模型合并完成!合并后的完整模型已保存,可直接用于Ollama部署!")

步骤 2:执行合并脚本,生成完整模型

终端执行命令,开始合并:

bash

运行

python merge_lora_to_base.py

✅ 合并耗时:7B 模型的合并,在单张 3090/4090/A10 显卡上,只需要 2~3 分钟,合并完成后,你会在 MERGED_MODEL_SAVE_PATH 路径下,得到一个完整的模型文件夹,大小约 13~15GB(7B 模型 8bit 量化后),这就是你的「垂直领域专属完整模型」。


✅ 第二步:为合并后的模型,编写「Ollama 的 Modelfile」(核心配置,复制即用)

Ollama 部署自定义模型的核心是 Modelfile —— 这是一个纯文本配置文件,用来告诉 Ollama:你的模型路径、模型名称、量化方式、GPU 加速、对话模板等,这个文件是 Ollama 的灵魂,但是编写极其简单,复制即用

步骤 1:创建 Modelfile 文件

在你的合并后的模型文件夹根目录(比如 /root/models/qwen-7b-medical)下,新建一个无后缀名的文件,文件名必须是:Modelfile(首字母大写,无后缀)。

步骤 2:写入 Modelfile 配置内容(复制即用,无需修改)

下面的配置是垂直领域模型部署的最优配置,适配所有 7B/13B 模型(Qwen、Llama2、百川、ChatGLM),直接复制粘贴到 Modelfile 中即可,我加了详细注释,你能看懂每一行的作用:

dockerfile

# 1. 指定模型的本地路径(就是你合并后的模型文件夹路径)
FROM /root/models/qwen-7b-medical

# 2. 模型元信息(自定义,改成你的垂直领域名称即可)
PARAMETER MODELNAME qwen-7b-medical
PARAMETER TITLE "医疗领域专用大模型-Qwen7B-LoRA微调版"
PARAMETER AUTHOR "你的名字/企业名称"
PARAMETER DESCRIPTION "基于通义千问7B微调的医疗垂直领域模型,专业回答医疗问答、疾病预防、用药建议等问题,无幻觉,符合行业规范"

# 3. 核心运行参数(生产环境最优配置,固定即可)
PARAMETER NUM_GPU -1        # 启用所有可用的GPU,最大化利用显存
PARAMETER NUM_THREADS 16    # CPU线程数,根据你的服务器配置调整,8/16/32都可以
PARAMETER CONTEXT_WINDOW 8192  # 上下文窗口大小,支持长文本问答(垂直领域必备)
PARAMETER MAX_GEN_LENGTH 2048  # 最大生成字数,足够回答所有行业问题
PARAMETER TEMPERATURE 0.1   # 温度系数,越小回答越精准、越专业,垂直领域建议0.1~0.3(杜绝幻觉)

# 4. 量化配置(核心,降低显存占用,不损失效果)
PARAMETER QUANTIZATION 8bit # 8bit量化,7B模型只需要10~12G显存,完美适配24G显卡

# 5. 对话模板(固定,适配所有中文模型,保证对话格式正确)
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
{{ .Response }}<|im_end|>"""

✅ 关键修改点:只需要把第一行的 FROM 路径,改成你合并后的模型文件夹的绝对路径即可,其余所有配置都不用改,这是通用最优配置。


✅ 第三步:Ollama 打包 + 启动模型(一行命令打包,一行命令启动,永久可用)

这一步是最爽的环节,所有配置都准备好后,部署只需要两行命令,完成后你的垂直领域模型就正式上线了,生产可用、稳定运行、支持所有调用方式

✅ 命令 1:打包自定义模型(执行一次即可)

终端执行以下命令,Ollama 会根据你编写的 Modelfile,将合并后的模型打包成一个Ollama 专属的模型镜像,命令格式:

bash

运行

ollama create [你的模型名称] -f [Modelfile的绝对路径]

示例(我把模型命名为 medical-qwen:7b,医疗领域的 Qwen7B):

bash

运行

ollama create medical-qwen:7b -f /root/models/qwen-7b-medical/Modelfile

✅ 打包耗时:约 1 分钟,执行完成后,终端会提示 success,此时你的模型已经被 Ollama 正式收录,你可以用 ollama list 命令查看,能看到你创建的 medical-qwen:7b 模型,和原生的 qwen:7b 并列。

✅ 命令 2:启动你的垂直领域模型(一行命令,永久可用)

这是最终的部署命令,启动后模型就正式运行了,支持本地终端对话 + API 接口调用,命令格式:

bash

运行

# 方式1:终端交互式对话(测试用)
ollama run medical-qwen:7b

# 方式2:后台守护进程运行(生产环境必用,关闭终端也不会停止)
ollama serve &

✅ 启动成功后,输入你的垂直领域问题,比如:请详细解释糖尿病的分型和治疗原则,模型会输出专业、精准、无幻觉的垂直领域回答,这就是你最终部署完成的生产级模型!


补充:部署后必用的「模型调用方式」(2 种,全部覆盖需求)

部署完成后,你肯定需要「使用」这个模型,Ollama 提供了两种最常用的调用方式全部无需写代码,满足所有场景需求,这也是 Ollama 的核心优势之一:

✅ 方式一:本地终端对话(测试 / 调试用)

直接执行命令,即可进入交互式对话,输入问题回车即可得到回答,退出输入 /bye

bash

运行

ollama run medical-qwen:7b

✅ 方式二:RESTful API 接口调用(生产对接用,重中之重)

Ollama原生自带 API 服务,启动模型后,默认会在 http://localhost:11434 开启 API 服务,无需额外配置、无需部署 Nginx/Flask,直接用 Postman、curl、Python/Java/PHP 后端代码调用即可,接口格式统一,对接成本为 0。

✅ 示例 1:curl 调用(终端测试 API)

bash

运行

curl http://localhost:11434/api/generate -d '{
  "model": "medical-qwen:7b",
  "prompt": "高血压患者的饮食禁忌有哪些?",
  "stream": false,
  "temperature": 0.1
}'

✅ 示例 2:Python 调用 API(后端对接用,复制即用)

python

运行

import requests
import json

url = "http://localhost:11434/api/generate"
data = {
    "model": "medical-qwen:7b",
    "prompt": "请起草一份简单的劳动合同",
    "stream": False,
    "temperature": 0.1
}
response = requests.post(url, json=data)
result = json.loads(response.text)
print("模型回答:", result["response"])

✅ 关键:这个 API 接口可以对接任何业务系统,比如你的客服网站、小程序、企业内部系统,这就是生产环境的核心调用方式


六、部署后的优化与避坑指南

✅ ✔️ 显存优化(重中之重)

如果你的显卡显存不足(比如 16G 显存跑 7B 模型),只需要修改 Modelfile 中的量化配置为 4bit,显存占用直接降到 6~8G,效果几乎无损失:

dockerfile

PARAMETER QUANTIZATION 4bit

✅ ✔️ 杜绝模型「幻觉」(垂直领域核心需求)

垂直领域模型最怕「胡说八道」,只需要修改 2 个参数,即可最大化降低幻觉,这是行业经验值:

dockerfile

PARAMETER TEMPERATURE 0.1  # 越小越精准,0.1~0.3最佳
PARAMETER TOP_P 0.9        # 采样阈值,固定0.9即可

✅ ✔️ 开机自启(生产环境必备)

Linux 服务器部署后,需要设置 Ollama 开机自启,避免服务器重启后模型停止运行,一行命令搞定:

bash

运行

sudo systemctl enable ollama && sudo systemctl start ollama

✅ ✔️ 常见坑解决

  1. 启动时提示「显存不足」:改成 4bit 量化,或者关闭其他占用显存的程序;

  2. 模型回答不专业:检查 LoRA 是否合并成功,或者训练时的数据集质量是否达标(数据质量决定效果);

  3. API 调用超时:增大 Modelfile 中的 CONTEXT_WINDOW 参数,或者降低生成长度。


七、最后的总结

从「训练 LoRA 微调模型」到「Ollama 生产部署」的完整闭环流程,精简为以下步骤,这也是垂直领域大模型落地的标准流程

✅ 完整闭环(训练→部署)

  1. 准备垂直领域高质量数据集 → 基于开源基座模型(Qwen7B/Llama2)做 LoRA 指令微调 → 得到 LoRA 适配器文件;

  2. 将「原始基座模型 + LoRA 文件」合并 → 生成独立的垂直领域完整模型;

  3. 为合并后的模型编写 Ollama Modelfile 配置文件;

  4. ollama create 打包模型,用 ollama run 启动模型;

  5. 通过「终端对话」测试效果,通过「API 接口」对接业务系统,完成生产部署。

✅ Ollama 部署核心优势

一行命令打包、一行命令启动、原生 GPU 加速、原生 API 服务、无复杂配置、无代码编写,这就是为什么 Ollama 成为目前大模型部署的首选工具,尤其适合垂直领域的落地。

Logo

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

更多推荐