很多人已经把 Llama3.2 拉进 Ollama 跑起来了,但一到「让它学会我们自己的说法」就卡住:不知道从哪一步开始、训练完的权重怎么塞回 Ollama、导进去之后怎么确认真的生效而不是自我感觉良好。这篇按动作顺序走一遍,只讲能落地的步骤和判断标准,具体显存、耗时、参数量的数字请到站内部署测算与微调服务商页面按当期情况核对。
很多人已经把 Ollama 上的 Llama3.2 拉起来聊过天了,但一碰到「让它学会我们自己的说法、按我们的格式回话」就卡住:不知道第一步该动哪里,训练出来的权重怎么塞回 Ollama,导进去以后又怎么确认真的生效,而不是对着几条样例自我感觉良好。这篇按动作顺序走一遍,从「到底该不该微调」一直走到「导进去怎么验证、不行怎么退」。
先说清一个前提:这篇不给任何具体显存、耗时、参数量、量化档位这类数字,它们在硬件和模型规模上差异太大,写死只会误导你。需要估算时,到站内的部署测算与量化说明页面,按你当期的机器和模型情况核对当时的数字再决定。
先分清你要的是微调,还是提示词和知识库就够了
微调不是万能钥匙,它擅长的是「行为」而不是「事实」。判断分界线很简单:如果你的痛点是输出格式、口吻、固定的字段结构总是对不上,微调划算;如果痛点是它记不住你的资料、答不出更新过的内容,先上检索加提示词,别硬训。训一个记不住事的模型,是拿最贵的办法解决最便宜的问题。
- 样本量太少、或者需求每天都在变,这种情况别做微调,会持续返工
- 判断标准:同一个问题你写进提示词里就能答对,那就不需要微调,那是提示词的活儿
- 动手前先把基线跑出来:用没微调的 Llama3.2 在你自己的测试集上跑一遍,把结果存下来,否则后面无法证明有提升
- 确认本地这份量化模型能正常对话、能稳定响应,训练时不要直接拿量化权重当起点,量化是为了推理省资源,不是为了训练
数据和环境:决定成败的是这一步
微调翻车十次有八次不是参数的锅,是数据和模板的锅。你的训练样本要按「指令-输入-输出」成对组织,并且这份数据的拼接方式、特殊 token、对话模板,必须和推理时用的完全一致。训练一套、线上跑另一套,模型会学得很好但用不上,这是最常见的坑。
- 数据清洗去重、去空、去互相矛盾的回答。矛盾样本比脏样本更伤,因为它让模型学会两种相反的答案。
- 人工抽检随机抽十来条自己读一遍,读不通、答非所问、事实明显错的直接删掉,别指望模型自己消化。
- 模板对齐把训练脚本里的对话模板抄下来,和后面 Modelfile 里要写的模板逐字对照,确认一致再往下走。
- 环境拆分训练放在 Python 生态的微调脚本里做,Ollama 只负责最终跑推理,别指望在一个工具里干完两件事。
显存和耗时没把握的时候,先别闷头开跑。到站内的部署测算页面,按你的模型规模、量化方式和机器情况估一遍,再决定要不要降批次或者先用小样本试跑一轮。
用 LoRA 训练:小改动、少算力
个人机器上做微调,基本都走 LoRA 这条路:只训练一小部分附加参数,不动基座权重,显存占用和训练时间都友好得多。产出物是一份适配器权重,不是完整模型,所以它还不能直接喂给 Ollama,后面必须和基座合并。
| 观察到的现象 | 可能原因 | 先动哪里 |
|---|---|---|
| 损失一直不怎么降 | 数据太脏或学习率不对 | 先查数据,再降学习率重跑一小段 |
| 训练集答得越来越像模板 | 过拟合 | 减轮数或加数据多样性 |
| 换个问法就答不上 | 学得太窄 | 补不同表述的样本,别只堆一种问法 |
| 通用问题明显变差 | 通用能力被挤压 | 减少训练量,保留一部分通用数据混训 |
- 学习率、批大小、训练轮数从保守值起步,先跑一小段看损失曲线是否平稳下降,再决定加量
- 判断过拟合的信号:训练集上回答越来越像模板,换一个问法就答不出来
- 不要一上来就冲大轮数,微调是调行为,不是把模型重造一遍
- 每轮训练留一份检查点,后面合并不满意还能回退
合并权重、转成 GGUF、导入 Ollama
到了这一步,核心原则只有一句:Ollama 生态里所有模型都是通过 Modelfile 定义的,不是把文件往目录里一丢就完事。所以合并、转换、写模板、导入这四步顺序不能乱。
- 合并基座权重加上适配器,合成一份完整的合并权重。合并前确认基座版本和训练时用的是同一个,串了版本后面全白费。
- 转格式把合并结果转成 Ollama 能吃的量化格式。量化档位越高效果越贴近原始权重、体积也越大,具体取舍到站内量化说明页面看当期对比。
- 写 ModelfileFROM 指向你的权重文件;TEMPlate 和停止符必须原样照抄训练时用的那套,这是导入后「答非所问」的头号原因。
- 导入命名用一个新名字导入,别覆盖原来的官方模型,方便随时切回去对照。
# 示意结构,具体命令以当期转换工具文档为准
ollama create my-llama3.2-ft -f ./Modelfile
ollama run my-llama3.2-ft导入后怎么验证,不达标怎么退
验证不能只看一两条样例。微调最容易被忽略的副作用是通用能力被挤压:你关心的那类问题答得挺像样,但日常闲聊、常识问答悄悄退化了。所以抽测范围要比你以为的宽一些。
| 验证层次 | 怎么做 | 看什么 |
|---|---|---|
| 固定测试集 | 拿训练前存的基线结果做同题对比 | 提升是否稳定,不是单条走运 |
| 换问法 | 同一个意思用十来种说法各问一遍 | 是否只在训练句式上有效 |
| 真实流程 | 走一段你日常的业务操作 | 有没有引入新的错误或格式问题 |
| 通用抽测 | 随便问些和微调无关的常识 | 通用能力有没有明显掉档 |
- 不达标的排查顺序:先查模板和停止符是否一致,再查数据质量,最后才怀疑训练参数
- 训练前的原版模型不要删,出问题随时切回
- 验证通过再考虑把它设成默认模型,别在没测完前就替换掉日常在用的那个
常见问题
不用显卡能微调 Llama3.2 吗?
能跑,但会很慢,通常只适合小样本试流程。CPU 或低显存机器建议先减数据量、用小批量跑通一遍链路,确认数据格式和模板没问题,再决定要不要上租卡。具体显存门槛按你的模型规模和训练方式,到站内部署测算页面核一遍。
微调完还要不要用 RAG?
两者解决的不是一回事。微调改的是表达方式、输出格式和任务习惯,对记住频繁变动的具体资料并不擅长。如果你的诉求是「回答里要有我们最新的文档内容」,那还是检索更合适,两者也可以叠加,微调管怎么说、检索管说什么。
导入 Ollama 后效果没变化,先查什么?
先查模板。训练时用的对话模板、特殊 token、停止符,如果和 Modelfile 里写的不一致,模型等于在用没见过的格式答题,表现会和没微调一样。其次确认你导入的是合并后的权重而不是只有适配器,最后再检查调用时是不是真的选到了新模型名。