mirror of
https://github.com/mudler/LocalAI.git
synced 2026-09-28 09:05:05 -04:00
* feat(system): report per-model DRM VRAM Expose optional resident device memory for local backend process trees. Deduplicate DRM clients and omit unsupported or incomplete readings. Document accounting limits and preserve a measured zero in JSON. Closes #11970. Assisted-by: Codex:gpt-6 * fix(system): document trusted procfs reads Scope G304 annotations to paths built from the fixed procfs root, integer process IDs, and kernel directory entries. These reads accept no user-controlled path components. Assisted-by: Codex:GPT-6 gosec --------- Co-authored-by: localai-org-maint-bot <306269227+localai-org-maint-bot@users.noreply.github.com>
130 lines
4.3 KiB
Markdown
130 lines
4.3 KiB
Markdown
+++
|
|
disableToc = false
|
|
title = "System Info and Version"
|
|
weight = 23
|
|
url = "/reference/system-info/"
|
|
+++
|
|
|
|
LocalAI provides endpoints to inspect the running instance, including available backends, loaded models, and version information.
|
|
|
|
## System Information
|
|
|
|
- **Method:** `GET`
|
|
- **Endpoint:** `/system`
|
|
|
|
Returns available backends and currently loaded models.
|
|
|
|
### Response
|
|
|
|
| Field | Type | Description |
|
|
|-----------------|----------|-------------------------------------------|
|
|
| `backends` | `array` | List of available backend names (strings) |
|
|
| `loaded_models` | `array` | List of currently loaded models |
|
|
| `loaded_models[].id` | `string` | Model identifier |
|
|
| `loaded_models[].backend` | `string` | Backend serving the model, from its config. Omitted when the model was loaded without one |
|
|
| `loaded_models[].process` | `object` | The backend process serving the model on this host. Omitted when there is no local process (a distributed worker holds the model) or it could not be read |
|
|
| `loaded_models[].process.pid` | `integer` | Process ID |
|
|
| `loaded_models[].process.rss_bytes` | `integer` | Resident host memory, in bytes. Weights offloaded to a GPU are not included |
|
|
| `loaded_models[].process.memory_percent` | `number` | `rss_bytes` as a percentage of host RAM |
|
|
| `loaded_models[].process.cpu_percent` | `number` | Share of the whole host's CPU used since the previous call, 0-100. Omitted on the first call that sees the process, because there is no earlier reading to compare against |
|
|
| `loaded_models[].process.started_at` | `string` | When the process started (RFC 3339) |
|
|
| `loaded_models[].size_vram` | `integer` | Optional DRM-accounted resident device memory, in bytes |
|
|
|
|
### Per-model VRAM
|
|
|
|
On Linux, `size_vram` reports resident device memory for the local backend
|
|
process and its child processes. LocalAI reads `drm-resident-local*` and
|
|
`drm-resident-vram*` from `/proc` and counts each DRM client once per GPU.
|
|
Host-memory regions are excluded. The reading includes buffers attributed
|
|
to the backend, without separating weights, KV cache, and other allocations.
|
|
See the [kernel DRM accounting specification](https://docs.kernel.org/gpu/drm-usage-stats.html)
|
|
for these counters.
|
|
|
|
The field is omitted when accounting is unavailable or incomplete. This
|
|
includes external and distributed backends, macOS, proprietary NVIDIA
|
|
drivers, primary DRM nodes (`/dev/dri/card*`), missing resident counters,
|
|
and unreadable process information.
|
|
A present value of `0` means the supported counters report zero bytes.
|
|
Treat an absent field as unknown.
|
|
|
|
This is a snapshot of driver accounting, not a memory reservation. Shared
|
|
buffers can appear in different clients' counters, and allocations can change
|
|
during collection. Do not treat the sum across models as exclusive physical
|
|
GPU usage. These readings do not replace capacity checks when scheduling work.
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
curl http://localhost:8080/system
|
|
```
|
|
|
|
### Example response
|
|
|
|
```json
|
|
{
|
|
"backends": [
|
|
"llama-cpp",
|
|
"huggingface",
|
|
"diffusers",
|
|
"whisper"
|
|
],
|
|
"loaded_models": [
|
|
{
|
|
"id": "my-llama-model",
|
|
"backend": "llama-cpp",
|
|
"size_vram": 5368709120,
|
|
"process": {
|
|
"pid": 48213,
|
|
"rss_bytes": 5368709120,
|
|
"memory_percent": 7.8,
|
|
"cpu_percent": 42.5,
|
|
"started_at": "2026-09-21T09:12:44Z"
|
|
}
|
|
},
|
|
{
|
|
"id": "whisper-1",
|
|
"backend": "whisper"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
`cpu_percent` covers the time since the previous call to this endpoint, so a
|
|
dashboard polling every few seconds gets a current reading. The WebUI's
|
|
**Operate → This machine** page polls it every five seconds.
|
|
|
|
---
|
|
|
|
## Version
|
|
|
|
- **Method:** `GET`
|
|
- **Endpoint:** `/version`
|
|
|
|
Returns the LocalAI version and build commit.
|
|
|
|
### Response
|
|
|
|
| Field | Type | Description |
|
|
|-----------|----------|-------------------------------------------------|
|
|
| `version` | `string` | Version string in the format `version (commit)` |
|
|
|
|
### Usage
|
|
|
|
```bash
|
|
curl http://localhost:8080/version
|
|
```
|
|
|
|
### Example response
|
|
|
|
```json
|
|
{
|
|
"version": "2.26.0 (a1b2c3d4)"
|
|
}
|
|
```
|
|
|
|
## Error Responses
|
|
|
|
| Status Code | Description |
|
|
|-------------|------------------------------|
|
|
| 500 | Internal server error |
|