Ollama怎么加载本地模型

模型与算力

讲清 Ollama 导入自备模型文件的几条路:Modelfile、GGUF 直拉、从已有框架迁移,以及导入后怎么验证跑通。

手上已经有一份模型文件——从 HuggingFace 下的 GGUF、同事拷来的权重、或者自己量化出来的产物,想塞进 Ollama 里跑起来,结果发现 ollama pull 只能拉官方库里的名字,本地文件不知道往哪放。这篇把几条导入路径、目录约定、格式要求和导入后的验证动作按顺序讲一遍,顺带说清哪些文件根本导不进去。

手上已经有一份模型文件,来源无非三种:从 HuggingFace 下来的 GGUF、同事拷过来的权重、或者自己量化出来的产物。想塞进 Ollama 里跑起来,第一反应是 ollama pull,结果发现它只认官方库里的名字,路径一填就报错。这不是你操作错了,是两条完全不同的通道——pull 走的是远程仓库命名空间,本地文件要走的叫「导入」。

这篇按动手顺序讲:先判断文件能不能用,再挑一条导入路线,最后怎么验证跑通、文件放哪、多大磁盘、什么时候这条路根本走不通。目标只有一个——别在格式不对的文件上白折腾半天。

先分清:为什么本地文件不能直接 pull

ollama pull 认的是官方模型库里的名字和 tag,本质上是一次远程下载动作,它不接收你硬盘上的路径。你把 GGUF 拖到当前目录再 pull,它只会去远端找同名模型,找不到就报 manifest 相关的错。理解这一点,后面所有操作才有方向。

  • pull 负责「从官方库拿」,导入负责「把本地文件登记进 Ollama 自己的仓库」,两者入口不同
  • 能导入的前提是文件格式在 Ollama 的支持范围内,格式不对,命令写得多漂亮也没用
  • 导入完成后,Ollama 是按自己的存储结构管理这个模型的,不是「去读你原来那个目录」
  • 所以原始文件能不能删、能不能挪,取决于导入时是引用还是复制,这点后面单说

动手前先确认文件能不能用

这一步花两分钟,能省掉后面半小时的报错排查。拿到的文件五花八门,但不是每种都能进 Ollama。先看扩展名和目录结构,心里就有数了。

你手上的文件能不能直接导入处理办法
单个 GGUF 文件可以直接用,最省事的一类
带分片的 GGUF(多个同名文件)可以文件必须齐全、命名连续,缺一片直接失败
SafeTensors 一整套目录不行先转成 GGUF 再导入
PyTorch 的 .bin 权重不行同样要先转 GGUF
完整 HuggingFace 仓库目录不行里面通常还混着配置文件,得挑出权重再转

如果你的产物正好是 GGUF,跳过转换,直接进入后面的路线选择。如果是其他格式,先老老实实做转换,别指望 Ollama 帮你兜底,它对这类格式基本没有兼容层。

  • 分片文件对照一下数量:下载中断最容易少一片,报错信息往往只提到其中一个文件名
  • 量化档位决定能不能塞进显存。档位和显卡怎么配,去 /models/deploy 按当时的显存口径算一遍,别凭感觉
  • 同一份权重,不同的量化档位体积差很多,本地跑优先选量化过的,原精度一般没必要

路线一:写 Modelfile 导入(最通用)

这是最通用也最可控的一条路。Modelfile 是一个纯文本文件,告诉 Ollama「这个模型从哪来、怎么跑」。最关键的只有一行 FROM,其余都是可选项。

  1. 写 FROMFROM 后面接本地模型文件的绝对路径,注意是绝对路径,相对路径很容易因为工作目录不同而找不到文件。
  2. 加可选参数温度、上下文长度、停止词这类写进 PARAMETER,不是必填,先不加也能跑起来,等跑通再调。
  3. 定角色(可选)SYSTEM 用来固定角色设定,和加载本身无关,但很多人顺手一起写,省一次二次修改。
  4. 执行 create用 ollama create 起一个你自己的模型名,这一步才是真正把文件登记进 Ollama 的仓库,名字别和官方 tag 撞。

FROM 还有一种写法:后面接一个已有的官方模型名。这跟接本地路径是两种用途——接官方名是在别人基础上改,比如换系统提示词;接本地路径才是导入自备文件。别搞混。

路线二:直接指定 GGUF 文件位置

手头就是一个 GGUF 单文件,想先试试好不好用,不想提前摆进 Ollama 的模型目录,那就直接用文件路径创建模型。这是最轻的一条路。它的好处是原始文件待在原地不动,你甚至可以边试边整理。

  • GGUF 放在任意目录都行,创建时把路径给对即可,不需要预先搬进某个固定文件夹
  • 适合临时试模型:试完把创建的模型删掉,原始文件还在原处,不污染仓库
  • 想省磁盘可以让 Ollama 引用原文件而不是复制一份,代价是原文件不能删也不能挪,挪了模型就废
  • 具体目录约定和当前版本的行为,以你机器上 ollama 的实际报错为准,别照抄网上几年前的帖子

路线三:从别的工具那边搬过来

很多人手上已经有一堆 GGUF,是 LM Studio 或者 llama.cpp 那边下下来的。好消息是,这类文件通常可以直接被 Ollama 复用,同一份文件不用重新下。坏消息是,别的推理框架导出的完整目录结构,一般不能直接喂给 Ollama,中间得过一道转换。

来源能不能直接复用注意点
LM Studio 的 GGUF基本可以挑出 GGUF 文件本身,别整个目录端过来
llama.cpp 的 GGUF基本可以同上,注意分片是否齐全
其他框架导出的目录通常不行要先把权重转成 GGUF
自己量化出的产物看输出格式输出是 GGUF 就能走,其他格式先转

搬过来之后,建议改一个自己的模型名,别和官方 tag 重名。重名在后续管理里非常容易乱,你想删官方模型结果删了自己的,或者反过来。

文件放哪、占多大、怎么迁

导入成功后,模型是被登记进 Ollama 自己的存储目录的,默认位置跟随操作系统,不是你放 GGUF 的那个文件夹。多个模型叠起来,磁盘消耗涨得很快,这一步最好提前有规划。

  • 默认存储目录和系统有关,找不准就去看 Ollama 服务启动时的日志,它会打出实际路径
  • 换盘或迁到数据盘靠环境变量改存储路径,改完必须重启服务才生效
  • 迁移的时候是搬整个模型目录,不是只搬那几个 GGUF 文件。搬漏了,模型列表里能看到但一跑就找不到
  • 动手前先把当前占用和剩余空间对一遍,去 /tools 里核对实际数字再做决定

导完别急着用,先跑通这三步

  1. 列模型列一遍模型,确认新模型出现在列表里,名字和你 create 时写的一致。名字对不上,后面引用全是错的。
  2. 对话一次直接跟它聊一句,看有没有正常出字。出不来,多半是格式问题或者分片缺失,不是参数问题。
  3. 看速度与占用测显存占用和出字速度,慢到不可用就回头调量化档位或者上下文长度。速度和资源相关的实测口径,去 /tools/speed-test 看当时的数字,别和其他人的机器直接对比。

跑不通的时候按这个顺序排查:先看报错提到的是哪个文件,再核对该文件是否完整(尤其是分片),最后才怀疑参数设置。绝大多数失败都发生在第一、二步,参数反而很少是元凶。

什么情况下这条路走不通

前面讲的都是能走通的情况,但有几类场景,再怎么折腾导入也解决不了,早点认出来能省时间。

  • 模型架构 Ollama 根本没适配过,GGUF 也转不出来,这时候只能换推理框架,不是导入技巧问题
  • 缺少对应运行库或者驱动太旧,表现是加载中途直接崩掉,看着像文件坏了其实是环境问题
  • 公司内网机器拿不到任何外部依赖,导入前要先把运行环境凑齐,否则每一步都卡
  • 超大参数模型哪怕量化后也超出单卡显存,这是硬件问题不是导入问题,参考 /compute/sizing 的判断口径

还有一个容易被忽略的点:判断标准本身是有时效的。Ollama 支持的格式和架构范围会随版本变化,网上旧帖说不行的情况,换个版本可能就行了;反之亦然。所以遇到卡壳,先去官方渠道看当前支持的清单,比翻别人的经验帖靠谱。

下一步导入成功只是第一步,模型跑起来之后速度和资源占用到底能不能接受,才是决定留不留它的关键。带着你的实际硬件配置去对照一遍,比在本地反复试参数省事。

常见问题

Ollama 能直接读 HuggingFace 下载的整个模型目录吗

一般不行。Ollama 认的是 GGUF 这类格式,HF 上很多仓库给的是 SafeTensors 或 .bin 权重加配置文件,需要先转成 GGUF。如果你下到的仓库里本来就有 GGUF 文件,那就直接拿那个用,不用转换。

导入后原始文件能删吗

看你怎么导的。如果是复制进 Ollama 自己的仓库,原文件删掉不影响;如果是引用原路径,删了或者挪了位置,模型就加载不了。稳妥做法是导入后先确认跑通,再去处理原文件。

Modelfile 里的 FROM 写相对路径行不行

建议写绝对路径,相对路径受你执行命令时所在目录影响,换个终端就报找不到文件,很容易误判成格式问题。写绝对路径虽然长一点,但复现性强,也方便贴给别人排查。

同一个 GGUF 能不能在 Ollama 和别的工具里同时用

可以,文件本身不绑定工具,只是两边各自登记一次。注意别让两个程序同时把整份权重压进同一块显存,会互相挤爆。分时使用最省心。

导入成功但回答质量明显不对,是什么问题

先怀疑对话模板不匹配,很多模型需要配套的提示格式,模板不对会答得乱七八糟。其次是量化档位太低。这两种都不是文件损坏,调模板或换更高精度版本即可。

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