Ollama API 列出运行中的模型
GET /api/ps 列出当前已加载进内存的模型,等价于 ollama ps。它是判断「模型到底跑在 GPU 还是 CPU」的官方依据。
版本基线 v0.40.12,官方
docs.ollama.com/api/ps。
一、调用
curl http://localhost:11434/api/ps
二、响应结构
{
"models": [
{
"name": "gemma4",
"model": "gemma4",
"size": 6591830464,
"digest": "c6eb396dbd5992bbe3f5cdb947e8bbc0ee413d7c17e2beaae69f5d569cf982eb",
"details": {
"parent_model": "",
"format": "gguf",
"family": "gemma4",
"families": ["gemma4"],
"parameter_size": "8.0B",
"quantization_level": "Q4_K_M"
},
"expires_at": "2025-10-17T16:47:07.93355-07:00",
"size_vram": 5333539264,
"context_length": 4096
}
]
}
三、四个关键字段
| 字段 | 说明 |
|---|---|
size |
模型占用的总内存(含 GPU 显存 + 系统内存) |
size_vram |
其中在 VRAM(显存) 里的部分 |
expires_at |
何时被卸载 |
context_length |
当前实际分配的上下文长度 |
判断跑在哪:算 size_vram / size
这是 /api/ps 最核心的用法:
| 比值 | 含义 |
|---|---|
| ≈ 1.0(100%) | 全部在显存,最快 |
| ≈ 0(0%) | 全部在系统内存,跑 CPU,慢一个数量级 |
| 0.3 – 0.7 | 模型大于显存,被拆开跑,速度明显下降 |
示例数据:5333539264 / 6591830464 ≈ 0.81,即 81% 在显存——说明模型略大于可用显存,有一部分落在了内存里。
context_length 的用途
这个字段反映实际运行时分配的上下文窗口,而不是模型支持的最大值。
常见误区:VS Code 等工具显示的是模型上限(比如 128k),但这里可能只有 4096。以 context_length 为准。
expires_at
默认模型在最后一次请求后 5 分钟卸载。这个字段告诉你还能用多久不用重载。
- 想延长:请求时带
keep_alive: -1(常驻)或"24h" - 想立刻释放:
keep_alive: 0,或用ollama stop
四、Python 示例
import requests
from datetime import datetime
models = requests.get("http://localhost:11434/api/ps").json()["models"]
if not models:
print("当前没有加载任何模型")
for m in models:
total = m["size"]
vram = m.get("size_vram", 0)
ratio = vram / total if total else 0
where = "100% GPU" if ratio > 0.98 else ("100% CPU" if ratio < 0.02 else f"{ratio:.0%} GPU")
print(f"{m['name']:<25} {total/1e9:>5.1f} GB {where:<10} ctx={m['context_length']}")
print(f" 卸载时间: {m['expires_at']}")
五、和 /api/tags 的区别
| 端点 | 返回 | 对应命令 |
|---|---|---|
/api/tags |
磁盘上有的模型 | ollama list |
/api/ps |
内存里加载的模型 | ollama ps |
一个模型可以「在磁盘上但没加载」,此时 tags 有它、ps 没有。反过来不会发生。
常见问题
| 现象 | 原因 | 处理 |
|---|---|---|
| 返回空数组 | 当前无模型加载(可能刚卸载) | 发一次请求再看 |
size_vram 为 0 |
跑在 CPU 上 | 查驱动和算力,见 10.1 |
context_length 很小 |
显存档位决定默认值 | 调 num_ctx |
| 模型反复加载 | keep_alive 太短,请求间隔长 |
加大 keep_alive |
动手试
## ① 先触发一次加载
curl -s http://localhost:11434/api/generate -d '{"model":"gemma4","prompt":"hi","stream":false}' > /dev/null
## ② 看它加载到哪、上下文多大
curl -s http://localhost:11434/api/ps | python -c "
import sys,json
for m in json.load(sys.stdin)['models']:
r = m['size_vram']/m['size'] if m['size'] else 0
print(f\"{m['name']} VRAM占比 {r:.0%} 上下文 {m['context_length']}\")"
VRAM 占比低于 100% 就说明显存不够,考虑换更小的量化版本。