用 Ollama,在自己的电脑上把模型跑起来

用 qwen3.5:4b 在本机实测:Ollama 把模型文件下到硬盘,在本机开一个 HTTP 服务;拉取、运行、查看占用,模型名和标签怎么读,第一次请求为什么慢,从代码里怎么调用,占多少内存,以及它默认只在本机监听、没有鉴权。

模型基础Ollama本地模型实测2026-10-08

文字稿约 3600 字 · 按画面章节整理

一行命令,模型就在自己的电脑上回答了

在自己的电脑上,敲一行命令:ollama run,后面跟模型名,再跟一个问题。回答就出来了。这是这台电脑自己算出来的。模型还没加载,第一次问,一共用了 1.4 秒;紧接着再问一遍,只要 0.7 秒。同一个模型,同一台电脑,为什么差这么多?还有,它在电脑上开着一个端口,谁能连上?

今天,我们用 Ollama,在自己的电脑上把模型跑起来,再把背后的几件事,拆开看一看。

Ollama:本机上的一个模型服务

Ollama 是什么?打个比方,它像一个图书馆的管理员。模型文件,是书架上的书:下载一次,就一直放在硬盘上。要用的时候,管理员把书搬到阅览桌上,也就是把模型读进内存。它在本机开了一个窗口,等着别人来问:这是一个 HTTP 服务。HTTP,全称 HyperText Transfer Protocol,超文本传输协议。窗口的地址,默认是 127.0.0.1,端口 11434。你在终端里敲的 ollama 命令,还有你写的代码,都是到这个窗口前,排队的读者。

安装:一行命令,或者下载安装包

安装很简单。macOS 和 Linux,在终端里运行这一行,从官网下载安装脚本,交给 sh 执行。Windows,在 PowerShell 里,运行这一行。macOS 和 Windows,也可以去官网下载安装包。装好以后,服务一般会在后台启动;没在跑的话,手动运行 ollama serve。敲 ollama --version,看版本号;访问 11434 端口,它会回一句:Ollama is running。我们这台,是 0.40.0。

第一步:把模型拉到硬盘上

第一步,把模型拉下来:ollama pull,加上模型名。第一次拉,它会把模型的文件,一个个下载到硬盘上。我们这台已经下过了,再拉一次,它只核对了一下清单,就结束了。文件放在哪?官方文档写的位置,在屏幕上。

模型名和标签,怎么读

再看模型名。冒号前面,是模型;冒号后面,是标签。4b 说的是大小:ollama show 显示,参数是 4.5B,也就是 45 亿个。同一个模型,还有带后缀的标签,后缀写的是格式;每个后缀的意思,写在旁边。这些格式,大多是量化:每个参数少用几位来记,文件就小了。每个参数 16 位的,9.3 GB;8 位的,5.2 GB;4 位上下的两个,4.0 GB 和 3.3 GB。

不带后缀的 qwen3.5:4b,是哪一个?

那不带后缀的 qwen3.5:4b,是哪一个?它其实是一张清单,里面列了两个版本:一个 3.3 GB,由开源项目 llama.cpp 来跑;一个 4.0 GB,由 MLX 来跑:MLX 是苹果给自家芯片做的机器学习框架。在苹果芯片的 Mac 上,Ollama 拉的是 MLX 这个;其他电脑上,拉的是 3.3 GB 那个。ollama list 列出硬盘上的模型:我们这台 Mac 上,拉到的就是 4.0 GB 这个。同一个标签,换一台电脑,拿到的文件可能不一样;想固定用哪一个,就把完整的标签写出来,前提是那台电脑跑得了这个格式。

跑起来:ollama run

拉下来,就能跑了。ollama run,加上模型名和问题;再加上 verbose,让它把耗时也打出来。这是它的回答。下面几行,是 Ollama 自己记下的耗时:load duration,加载模型,用了 0.8 秒;prompt eval,读输入,55 毫秒;eval,生成回答,495 毫秒。不写问题,ollama run 会进入对话模式,一问一答;输入 /bye 退出。

模型现在在哪:ollama ps

模型这时候在哪?ollama ps,列出正在内存里的模型。一列一列看:SIZE,在内存里占了 4.1 GB,比硬盘上的 4.0 GB 多一点。PROCESSOR,100% GPU:模型全部放在 GPU 上;GPU 是 Graphics Processing Unit,图形处理器。CONTEXT,32768:这次加载的上下文上限,也就是一次最多能装下多少个 token,输入和输出加在一起;token 是模型读写文字的单位。官方文档说,默认上限按显存定:24 到 48 GiB 之间,是 32k。Mac 上,算的是 GPU 能用的那部分内存。RUNNER,mlx,就是刚才说的苹果的框架;UNTIL,是还会在内存里留多久:默认 5 分钟,减去刚过去的几秒,按整分钟往下取,显示成 4 分钟。ollama stop,马上卸载;再看 ps,就空了。ollama rm,是从硬盘上删掉,下次要用,得重新下载。

第一次为什么慢:在加载模型

回到开头的问题:第一次,为什么慢?我们把模型卸掉,问一次,再紧接着问两次,这样做了 7 轮。首字时间,也就是 TTFT,Time To First Token,是从发出请求,到第一个字出来。冷的时候,首字要 915 毫秒;热的时候,只要 127 毫秒。再用 Ollama 自己返回的耗时字段,把它拆开:load_duration,是加载模型:冷的这次,814 毫秒,占了首字时间的 89%。热的时候,只有 12 毫秒:模型已经在内存里,这点时间花在找到模型、安排请求上。prompt_eval_duration,是读输入,两次都不到 0.1 秒;热的这次反而略慢,我们没有查原因。eval_duration,是生成回答,大多在首字之后,不算在这条柱里。加载,包括启动跑模型的进程,把 4.0 GB 的模型文件读进来,准备好在 GPU 上算。这是这台 Mac、这个模型、一句很短的问题;文件可能还在系统的缓存里,我们没有清。隔一阵以后的第一次加载,我们见过一次 1.7 秒,没有查原因。模型更大,或者输入更长,要自己测。

热的状态,能保持多久?默认 5 分钟

热的状态,能保持多久?默认 5 分钟。我们看了一眼:Ollama 返回的卸载时间,正好在请求结束后 300 秒。5 分钟里没有新请求,模型就被卸载;下一个请求,又得重新加载。我们把它设成 10 秒,试了试:10.1 秒后,ps 里就没有它了;下一个请求,又花了 815 毫秒加载。想改,可以在请求里带上 keep_alive;命令行,用 keepalive 参数;或者启动服务时,设环境变量 OLLAMA_KEEP_ALIVE。设成负数,比如 -1,就一直留着;设成 0,答完马上卸载。留着不卸,代价是这些内存一直被占着,这里至少 4.1 GB。

从代码里调用:往 11434 发 HTTP 请求

命令行之外,代码怎么调用?就是往这个窗口发 HTTP 请求,调它的 API,也就是 Application Programming Interface,应用程序接口。一个是 Ollama 自己的接口,/api/chat:发模型名和消息。回来的,有回答,也有刚才那些耗时字段,单位是纳秒。另一个是 /v1/chat/completions,兼容 OpenAI 的接口格式:回答在 choices 里,用了多少 token,在 usage 里。已经按 OpenAI 写好的代码,把地址指向本机的 11434 端口,后面加上 /v1,就能试。客户端会要求填一个 API key;Ollama 不检查它,随便填一个就行。不过,格式一样,不等于什么都一样:比如上下文上限,这个接口就设不了。

放得下吗:文件,加上上下文那一份

下一个问题:放得下吗?硬盘上,这个模型 4.0 GB;刚加载完,占 4.07 GB。先看我们这台 Mac:每次重新加载,读一段不同长度的输入。输入越长,占得越多;读了 30419 个 token,就到了 5.21 GB。模型要把读过的内容记在内存里,后面每生成一个字,都要用到;这台 Mac 上,是读多少,才占多少。同一个标签的另一个版本,也就是其他电脑默认用的那个,就不一样了;我们在这台 Mac 上指定它来测:刚加载完,就按上下文上限,把这一份先占好了:上限 4096,占 3.18 GB;上限 32768,占 4.35 GB。之后不管读多少,都还是 4.35 GB。上下文上限,就是最多能装下多少 token;所以估算放不放得下:文件大小,加上按上下文上限算的那一份。这台 Mac 上,每多 1 万个 token,约多 0.38 GB。

谁能访问到它?

最后一个问题:谁能连上它?默认,Ollama 只在 127.0.0.1 上监听,这是本机自己的地址。我们在这台电脑上,换成它在局域网里的地址,去连同一个端口,被拒绝了:别的机器用这个地址,也连不上。不过,这台电脑上的任何程序,都连得上。第二件事:它自己没有鉴权。官方文档写着,本地请求不需要 key。谁能连上这个端口,谁就能用:调用模型,下载新模型,甚至删掉模型。想让别的机器访问,要给服务设 OLLAMA_HOST,比如 0.0.0.0,意思是所有网卡都监听。注意,要设在服务那边:Mac 的应用和 Linux 的服务,各有各的设法。这样一来,同一个网络里的人,都能直接调用它,不用任何密码;机器有公网地址的话,就是任何人。改之前,先想清楚谁能连上这个端口:防火墙、可信的网络,或者自己在前面加一层鉴权。

在自己的电脑上跑模型,先问三件事

下次在自己的电脑上跑模型,先问三件事:第一,放得下吗?文件大小,加上按上下文上限算的那一份;ollama ps 里,看 SIZE 和 PROCESSOR。第二,第一次为什么慢?是在加载,闲 5 分钟会卸掉;想常驻,就调 keep_alive,代价是一直占着内存。第三,谁能访问到它?默认只有本机,而且没有鉴权;改 OLLAMA_HOST 之前,先想清楚谁能连上。

这样看,它就是装在本机上的一个模型服务:文件在硬盘上,用的时候进内存,门开在本机的一个端口上,默认只有本机能进。弄清这几件事,在自己的电脑上跑模型,心里就有数了。