很多人先用 Ollama 把模型拉下来跑通了,接着就想拿自己的数据再训一训,让它更懂自己的业务。但一上手就卡住:Ollama 只管推理,不给训练入口,模型文件还是量化过的,拿来微调效果打折。这篇按你的数据量、显卡和产出目标,给出三条可落地的路径和判断标准,顺带说清什么情况下这条路根本不值得走。
很多人是先用 Ollama 把模型拉下来跑通了,接着就想拿自己的数据再训一训,让它更懂自己的业务。这个念头一冒出来,动手时基本都会卡在同一个地方:Ollama 命令行翻遍了,找不到 train、finetune 这类子命令,只有 pull、run、serve 这一套。
原因不复杂,Ollama 的定位是推理运行时,它负责下载、量化、加载、把接口挂起来。训练这件事从头到尾不在它的职责范围里。所以真正的问题不是「怎么在 Ollama 里微调」,而是「怎么绕开它去训,训完再拿回来用」。下面按你的数据量、显卡和产出目标,拆成三条路径和各自的判断标准。
先认清一件事:Ollama 是推理工具,不是训练工具
把这条想明白,后面的动作才顺。Ollama 默认拉下来的大多是量化过的权重,量化本身就有精度损失,你在这上面做微调,等于在一张已经被压缩过的画布上重画,底子就打了折。而且它没有暴露训练入口,也没有梯度、优化器这些概念,命令行层面根本没打算让你训。
- 没有训练子命令:pull 和 run 管拉取和对话,serve 管起服务,整条链路到推理为止
- 权重是量化格式:拿它当训练起点,精度已经掉过一轮,效果上限被压住
- 缺少训练配套:数据集加载、超参配置、检查点保存这些环节它一概不管
- 结论:想微调,第一步是绕开 Ollama 去拿原始权重,训完再转回来做推理,这是常见分工
三条路:不改权重、加适配器、全量重训
路径选择比技术细节重要得多,选错了后面全是白工。三条路的核心区别在于:动不动权重、显存门槛多高、后期维护要不要反复重训。
| 做法 | 改动面 | 适合什么需求 | 明显短板 |
|---|---|---|---|
| 提示词 / 挂知识库 | 不碰权重 | 知识更新快、格式约束、内部文档问答 | 每次带上下文,长文档场景吃 token |
| LoRA 一类适配器 | 冻结主干,只训小矩阵 | 风格、话术、固定输出格式这类稳定诉求 | 产物要合并回原模型才能用 |
| 全量微调 | 改动面最大 | 需要模型底层能力真的迁移 | 显存和卡数要求高,个人设备基本别想 |
三条路的硬件门槛、数据量要求和维护成本差别很大,不是同一个量级的事。选之前先到 /stacks/fine-tuning 看看有哪些服务商和方案类型,把可选范围过一遍再定方向。
动手前先算显存和数据,别训到一半崩
显存判断有个固定顺序:先确认基座模型参数量,再看你打算用哪种微调方式。适配器微调和全量微调之间的差距往往是量级级别的,光凭感觉估十有八九估错。具体倍数去 /models/deploy 的部署测算页,按当时的模型算一遍。
- 确认基座与方式先定模型参数量和微调方式,这两个变量决定显存量级,不要跳过
- 按站内测算页核数到 /models/deploy 输入规格算一遍,得到的是当时的参考值,不要靠记忆里的旧数字
- 备一份小数据集几百条格式统一、互相不矛盾的样本先跑通,比一上来堆几千条有用
- 看损失曲线试跑阶段只确认一件事:损失有没有真的在降,没降就别加大数据量,先查数据格式
- 本地跑不动就换显存不够会走 CPU 卸载,速度慢到不可接受,容易被误判成「微调没用」;这时去 /compute/gpus 和 /compute/sizing 对一遍规格与卡数
数据量这条要单独说:不是越多越好。几百条高质量、格式统一的样本,往往比几千条口径互相打架的样本有用。训练前花时间洗数据,比训练后调参划算得多。
训完之后怎么回到 Ollama 用
训完不代表结束,回载这一步最容易出问题。如果训练产物是适配器权重,要先和原模型合并,再转成 Ollama 能加载的格式。合并这一步做错,效果会整块丢掉,流程细节参考 /stacks/fine-tuning。
转换后本地加载测试,别只看训练集里的样本,那样一定好看。重点测三类:训练里出现过的、同义改写的、完全没见过的。第三类掉得厉害,说明过拟合了,回去加数据或减训练轮次。
- 适配器合并
- 把训练出的小矩阵并回原模型,不合并就无法单独加载
- 格式转换
- 转成 Ollama 认的格式再写 Modelfile 引用
- 三类样本测试
- 见过、改写、没见过各测一批,看泛化而不是看记忆
- 过拟合信号
- 训练样本表现好、没见过的样本明显变差
还有一点常被搞混:如果只是想让模型记住内部文档,先试试知识库方案。微调解决的是「怎么说话」,知识库解决的是「知道什么」,判断标准可对照 /ai-dict/category/tech。
这些情况下别做微调
微调不是默认选项,它更像是给已经稳定的需求做固化。下面这几种情况,做了大概率是给自己找维护负担。
- 数据还在天天变、口径经常调整:微调等于把版本冻住,每次改动都要重训,维护成本高于收益
- 只是想让输出更规范:先试提示词约束和输出格式校验,能解决就别训
- 只有一张消费级卡却想要接近全量的效果:现实里很难两全,可考虑租算力或直接调托管服务
- 训练数据来源和授权不清楚:尤其涉及内部文档和用户数据时,先过一遍 /safety 的要求再动手
算力方案和成本口径这件事,别凭印象拍脑袋,到 /compute/finetune 对比当时的方案;本地实在跑不动的场景,租卡和托管服务往往更省事。
先看方案再动手三条路径的门槛和产出差别很大,动手前花十分钟把可用方案和测算页过一遍,比训到一半发现显存不够划算。→常见问题
Ollama 本身有没有微调命令?
没有。Ollama 定位是推理和模型管理,训练相关的活它不干。你要么用别的训练框架(本地或租卡)训完,再把权重转成它能加载的格式,要么干脆走提示词加知识库这条路。把它当训练工具会一直卡住。
一张普通显卡能微调多大的模型?
没有统一答案,取决于模型参数量、微调方式和你用的量化程度,LoRA 和全量微调差得很远。建议先到站内 /models/deploy 按你手上的卡和目标任务算一遍,再决定是本地训还是租算力,别凭感觉开跑。
微调完需要多少数据才有效?
质量比数量重要,格式统一、标注一致的几百条样本经常就能看出方向性变化,而几千条自相矛盾的样本只会把模型带偏。正确做法是先拿一小批跑通流程,看效果曲线,再决定要不要扩数据。