Ollama 导入自定义模型
官方模型库覆盖不到的场景有三个:自己微调的权重、公司内部训练的模型、以及从 Hugging Face 下下来的非 Ollama 格式模型。这三种都能用 ollama create 导入成本地模型,之后就能像 llama3.2 一样直接用 ollama run 调用。
版本基线 v0.40.12,官方
docs.ollama.com/import。
一、先分清两条导入路径
导入方式由权重格式决定,不是由你从哪下载决定:
| 权重格式 | 导入方式 | Ollama 是否自动量化 |
|---|---|---|
| Safetensors | FROM 指向目录 |
是 |
| GGUF(单文件) | FROM 指向文件 |
否,需提前量化 |
| GGUF(分片) | FROM 用通配符匹配全部分片 |
否 |
这个差别很关键:Safetensors 走的是 Ollama 自己的转换流程,会顺带做量化;GGUF 已经是量化后的成品,Ollama 只负责打包成模型,不会再动权重。
二、导入 Safetensors 模型
Safetensors 是 Hugging Face 上的主流格式。假设你已经把权重下载到 /path/to/safetensors/directory,里面是 config.json、model.safetensors(或多分片)等文件。
第一步,在同一目录下创建 Modelfile:
FROM /path/to/safetensors/directory
如果 Modelfile 就和权重放在一起,可以直接写相对路径,省掉长串绝对地址:
FROM .
第二步,在 Modelfile 所在目录执行创建命令:
ollama create my-model
第三步,验证:
ollama run my-model
my-model 是你自己起的名字,只要不和已有模型重名就行。
三、导入 GGUF 模型
GGUF 是 llama.cpp 生态的格式,社区里绝大多数量化模型都是这个格式。Ollama 在导入时不会量化 GGUF,所以如果你手上是 fp16 原始权重,得先用 llama.cpp 的 llama-quantize 工具转成 Q4_K_M 之类的量化版本再导入。
单文件 GGUF
FROM /path/to/file.gguf
分片 GGUF
大于几 GB 的模型常被切成多个分片(model-00001-of-00004.gguf 这种)。保持原始分片文件名不变,用通配符一次性匹配:
FROM /path/to/model-*.gguf
不要手动重命名分片文件,Ollama 靠文件名识别分片顺序,改名会直接报错。
创建并测试
ollama create my-model
ollama run my-model
四、导入时顺便定制参数
Modelfile 不只能写 FROM,还可以带上系统提示词和推理参数,导入出来的就是一个「开箱即用」的定制模型:
FROM ./model-Q4_K_M.gguf
PARAMETER temperature 0.3
PARAMETER num_ctx 8192
PARAMETER stop "<|im_end|>"
SYSTEM """
你是一名严谨的中文技术文档翻译,只输出译文,不做解释。
"""
导入后这个模型的默认温度就是 0.3、默认上下文 8192,调用时不用每次重复传参。各参数的完整含义见 5.1 Ollama Modelfile 参考。
如果 Modelfile 没命名为默认的 Modelfile,用 -f 显式指定:
ollama create my-model -f ./MyModelfile
五、分享到 ollama.com
导入好的模型可以推到官方库,让别人 ollama run 你的用户名/模型名 直接使用。
准备账号与公钥
- 到
ollama.com/signup注册。用户名会成为模型名的一部分(如jmorganca/mymodel),注册时就想好。 - 打开
ollama.com/settings/keys,页面会告诉你本机公钥的位置。 - 点击
Add Ollama Public Key,把公钥内容粘贴进去。
公钥文件位置(id_ed25519.pub):
| 系统 | 路径 |
|---|---|
| macOS | ~/.ollama/id_ed25519.pub |
| Linux | /usr/share/ollama/.ollama/id_ed25519.pub |
| Windows | C:\Users\<用户名>\.ollama\id_ed25519.pub |
也可以用 ollama signin 登录,App 端则在设置页登录。
命名必须带用户名
推送前模型名必须是 用户名/模型名 的形式。本地模型叫 mymodel 时,先用 ollama cp 复制一份改名:
ollama cp mymodel myuser/mymodel
ollama push myuser/mymodel
推送成功后,其他人这样用:
ollama run myuser/mymodel
六、常见卡点
| 现象 | 原因 | 处理 |
|---|---|---|
ollama create 报找不到权重 |
FROM 路径写错,或 Safetensors 目录里缺 config.json |
检查路径;确认目录是完整的 HF 权重目录 |
| 导入的 GGUF 效果明显变差 | 本来就是低比特量化版(Q2/Q3),不是导入损坏 | 换 Q4_K_M 及以上版本重新导入 |
| 分片模型报错 | 分片文件名被改过 | 恢复原始 model-0000x-of-0000y.gguf 命名 |
ollama push 提示未授权 |
公钥没添加到账号,或模型名没带用户名 | 补公钥;先 ollama cp 改名 |
| 显存不够 | 模型太大,或 num_ctx 设太高 |
调小 num_ctx,换更小量化 |
导入完成后,模型和其他模型一样受 keep_alive、上下文长度等机制约束,想了解这些通用行为见 6.1 Ollama 上下文长度。
动手试
拿一个现成的小 GGUF 走完整流程,十分钟就能把导入链路跑通:
## ① 准备 Modelfile
cat > Modelfile <<'EOF'
FROM ./qwen2.5-0.5b-instruct-q4_k_m.gguf
PARAMETER temperature 0.7
EOF
## ② 导入
ollama create qwen-test
## ③ 确认已入列表
ollama list
## ④ 试跑
ollama run qwen-test "用一句话解释什么是量化"
能正常出结果,就说明你的导入环境没问题,可以接着导自己的模型了。

TRAE-AI编程


更多建议: