Skip to main content

lllm3090

Local LLM serving for a single consumer GPU, with a browser control panel.

A llama.cpp engine, a web UI on loopback that starts and stops it and downloads models, and a curated model list where every entry has been checked to fit 24 GB with a usable context left over — recomputed for whatever card it finds.

Install

Debian 13 or a derivative (Ubuntu 24.04 / 26.04), an NVIDIA GPU — the catalogue is curated for 24 GB and computed for whatever you have — and the driver already working:

# uv, if you do not have it: https://docs.astral.sh/uv/getting-started/installation/
curl -LsSf https://astral.sh/uv/install.sh | sh

uv tool install lllm3090
lllm3090 setup

setup checks the hardware, installs the one apt package the engine needs, fetches a pinned llama.cpp build and starts the panel as a user service. It is safe to re-run and skips whatever is already done.

It touches nothing outside $HOME except libvulkan1, and downloads no model weights — you pick those from the panel.

Then open http://127.0.0.1:8080, download Qwen3-8B (5 GB) to prove the install works, and Qwen3.6-35B-A3B (17.7 GB) for real use — at 126 tok/s it is the fastest model that also reaches a full 262k context, which is what agentic work needs. gpt-oss-20b decodes faster still, at 160, in half the room.

Use

lllm3090 models          # what exists, what fits, what is downloaded
lllm3090 start Qwen3.6-35B-A3B
lllm3090 status
lllm3090 claude          # launch Claude Code against the local model
lllm3090 tui             # the panel, drawn in the terminal
lllm3090 stop            # free the VRAM

The engine exposes both the OpenAI API (/v1/chat/completions) and Anthropic's (/v1/messages) on 127.0.0.1:1919, so Claude Code and OpenAI-compatible clients both work against it without a translation proxy.

What travels to another card, and what does not

The catalogue makes two kinds of claim, and they do not travel together.

Whether a model fits, and what context it leaves, is arithmetic over capacity. The GPU is detected and the figures are computed for that card, so they are right on a 4090, on a 32 GB 5090, on a 96 GB PRO 6000, and on a 16 GB 5080 where most of the catalogue does not fit at all. An unrecognised card gets a profile synthesised from what nvidia-smi reports rather than falling back to 3090 assumptions.

How fast it runs is a measurement, true of the card it was taken on and nowhere else. Every tokens-per-second figure here was measured on an RTX 3090. Elsewhere they are labelled (other card) and are never scaled by a bandwidth ratio — that produces a guess which prints like a measurement.

So the name is the card it was built and measured on, not a limit on where it runs. lllm3090 bench is how another card gets real numbers of its own; see other cards.

Documentation

https://gilesknap.github.io/lllm3090

If you are weighing this against Ollama, LM Studio or llama-swap, that comparison is written down: what else is out there, and what this does that they do not — including when you should use one of them instead.

Contributing

Pull requests are welcome, including small ones — a model that works, a speed measured on a card nobody here owns. CONTRIBUTING.md has the setup, the three commands CI runs, and how to add a catalogue entry. No GPU is needed to work on this; the test suite runs without one.

The panel

The lllm3090 control panel

Engine state and VRAM on one line at the top, then one list of every model — what is on this disk and what is merely available — with what fits this card and what it will do, and the engine log streaming underneath. Each row carries the only control that makes sense for it: Start, Stop, Get, Cancel, or a too big pill. Click a row to read what the model is for. Downloads run in the background with progress, and resume from a part file if interrupted.

On a machine with no browser within reach of it — a text console, an SSH session without a tunnel — lllm3090 tui draws the same panel in the terminal.

Metadata

Release files for lllm3090 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lllm3090 0.6.0
File Size Uploaded Provenance Actions
lllm3090-0.6.0.tar.gz 472.7 kB Without provenance Details for lllm3090-0.6.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for lllm3090 0.6.0
File Interpreter ABI Platform Actions
lllm3090-0.6.0-py3-none-any.whl Python 3 none any Details for lllm3090-0.6.0-py3-none-any.whl

Total release size: 552.6 kB

Release files / lllm3090-0.6.0.tar.gz

Download URL lllm3090-0.6.0.tar.gz
Size 472.7 kB
Tags Source
SHA-256 checksum
How to use checksums
cde29d0c76722a655c21de9b5f418d55083a3b744560d96c7118b942b355a8bc
BLAKE2b-256 checksum
How to use checksums
b29902917b9ece2dccb6e8f99ed2d328dca5872b687744c84b473f2e7af99322
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / lllm3090-0.6.0-py3-none-any.whl

Download URL lllm3090-0.6.0-py3-none-any.whl
Size 79.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7a20e4ff2cdbd967fa85eef6872ccd0ef890bd014c67844407cde06eb45a26fc
BLAKE2b-256 checksum
How to use checksums
cdb9a24e946c828049a5c667f3d43b3f5d1275388fa580d78e7782d4b7df6e4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Security for lllm3090 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page