Ollama API 列出运行中的模型

2026-10-29 19:01 更新

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% 就说明显存不够,考虑换更小的量化版本。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号