目录
Ollama 本地大模型微调实战(三)LoRA 挂载部署 + Hermes 电力模型全自动自我进化闭环
前言
一、Modelfile 编写,把 LoRA 接入 Ollama 运行
1.1 文件说明
1.2 电力专用 Modelfile 完整模板
1.3 打包生成自定义 Ollama 模型
1.4 模型调用与常用管理命令
二、两种部署模式对比(按需选择)
模式 1:基座 + 外挂 LoRA(推荐日常办公使用)
模式 2:LoRA 权重合并进 GGUF(适合分发、单机固定使用)
三、Hermes 电力模型全自动自我进化整套方案
3.1 进化闭环四步逻辑
3.2 电力专属自动生成 + 过滤完整 Python 脚本
3.3 完整一轮进化操作流程
四、高频问题汇总 & 解决方案
整套三篇全系列终篇总结
前言
第二篇我们已经训练得到了电力专属 LoRA 权重文件,本篇分为两大核心板块:
- 将 LoRA 适配器挂载进 Ollama,编写 Modelfile 打包出可直接运行的国网电力私有模型,讲解日常使用、权重合并两种部署方案;
- 搭建 Hermes 专属自我进化脚本,实现「模型自产电力数据→自动校验打分过滤劣质样本→生成新训练集→再次微调迭代」闭环,让你的本地电力模型越使用专业精度越高。
一、Modelfile 编写,把 LoRA 接入 Ollama 运行
1.1 文件说明
在 LoRA 文件夹同级目录新建文件,文件名固定为Modelfile,无后缀、大小写不能修改。 Hermes 模型使用<|im_start|>标准对话格式,模板必须严格原样书写,修改格式会造成回答乱码、输出截断。
1.2 电力专用 Modelfile 完整模板
# 绑定ollama本地原始基座模型 FROM hermes3:8b # 加载上一章训练好的电力LoRA适配器(填写你的文件夹绝对/相对路径) ADAPTER ./power_hermes_lora # Hermes官方对话模板,禁止改动 TEMPLATE """<|im_start|>system {{ .System }} <|im_end|> <|im_start|>user {{ .Prompt }} <|im_end|> <|im_start|>assistant """ # 电力场景推理参数配置:低温度保证回答严谨,杜绝编造虚构规程 PARAMETER temperature 0.2 PARAMETER top_p 0.6 PARAMETER num_ctx 8192 PARAMETER repeat_penalty 1.1 PARAMETER stop "<|im_end|>" # 固化全局系统角色,匹配电网工作场景 SYSTEM "你是国家电网配网专业在岗工程师,所有回答严格依照电力安全工作规程、现场作业规范。故障分析、巡检要求、两票填写、设备试验内容必须写实准确,禁止脑补编造不存在的标准与操作流程,术语使用国网官方标准叫法。"1.3 打包生成自定义 Ollama 模型
打开终端,进入 Modelfile 所在文件夹执行打包命令
# 格式:ollama create 自定义模型名称:标签 -f Modelfile ollama create hermes-power:8b -f Modelfile1.4 模型调用与常用管理命令
# 交互式对话使用电力模型 ollama run hermes-power:8b # 单次提问快速查询 ollama run hermes-power:8b "配网线路接地故障处理步骤" # 查看本机所有ollama模型 ollama list # 关闭模型进程,释放显卡显存 ollama stop hermes-power:8b # 不需要时删除自定义模型 ollama rm hermes-power:8b二、两种部署模式对比(按需选择)
模式 1:基座 + 外挂 LoRA(推荐日常办公使用)
- 优点:一份 Hermes 基座,可以挂载电力 LoRA、代码 LoRA、办公 LoRA 多个适配器自由切换;原始模型文件不会被修改,占用磁盘体积小;调试修改 LoRA 不用重新打包基座。
- 缺点:迁移给其他人使用时,需要同时提供基座文件 + LoRA 文件夹两份资料。
模式 2:LoRA 权重合并进 GGUF(适合分发、单机固定使用)
把 LoRA 权重永久融合进基座模型,导出独立 GGUF 文件,Modelfile 直接读取本地 GGUF 即可加载,不需要额外适配器文件,发给他人只需要单个模型文件。 适用场景:U 盘携带模型、内网多台电脑部署、交付同事使用。
三、Hermes 电力模型全自动自我进化整套方案
3.1 进化闭环四步逻辑
- 自生成数据:当前版本电力 Hermes 自动批量生成配网、变电、安规类问答数据;
- 自校验打分:模型以电力专家视角给自己生成的内容评分,剔除错误、表述不规范、逻辑混乱的数据;
- 数据集落地:过滤后的优质数据自动保存为标准 train.json 训练文件;
- 迭代升级:使用新数据集重新训练新版 LoRA,替换 Ollama 模型,完成一轮进化迭代。
3.2 电力专属自动生成 + 过滤完整 Python 脚本
新建power_self_evolve.py,直接运行即可产出进化数据集
import torch import random import json from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline # 基础配置 MODEL_ID = "NousResearch/Hermes-3-8B" OUTPUT_TRAIN_JSON = "./train_evolve_power.json" GENERATE_NUM = 20 # 单次自动生成20条原始问答数据 SCORE_THRESHOLD = 7 # 保留7分以上的合格电力数据 # 电力题库提问池,模型基于这些问题自动作答 power_question_pool = [ "配网线路树障清理作业安全措施", "配电变压器异常声响故障排查方法", "电力事故抢修工作票使用要求", "雷雨天气户外线路巡检禁止行为清单", "台区三相负荷不平衡的危害与调整方案", "跌落式熔断器熔断故障判断与更换操作规范", "配电线路污秽区巡检重点检查内容", "工作票办理、许可、终结全流程要求", "电缆线路泡水后的检测试验项目", "配网重合闸动作跳闸处置流程" ] # 加载模型 device = "cuda" if torch.cuda.is_available() else "cpu" tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) tokenizer.pad_token = tokenizer.eos_token model = AutoModelForCausalLM.from_pretrained( MODEL_ID, device_map="auto", torch_dtype=torch.bfloat16 ) llm_pipe = pipeline( "text-generation", model=model, tokenizer=tokenizer, max_new_tokens=500, temperature=0.6, device=device ) # 步骤1:自动批量生成原始问答数据 def generate_raw_power_data(): raw_list = [] for _ in range(GENERATE_NUM): question = random.choice(power_question_pool) prompt = f"<|im_start|>user\n{question}<|im_end|>\n<|im_start|>assistant\n" res = llm_pipe(prompt)[0]["generated_text"] answer = res.split("<|im_start|>assistant\n")[-1].replace("<|im_end|>", "").strip() raw_list.append({"question": question, "answer": answer}) print(f"已生成{len(raw_list)}条原始电力问答数据") return raw_list # 步骤2:模型自评打分,筛选合格样本 def filter_qualified_data(raw_data): qualified = [] score_prompt_template = """你是资深国网配电工程师,按照0~10分给下面这条问答打分。 打分标准:严格符合电力规程、操作流程准确、术语规范、无错误虚构内容为高分。 只允许输出纯数字分数,不要任何多余文字。 问题:{q} 回答:{a} 分数:""" for item in raw_data: score_prompt = score_prompt_template.format(q=item["question"], a=item["answer"]) score_text = llm_pipe(score_prompt, max_new_tokens=5)[0]["generated_text"] try: score = int(''.join([c for c in score_text if c.isdigit()])) except: score = 0 if score >= SCORE_THRESHOLD: qualified.append({ "instruction": item["question"], "input": "", "output": item["answer"] }) print(f"过滤后合格高质量数据:{len(qualified)}条") return qualified # 执行一轮进化流程 if __name__ == "__main__": raw_data = generate_raw_power_data() good_data = filter_qualified_data(raw_data) with open(OUTPUT_TRAIN_JSON, "w", encoding="utf-8") as f: json.dump(good_data, f, ensure_ascii=False, indent=2) print(f"进化数据集已保存至:{OUTPUT_TRAIN_JSON}")python power_self_evolve.py运行结束目录会生成train_evolve_power.json,可直接代入第二篇的训练代码训练新版 LoRA。
3.3 完整一轮进化操作流程
- 执行进化脚本,自动生成清洗完毕的新增电力训练数据;
- 把新增数据合并进原有数据集,使用 QLoRA 训练出新一版 LoRA;
- 修改 Modelfile 内 ADAPTER 路径,执行
ollama create覆盖更新hermes-power:8b模型; - 重复循环运行,模型的电力知识、故障处理、规程熟悉度会持续迭代优化。
四、高频问题汇总 & 解决方案
- 挂载 LoRA 后模型回答错乱、乱码 Hermes 对话模板格式被修改,严格复制本文 Modelfile 内 TEMPLATE 内容,不要自行增删符号。
- ADAPTER 路径读取失败 使用文件绝对路径,文件夹名称、路径不要包含中文,适配器目录必须存在 adapter_config.json 文件。
- 自我打分数值不准 降低打分 Prompt 的随机性,将打分阶段 temperature 调低至 0.1,打分标准描述更加细化。
- 迭代训练后效果没有提升 每次进化累积足够多优质样本,单次不要只用几条数据训练;Epoch 控制在 3~5,避免过拟合。
- Ollama 调用模型占用显存过高 推理时调低 num_ctx,关闭系统内其他占用显卡的程序,Arc 显卡可正常适配整套流程。
整套三篇全系列终篇总结
- 第一篇厘清底层认知:分清表层参数配置与真实权重微调的本质区别,弄懂 LoRA 轻量化微调原理,避开新手基础误区;
- 第二篇落地训练实操:完成环境部署、电力数据集规范编写、可视化 / 代码两种方式训练 LoRA 权重文件;
- 第三篇完成部署上线 + 长效进化:LoRA 对接 Ollama 打造可用的电力私有大模型,搭建自动化迭代闭环,实现模型自主学习优化。
整套方案基于 Hermes 模型 + Ollama 本地运行,适配 Arc A770、RTX4060 等普通家用显卡,完全适配电网日常工作:作业查询、故障分析、安规学习、两票资料查阅等真实工作场景使用。