使用Ollama部署训练后的模型,详细讲解「训练好的 LoRA 模型 + Ollama」完整部署流程
训练完的 LoRA 微调模型,怎么基于 Ollama 部署上线、实际调用、生产可用。 Ollama 是最优解 —— 它是目前部署大模型最简单、最高效、最轻量化的工具,对新手友好、支持 GPU 加速、部署命令极简、还完美兼容我们训练的LoRA 微调模型,完全不用写复杂的部署代码,和LoRA 训练无缝衔接,这也是企业 / 个人落地垂直领域模型的主流组合方案。
目录
✅ 准备 2:本地有「完整的原始基座模型」+「训练好的 LoRA 文件」
✅ 准备 3:安装「模型合并必备工具」- HuggingFace Transformers + PEFT
训练完的 LoRA 微调模型,怎么基于 Ollama 部署上线、实际调用、生产可用。 Ollama 是最优解 —— 它是目前部署大模型最简单、最高效、最轻量化的工具,对新手友好、支持 GPU 加速、部署命令极简、还完美兼容我们训练的LoRA 微调模型,完全不用写复杂的部署代码,和LoRA 训练无缝衔接,这也是企业 / 个人落地垂直领域模型的主流组合方案。
一、前置重要前提
先把「训练产出物 + Ollama 部署的核心关系」讲透,这是所有部署操作的基础,90% 的部署问题都源于这里没理清:
✅ 1. 你训练 LoRA 后,手里到底有什么文件?
之前训练 LoRA,最终得到的不是「一个完整的新模型」,而是 2 类核心文件:
① 原始基座模型:比如你微调的 qwen:7b、llama2:7b、baichuan:7b、chatglm3: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.json、pytorch_model.bin等文件); -
LoRA 文件:训练后得到的文件夹,里面必须有
adapter_config.json和adapter_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 步:
-
模型合并:将「原始基座模型」和「LoRA 微调文件」永久合并,生成一个全新的、完整的垂直领域模型文件(比如
medical-qwen-7b),合并后,这个新模型就是一个独立的模型,不再依赖任何 LoRA 文件和原始模型; -
Ollama 打包部署:将合并后的完整模型,制作成 Ollama 专属的模型包(Modelfile),然后用 Ollama 一行命令打包、一行命令启动,启动后和 Ollama 原生的
qwen:7b、llama2: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
✅ ✔️ 常见坑解决
-
启动时提示「显存不足」:改成 4bit 量化,或者关闭其他占用显存的程序;
-
模型回答不专业:检查 LoRA 是否合并成功,或者训练时的数据集质量是否达标(数据质量决定效果);
-
API 调用超时:增大 Modelfile 中的
CONTEXT_WINDOW参数,或者降低生成长度。
七、最后的总结
从「训练 LoRA 微调模型」到「Ollama 生产部署」的完整闭环流程,精简为以下步骤,这也是垂直领域大模型落地的标准流程:
✅ 完整闭环(训练→部署)
-
准备垂直领域高质量数据集 → 基于开源基座模型(Qwen7B/Llama2)做 LoRA 指令微调 → 得到 LoRA 适配器文件;
-
将「原始基座模型 + LoRA 文件」合并 → 生成独立的垂直领域完整模型;
-
为合并后的模型编写 Ollama Modelfile 配置文件;
-
用
ollama create打包模型,用ollama run启动模型; -
通过「终端对话」测试效果,通过「API 接口」对接业务系统,完成生产部署。
✅ Ollama 部署核心优势
一行命令打包、一行命令启动、原生 GPU 加速、原生 API 服务、无复杂配置、无代码编写,这就是为什么 Ollama 成为目前大模型部署的首选工具,尤其适合垂直领域的落地。
更多推荐



所有评论(0)