codecamp

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

Ollama API 列出模型
Ollama API 查看模型详情
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Ollama Cloud

Ollama CLI 命令行参考

Ollama Modelfile 参考

Ollama 上下文长度

Ollama 导入自定义模型

Ollama 常见问题

Ollama 硬件支持

Ollama 故障排查

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }