ollama llama3.2 微调

模型与算力

讲清在 Ollama 上给 Llama3.2 做微调并导回本地跑通的完整动作:数据准备、LoRA 训练、格式转换、导入与验证。

很多人已经把 Llama3.2 拉进 Ollama 跑起来了,但一到「让它学会我们自己的说法」就卡住:不知道从哪一步开始、训练完的权重怎么塞回 Ollama、导进去之后怎么确认真的生效而不是自我感觉良好。这篇按动作顺序走一遍,只讲能落地的步骤和判断标准,具体显存、耗时、参数量的数字请到站内部署测算与微调服务商页面按当期情况核对。

很多人已经把 Ollama 上的 Llama3.2 拉起来聊过天了,但一碰到「让它学会我们自己的说法、按我们的格式回话」就卡住:不知道第一步该动哪里,训练出来的权重怎么塞回 Ollama,导进去以后又怎么确认真的生效,而不是对着几条样例自我感觉良好。这篇按动作顺序走一遍,从「到底该不该微调」一直走到「导进去怎么验证、不行怎么退」。

先说清一个前提:这篇不给任何具体显存、耗时、参数量、量化档位这类数字,它们在硬件和模型规模上差异太大,写死只会误导你。需要估算时,到站内的部署测算与量化说明页面,按你当期的机器和模型情况核对当时的数字再决定。

先分清你要的是微调,还是提示词和知识库就够了

微调不是万能钥匙,它擅长的是「行为」而不是「事实」。判断分界线很简单:如果你的痛点是输出格式、口吻、固定的字段结构总是对不上,微调划算;如果痛点是它记不住你的资料、答不出更新过的内容,先上检索加提示词,别硬训。训一个记不住事的模型,是拿最贵的办法解决最便宜的问题。

  • 样本量太少、或者需求每天都在变,这种情况别做微调,会持续返工
  • 判断标准:同一个问题你写进提示词里就能答对,那就不需要微调,那是提示词的活儿
  • 动手前先把基线跑出来:用没微调的 Llama3.2 在你自己的测试集上跑一遍,把结果存下来,否则后面无法证明有提升
  • 确认本地这份量化模型能正常对话、能稳定响应,训练时不要直接拿量化权重当起点,量化是为了推理省资源,不是为了训练

数据和环境:决定成败的是这一步

微调翻车十次有八次不是参数的锅,是数据和模板的锅。你的训练样本要按「指令-输入-输出」成对组织,并且这份数据的拼接方式、特殊 token、对话模板,必须和推理时用的完全一致。训练一套、线上跑另一套,模型会学得很好但用不上,这是最常见的坑。

  1. 数据清洗去重、去空、去互相矛盾的回答。矛盾样本比脏样本更伤,因为它让模型学会两种相反的答案。
  2. 人工抽检随机抽十来条自己读一遍,读不通、答非所问、事实明显错的直接删掉,别指望模型自己消化。
  3. 模板对齐把训练脚本里的对话模板抄下来,和后面 Modelfile 里要写的模板逐字对照,确认一致再往下走。
  4. 环境拆分训练放在 Python 生态的微调脚本里做,Ollama 只负责最终跑推理,别指望在一个工具里干完两件事。

显存和耗时没把握的时候,先别闷头开跑。到站内的部署测算页面,按你的模型规模、量化方式和机器情况估一遍,再决定要不要降批次或者先用小样本试跑一轮。

用 LoRA 训练:小改动、少算力

个人机器上做微调,基本都走 LoRA 这条路:只训练一小部分附加参数,不动基座权重,显存占用和训练时间都友好得多。产出物是一份适配器权重,不是完整模型,所以它还不能直接喂给 Ollama,后面必须和基座合并。

观察到的现象可能原因先动哪里
损失一直不怎么降数据太脏或学习率不对先查数据,再降学习率重跑一小段
训练集答得越来越像模板过拟合减轮数或加数据多样性
换个问法就答不上学得太窄补不同表述的样本,别只堆一种问法
通用问题明显变差通用能力被挤压减少训练量,保留一部分通用数据混训
  • 学习率、批大小、训练轮数从保守值起步,先跑一小段看损失曲线是否平稳下降,再决定加量
  • 判断过拟合的信号:训练集上回答越来越像模板,换一个问法就答不出来
  • 不要一上来就冲大轮数,微调是调行为,不是把模型重造一遍
  • 每轮训练留一份检查点,后面合并不满意还能回退

合并权重、转成 GGUF、导入 Ollama

到了这一步,核心原则只有一句:Ollama 生态里所有模型都是通过 Modelfile 定义的,不是把文件往目录里一丢就完事。所以合并、转换、写模板、导入这四步顺序不能乱。

  1. 合并基座权重加上适配器,合成一份完整的合并权重。合并前确认基座版本和训练时用的是同一个,串了版本后面全白费。
  2. 转格式把合并结果转成 Ollama 能吃的量化格式。量化档位越高效果越贴近原始权重、体积也越大,具体取舍到站内量化说明页面看当期对比。
  3. 写 ModelfileFROM 指向你的权重文件;TEMPlate 和停止符必须原样照抄训练时用的那套,这是导入后「答非所问」的头号原因。
  4. 导入命名用一个新名字导入,别覆盖原来的官方模型,方便随时切回去对照。
# 示意结构,具体命令以当期转换工具文档为准
ollama create my-llama3.2-ft -f ./Modelfile
ollama run my-llama3.2-ft

导入后怎么验证,不达标怎么退

验证不能只看一两条样例。微调最容易被忽略的副作用是通用能力被挤压:你关心的那类问题答得挺像样,但日常闲聊、常识问答悄悄退化了。所以抽测范围要比你以为的宽一些。

验证层次怎么做看什么
固定测试集拿训练前存的基线结果做同题对比提升是否稳定,不是单条走运
换问法同一个意思用十来种说法各问一遍是否只在训练句式上有效
真实流程走一段你日常的业务操作有没有引入新的错误或格式问题
通用抽测随便问些和微调无关的常识通用能力有没有明显掉档
  • 不达标的排查顺序:先查模板和停止符是否一致,再查数据质量,最后才怀疑训练参数
  • 训练前的原版模型不要删,出问题随时切回
  • 验证通过再考虑把它设成默认模型,别在没测完前就替换掉日常在用的那个
下一步想对比不同微调服务商和本地跑推理的成本,去站内的服务商与价格追踪页面核对当期数字,再决定自己训还是托管训。

常见问题

不用显卡能微调 Llama3.2 吗?

能跑,但会很慢,通常只适合小样本试流程。CPU 或低显存机器建议先减数据量、用小批量跑通一遍链路,确认数据格式和模板没问题,再决定要不要上租卡。具体显存门槛按你的模型规模和训练方式,到站内部署测算页面核一遍。

微调完还要不要用 RAG?

两者解决的不是一回事。微调改的是表达方式、输出格式和任务习惯,对记住频繁变动的具体资料并不擅长。如果你的诉求是「回答里要有我们最新的文档内容」,那还是检索更合适,两者也可以叠加,微调管怎么说、检索管说什么。

导入 Ollama 后效果没变化,先查什么?

先查模板。训练时用的对话模板、特殊 token、停止符,如果和 Modelfile 里写的不一致,模型等于在用没见过的格式答题,表现会和没微调一样。其次确认你导入的是合并后的权重而不是只有适配器,最后再检查调用时是不是真的选到了新模型名。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。