刚装好 Ollama 的人常卡在同一处:明明敲过命令,模型却像没下载完;或者以为 run 只是启动,结果它顺手又下了一遍。这篇不解释 Ollama 是什么,只把 pull 和 run 的分工、执行顺序、以及「看起来一样其实不一样」的几种情况拆开讲,最后给一份从报错现象反推原因的排查顺序。
刚装完 Ollama 的人十有八九卡在同一个地方:命令敲下去了,终端半天没动静,以为装坏了;或者好不容易能对话了,过两天换个模型又「像没下载过」。这两种情况,多半不是软件坏了,而是把 pull 和 run 的活儿想重了或想反了。这篇不聊 Ollama 是干嘛的,只把这两个命令的分工、先后关系,以及看起来一样其实不一样的现象拆开讲。
记住一句话就不会乱:pull 只负责把模型搬到本地,搬完就走人;run 是「先看本地有没有,没有就搬,然后开一个对话」。所以你按 run 时看到一段下载进度,那是正常流程,不是卡死。判断当前到底在干嘛,不看命令名,看终端有没有进入对话提示符。
pull 是下载,run 是「下载 + 启动」
- pull
- 只做一件事:把模型权重拉到本地存储,拉完命令就结束,不进对话界面
- run
- 先查本地有没有同名模型,没有就顺带下载,然后起一个交互会话;下载和启动是连在一起的两步
- 共用存储
- 两者读的是同一份本地模型目录,pull 过的 run 时不会重下;run 下过的,之后 pull 也几乎瞬间完成
- 想先把模型备好、或者只想刷新本地副本,用 pull,它不会弹对话,适合放在脚本里跑
- 想直接开聊,用 run,接受它可能带一段下载时间,别急着 Ctrl+C
- 判断是否真的开始对话:看终端有没有出现对话输入提示符,没有就还在下载或已退出
- 想确认本地到底有哪些模型,用列表命令看,别凭记忆;模型名后面的标签也要看清楚
执行顺序:谁先都行,但别在同一模型上同时来
先 pull 后 run 是最省心的路径。下载这一步单独跑,失败了重试就好,不会把「下载」和「启动」两件事搅在一起,出问题时也容易判断是哪一环。先 run 也完全可以,它内部会补下载,代价是下载中断时你看到的报错更像启动失败,新手容易误判成软件问题,然后去重装。
- 第一步:先确认本地有没有跑列表命令看目标模型和标签是否已在本地。没有就 pull,有就直接 run,省一轮等待。
- 第二步:pull 时盯住输出下载过程中终端会显示进度,等它自然结束、命令退出。中途断网就重跑,别在同一个终端叠加第二条命令。
- 第三步:run 前确认名字写全带标签的模型名要写完整,只写前半段会走默认版本,容易出现「我明明 pull 过」但 run 的是另一份的现象。
- 第四步:确认存储路径模型目录被环境变量改过时,你印象里的位置和实际存放位置可能不是同一个,换终端或换用户后会像模型凭空消失。
另一个容易踩的坑是并发。同一个模型别在多个终端同时 pull,也别一边 run 一边 pull,并发写同一份模型文件,可能表现为下载卡住、文件不完整、下次 run 又要重下。要同时准备多个模型,就排队一个个来。
四种常见误用,对照现象看
| 你以为的 | 实际发生的 | 怎么确认 |
|---|---|---|
| run 只是启动,应该秒进对话 | 它在后台先下载,所以有等待 | 看终端有没有对话提示符和下载进度 |
| pull 完 run 还是慢,是不是没下完 | 慢在加载进显存和推理,不是下载 | 重复 pull 一次,若几乎瞬间完成就说明本地已有 |
| 能 run 就能离线用 | 当前能跑不代表断网后还能跑 | 断网前先用列表命令确认模型确实在本地目录里 |
| 删了模型还 run 得动,卸载没生效 | run 会自动重新下载一份 | 列表命令看本地是否又出现了同名模型 |
这四种误用背后是同一个习惯:把命令名当成行为本身。实际行为取决于本地状态和参数,所以排查永远从「本地现在有什么」开始,而不是从「我记得我干过什么」开始。
出问题时的排查顺序
按下面这个顺序走,能避免大多数「瞎折腾」:先确认本地有没有,再看路径和空间,然后看网络,最后才轮到 GPU 和显存。下载行为本身不吃显存,把下载问题和推理问题混在一起定位,是最浪费时间的做法。
- 第一步:列表命令确认目标模型和标签在不在本地,不靠记忆
- 第二步:看模型目录的实际位置和剩余空间,路径可能被环境变量改过
- 第三步:看网络与镜像设置,分清「下载慢」和「下载失败」,前者调镜像来源,后者看报错信息
- 第四步:再看 GPU 与显存,这一步只影响推理速度,不影响下载能否完成
- 第五步:拿不准是慢还是卡,先用站内测速页面量一个基线,再对比判断
常见问题
只 pull 不 run,模型能用吗?
能存在本地,但它不会自己开始服务。pull 只是把文件放到本地存储里,你得用 run 或者通过接口把它加载起来才会有响应。可以理解成「下载完成」和「已经跑起来」是两个状态,前者是后者的前提,不是替代。
run 的时候会重新下载一遍吗?
本地已有且标签一致时不会重复下载,只会做加载。但如果模型名写法不同、或者指定的标签和已下载的对不上,它就会当成另一个模型去取。所以「我明明下过」和「它又在下载」同时出现,通常先查模型名的标签写法。
怎么判断当前卡在下载还是卡在启动?
看终端输出:有进度条或下载字节数就是在取文件,进度走完之后的等待更可能是加载权重和分配显存。另一个办法是先单独 pull 一次,如果 pull 很快就结束,说明文件早就在本地,那你遇到的慢属于启动或推理环节,不用再折腾网络。