刚装完 Ollama,教程里一会儿让你敲 run,一会儿让你敲 serve,你照抄之后发现一个能打字聊天、一个窗口挂那儿没动静,也不知道后面接第三方工具该用哪条。这篇就按「你想干什么」来拆这两个命令的职责边界,顺带给出排查顺序:什么时候只用 run 就够,什么时候必须先把 serve 起起来。
刚装完 Ollama 的人经常会遇到这种局面:一篇教程让你敲 run,另一篇让你敲 serve,你两边照抄,结果一个能打字聊天、一个窗口挂在那儿半天没动静,心里直打鼓是不是装坏了。其实这俩命令压根不是同一件事,一个是给你自己用的,一个是给别的程序用的。
下面按「你现在想干什么」来拆这两条命令的职责边界,最后给一套连不上、跑不动时的排查顺序。看完你就能自己判断:这次该敲哪条,以及为什么敲完没反应其实是正常的。
run 是「拉模型 + 开对话」,面向的是人
敲 ollama run 后面跟模型名,它会先看本地有没有这个模型,没有就先去下载,然后直接进一个交互式对话框,你在终端里打字它就回你。这个终端窗口一关,这次会话就结束了。它的定位就是给单人临时用:试模型、跑一段提示词、看看中文答得顺不顺。
- 先在本地找模型,找不到就拉,拉完才进对话,第一次会明显慢,属于下载不是卡死
- 进去之后是纯交互,关掉终端会话就没了,不会在后台留东西
- 也可以不带对话,直接在命令后面跟一句话,适合塞进脚本做一次性批处理
- 每次调用都会重新加载模型,反复跑很多次并不划算,这是它的天然短板
serve 是「起一个常驻服务」,面向的是别的程序
ollama serve 干的事是把本地推理服务监听起来,对外提供一个 HTTP 接口,之后别的程序——聊天界面、知识库工具、编辑器插件、你自己写的脚本——才能通过一个本地地址去调用模型。它本身不带对话界面,所以敲完看到日志在滚、命令行不返回提示符是正常的,它就是在那儿等请求。
| 对比项 | run | serve |
|---|---|---|
| 服务对象 | 你自己,人在终端里 | 别的软件、别的机器 |
| 敲完的表现 | 进对话,能打字 | 没反应,只有日志,等请求 |
| 生命周期 | 窗口关了就结束 | 一直挂着,直到你手动停 |
| 典型使用场景 | 试模型、跑提示词、一次性调用 | 接第三方工具、局域网共用 |
判断标准很简单:要给别人用、给别的软件用,就必须有 serve 在跑;只有你自己在终端里聊,run 就够。另外桌面版安装后通常已经把这个服务挂在后台了,你手动再 serve 一遍很容易撞端口,这是新手最常见的报错来源。
先问自己一句话,再决定敲哪条
- 只有你一个人在终端里试直接 run,别折腾服务。试完就关,不占端口也不留后台进程。
- 要让别的软件连上来先把 serve 起稳,确认服务在监听,再去那些工具里填本地地址;顺序反了你会一直怀疑模型没装好。
- 要在局域网里给同事共用光 serve 还不够,还要改绑定的监听地址,不改的话别人那台机器根本连不到你这边。
- 不确定服务到底起没起先在本地回环地址上打一次接口看有没有响应,确认通了再去配上层工具,别一上来就怀疑模型坏了。
连不上、跑不动时的排查顺序
这类问题九成不是模型本身的问题,而是服务、地址、模型名三样里错了一样。按下面的顺序一条条排,比乱改配置快得多。
| 顺序 | 看什么 | 不对时的典型表现 |
|---|---|---|
| 第一步 | 进程和端口 | 服务压根没起,或两个服务抢同一个端口 |
| 第二步 | 调用地址 | 容器里跑的软件和宿主机用的地址不是一回事 |
| 第三步 | 模型名 | 接口通了但提示找不到模型,或者模型装在另一个目录 |
| 第四步 | 硬件与量化档位 | 前面都通了但很慢,属于显存和量化档位的问题 |
- 先看进程:服务是不是已经在跑,端口有没有被别的程序占着,抢端口是最容易被忽略的一类
- 再看地址:调用方填的监听地址和端口,跟服务实际监听的是不是同一个
- 然后看模型:接口通但说找不到模型,多半是名字没对上或者装在了别的目录
- 最后才谈性能:前面都通了但还是慢,去站内的部署与硬件页面,按你手上的卡和模型算一遍再调档
如果你是在给一台局域网机器配共用服务,尤其要注意监听地址这一项:只 serve 不改地址,同网的同事还是连不上。到底该填哪个地址、自己的机器适合跑哪一档模型,这些会随硬件和模型变化,到 /models/deploy 核对当时的说明,比照着老教程抄靠谱。
下一步如果你的目标是让第三方工具连上本地模型,先看清不同工具的接入方式和常见坑,再动手配地址,能少走一轮弯路。→常见问题
只敲 run 不敲 serve,会不会少点什么功能?
不会。run 本来就依赖后台服务,只是安装包一般帮你自动起了,所以你感觉不到。只有当你要让别的程序来调模型时,才需要自己确认 serve 是不是起着、监听地址对不对。
serve 敲完之后终端一直没反应,是卡住了吗?
大概率是正常的,它就是在监听等请求。你可以另外开一个终端,用 run 或者命令行请求本机接口试一下;如果两边都动不了,再回去查端口占用和服务有没有真的起来。
这两个命令哪个更吃显存?
命令本身不决定显存占用,决定占用的是模型大小、量化档位和同时有几个请求。同一台机器上 run 和 serve 跑的是同一份权重,去 /models/deploy 按模型和量化方式算一遍更靠谱。