Files
Karti Tripathi a8c8532105
ci / rust (push) Failing after 18s
Lumbridge Compute — Apache-2.0
2026-08-03 23:47:51 -07:00

124 lines
5.4 KiB
Markdown

<div align="center">
# Lumbridge Compute
**The AI compute layer for Lumbridge clusters. Safe models, scenes, and evals on your own hardware.**
*Run many models on one box — safely — on NVIDIA DGX Spark (GB10), DGX Station (GB300), and RTX.*
</div>
---
Lumbridge Compute is the tool you install the minute you open your DGX Spark. Boxes like the
DGX Spark (GB10), DGX Station (GB300), and RTX workstations share **one memory pool**
between CPU and GPU with little swap. On that hardware, over-committing memory doesn't
fail gracefully — the whole machine thrashes and wedges (SSH and ping included) before
the OOM killer acts. Lumbridge Compute makes that impossible, and turns the box into something you
can load with different workloads on a schedule.
> **exo runs one model across many boxes. Lumbridge Compute runs many models on one box — safely.**
> They're orthogonal; you can run Lumbridge Compute on each node of an exo cluster.
## Three layers
| Layer | Analogous to | Job |
|---|---|---|
| **Governor** | kernel / memory cgroup + OOM policy | Nothing starts unless it fits a hard budget; a watchdog kills the newest model *before* the box wedges. |
| **Scenes** | systemd targets | Named, shareable, activatable bundles of models (`studio`, `darkroom`). |
| **lumbridge-compute** (the shell) | the CLI you install | Onboard a fresh box, manage models, activate/schedule scenes. |
## The Governor (why Lumbridge Compute exists)
Unified memory means no separate VRAM pool to bounce off. vLLM, diffusers, and friends
will happily reserve past 100% of the shared pool, and the box wedges. The Governor
prevents this with two mechanisms:
1. **Admission control** — a model starts only if its declared footprint fits the budget
given what's already running, plus a safety margin.
2. **Watchdog** — a 1 Hz thread on `MemAvailable`; if it dips below a critical floor, it
kills the most-recently-started model before thrash. A backstop for a wrong estimate.
## Scenes
A **scene** is a named set of models brought up together — the unit you activate, publish,
and schedule. A single unified-memory box can't hold every model at once, so scenes let
you **time-multiplex** it: run a live voice assistant by day, then switch to an overnight
image farm at 3am. One box, the utilization of several.
Scenes reference **model ids**, never weight paths — so requantizing or upgrading a model
never breaks a published scene. See [`docs/scene-spec.md`](docs/scene-spec.md), and
[`docs/positioning.md`](docs/positioning.md) for how Lumbridge Compute relates to Ollama / llama-swap / exo.
## Evals
Lumbridge Compute ships a native, model-server-agnostic evaluation runner. Versioned YAML suites
measure streamed TTFT, client-observed prefill throughput, decode throughput, and
deterministic capability assertions against any OpenAI-compatible endpoint.
```bash
lumbridge-compute eval ls
lumbridge-compute eval run smoke
lumbridge-compute eval run performance --repeat 5
lumbridge-compute eval run finance-core
```
Every run writes a portable JSON artifact for regression tracking and future eval
registries. See [`docs/evals.md`](docs/evals.md).
## Install
```bash
# from source (single static binary, no runtime deps)
cargo install --path .
```
## Usage
```bash
lumbridge-compute status # Governor: memory, budget, running set, headroom
lumbridge-compute model ls # registry: footprints + live state + which port
lumbridge-compute scene ls # scenes with total footprint
lumbridge-compute scene show darkroom # models + footprints + admission verdict
lumbridge-compute scene adopt voice-qwen # one-time identity capture for a legacy live node
lumbridge-compute scene resume # desired Scene, then last-known-good fallback
lumbridge-compute gateway # stable streaming endpoint -> local model server
lumbridge-compute agent # resident resume + gateway + memory supervisor
# planned:
lumbridge-compute model pull <hf-id> # footprint-aware; warns if no scene can hold it
lumbridge-compute scene schedule darkroom 03:00 04:00 # time-multiplex the box
```
By default Lumbridge Compute reads `registry/` and `scenes/` from the current directory (override with
`--root <dir>`, `$LUMBRIDGE_COMPUTE_ROOT`, or the compatibility variable `$KUDA_ROOT`).
## Status
The Governor, identity-bound process ownership, transactional Scene switching,
persistent desired state, last-known-good recovery, resident agent, streaming gateway,
eval runner, and watchdog work today. Next: the model artifact manager (`pull`), fleet API,
and scheduler. See [node operations](docs/operations.md) and the stable
[scene spec](docs/scene-spec.md).
## Compatibility
Lumbridge Compute grew out of an earlier prototype named Kuda. The rename is complete: the
executable is `lumbridge-compute`, manifests declare `apiVersion: lumbridge/v1`, and the root
is `$LUMBRIDGE_COMPUTE_ROOT`.
Two compatibility surfaces are kept deliberately, so a node that predates the rename keeps
running without a flag day:
- `$KUDA_ROOT` is still read if `$LUMBRIDGE_COMPUTE_ROOT` is unset.
- `.kuda/` remains the on-disk state directory name, and `apiVersion: kuda/v1` is still
accepted on eval suites.
Both are inert aliases — nothing new should use them.
Lumbridge Compute runs on NVIDIA hardware but is independent and is not affiliated with or endorsed by NVIDIA.
## License
Apache-2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).