Snapshot of October 29, 2026. This dossier describes the four repositories as they stood that day; the projects have moved on since, and the repositories are the authority. Underlined links lead to the sources, frozen at their state of that day. What came next lives on gnu6dotlive.github.io.

Dossier 2 · the engine

gnostral.rs

An open lab trying to run large artificial-intelligence models on a modest graphics card — and publishing its measurements, including the disappointing ones.

Research v0.8.0 MIT licence

On this page
  1. In one picture
  2. The problem, then the trick
  3. What was measured — and within what frame
  4. Compared with what, exactly?
  5. How a measurement becomes evidence
  6. What it is not
  7. Why the failures are public
  8. History: fifteen quests in fifteen days
  9. Projections: the roadmap
  10. What it changes, depending on who you are
  11. Going further
2.12×faster than the previous version of the same engine
20.18tokens per second, against 9.51 at the start
22 → 13layers placed on the card depending on free memory
3/3model families served by the same executable

In one picture #

The analogy

Picture a warehouse and a small counter. The counter is the graphics card: narrow, but very fast. The warehouse is main memory: huge, but slow to serve from.

A 30-billion-parameter model does not fit on the counter. The trick is to put only the three billion pieces needed right now on it, and fetch the others from the warehouse only when they are used. That is what gnostral.rs is about.

The problem, then the trick #

On the left, a 30-billion-parameter model does not fit in 8 GB of graphics memory. On the right, only three experts stay on the card; the others wait in main memory.
A storage problem. A "mixture of experts" model activates only a small part of its networks for each word. That imbalance is what makes splitting it possible.

The reference machine is not a datacenter server: an RTX 3070 with 8 GB of graphics memory and 32 GB of main memory. It is a personal-workstation configuration — and that is exactly what makes the research interesting.

The headline result: by keeping the always-used parts on the card and borrowing the quantised experts from main memory, throughput goes from 9.51 to 20.18 tokens per second, or 2.12 times faster. Measured locally, three repetitions per condition, responses identical byte for byte.

Real-time animation: two lanes receive the same answer. With the patch, the question is read in 2.7 seconds and the 209 tokens arrive in 13 seconds; without it, reading takes 7.2 seconds and the text has only 68 tokens at the end.
The same answer, at the measured pace. Both lanes write exactly the same text — verified byte for byte. Without the patch, reading the question takes 7.2 s, then 9.5 tokens per second; with it, 2.7 s, then 20.2 tokens per second. The time shown is real time.

What was measured — and within what frame #

MilestoneResultWhat it does not say
Borrowed experts
Q-010
9.51 → 20.18 tokens/s on a 512-token answer, median of three repetitions, 2.12× Not faster than llama.cpp (34.54 tokens/s on the same machine); not valid for every architecture.
Placement at load time
Q-011
22/21/21 layers on the card → 13/12/13 under a memory reservation Initial placement only; no migration while serving.
One engine, three families
Q-012
3/3: dense model, embeddings, quantised MoE Three successive servers; no co-residence, no production stability.
A real dense process
Q-013-C
Exact semantic answer "GNOSTRAL"; +8 MiB of GPU memory after shutdown A single model, a short-lived server, not a public API.
Bars: at 128 tokens, 8.90 against 21.93 tokens per second; at 512 tokens, 9.51 against 20.18. On the right, the first word goes from 3,818 to 1,422 ms, graphics memory from 2,344 to 2,351 MiB.
The gain, and its price. Same machine, same model, same binary except for the patch: throughput doubles, the first word arrives 2.7 times sooner, and graphics memory moves by only 7 MiB. The reference remains the same engine without the patch — not llama.cpp.
Two rows of 48 layers: 22 on the card in the control run, 13 under memory pressure. Throughput 20.88 then 20.15 tokens per second.
Placement, observed. When graphics memory is taken up before start-up, the engine puts fewer layers on the card (22 → 13 in these two runs) and throughput drops by only 3.5%. Moving layers while running, however, is not demonstrated.

Twelve answers, not an average

A "2.12×" is a median. Behind it are twelve measured answers: three processes without the patch and three with it, each asked for a 128-token then a 512-token answer. The two clouds never touch: the slowest patched answer (19.48 tokens/s) is still twice as fast as the fastest unpatched one (10.12).

The twelve measured answers of Q-010 Dot plot: without the patch 8.49 to 10.12 tokens per second, with it 19.48 to 22.02, for 128- and 512-token answers. GNOSTRAL.RS · Q-010 · SPREAD Twelve answers, not an average Three processes per condition, two answer lengths. The texts produced are identical byte for byte in all six pairs. 0 5 10 15 20 25 tokens per second, each dot is one answer 128-TOKEN ANSWER median 8.90 without patch median 21.93 with patch 512-TOKEN ANSWER median 9.51 without patch median 20.18 with patch without the patch with the patch The two clouds never touch: the gap does not hinge on one lucky answer. Data: gnostral.rs/evidence/runs/q010-hotpath-ssd-ab-audit-20261010.json, per_request field, at commit 38c4134.
The gap does not hinge on one lucky answer. The texts produced are identical byte for byte in all six pairs: the patch speeds things up without changing anything that is written.
The data, answer by answer
AnswerWithout the patch (tokens/s)With the patch (tokens/s)
128 tokens, process 18.9021.55
128 tokens, process 28.4921.93
128 tokens, process 39.8822.02
512 tokens, process 110.1220.18
512 tokens, process 29.5120.21
512 tokens, process 39.5119.48

One executable, three model families

Milestone Q-012 asks another question: can the same executable serve models of different kinds? Three families, one after another: a dense model that writes text, an embeddings model that turns sentences into vectors, and the large quantised MoE. All three answer correctly — the embeddings model, for instance, rates two related sentences much closer (0.78) than two unrelated ones (0.17).

Above all, the chart shows where each model puts its weights. The 30-billion-parameter MoE takes 2.4 GB on the card and 19 GB in main memory: that is the dossier's trick, measured. The first run, built without the expert-residency feature, climbed to 6.8 GB on the card and timed out; it stays on record, and a guard now refuses a binary that forgets it.

Where each model family lives (Q-012) Bars per family: dense 5,025 MiB on the card and 3,556 MiB on the host; embeddings 2,783 and 1,533; MoE 2,427 on the card and 19,282 on the host. First MoE run: 6,772 MiB on the card. GNOSTRAL.RS · Q-012 · THREE FAMILIES One executable, three families, two memories The same binary serves all three, one after another. What changes is where each model puts its weights. 0 5,000 10,000 15,000 20,000 Dense Qwen2.5-Coder-1.5B PASS_FUNCTIONAL 5,025 MiB 3,556 MiB Embeddings Qwen3-Embedding-0.6B PASS_FUNCTIONAL 2,783 MiB 1,533 MiB Quantised MoE Qwen3-30B-A3B Q2_K PASS_FUNCTIONAL 2,427 MiB 19,282 MiB 6,772 MiB on the first run, without the residency feature graphics card, at peak (whole card, desktop included) server process on the host (RSS), at peak The MoE lives mostly in main memory: 19 GB on the host for 2.4 GB on the card. That is the trick, measured. Data: gnostral.rs/evidence/runs/gnostral-q012-native-three-families-20261010.json, at commit 38c4134. One functional probe per family.
Two memories, two uses. Card memory is measured for the whole card, desktop included; host memory is that of the server process alone. One functional probe per family: this is not a quality benchmark.
Remember

Every figure has its report, its protocol and its limits. The repository explicitly refuses to publish a figure without the evidence that goes with it — including when the evidence contradicts a more flattering claim.

Compared with what, exactly? #

A "2.12× faster" means nothing without its point of comparison. Here, the reference is not another piece of software: it is the same engine, one version earlier.

Three questions: the patch speeds the engine up 2.12 times relative to itself; gnostral reaches 58% of llama.cpp's throughput; against mistral.rs there is no comparison — it is the same engine.
Three references, three answers. The 2.12× gain is a paired A/B on the same engine. The comparison with llama.cpp is unfavourable. The comparison with mistral.rs makes no sense: it is the engine the patch modifies.

Concretely, "Strata" is the revision of mistral.rs used in the lab: public version 0.9.3, plus an expert-residency integration. The 9.51 tokens/s measure that engine before the patch; the 20.18 measure the same binary, rebuilt with a single function changed — the quantised expert weights are borrowed instead of being copied on every call.

Against llama.cpp, on the other hand, the comparison exists and it is unfavourable: 34.54 tokens/s for llama.cpp against 20.18 for gnostral, on the same model and the same card. The repository's report says so explicitly: these gains do not establish superiority over llama.cpp's CPU-MoE options.

As for mistral.rs, it is not an opponent: it is the engine in which the patch is applied. gnostral is not a competing engine — it is a set of patches, typed contracts and measurement tools around mistral.rs. Comparing against it would be like comparing a car with its own engine.

Mind the words

mistral.rs is an inference engine written in Rust. Mistral AI is a company that makes models. The two are unrelated, and the models measured here are Qwen models, not Mistral models.

Saying "faster than Mistral" therefore makes no sense until you say which one you mean — and, if it is the engine, which version serves as the reference.

What it changes

The exact wording is: "2.12× faster than the same mistral.rs revision without the patch, and still 58% of llama.cpp's throughput on this model". It is less spectacular, but it is true, dated and verifiable.

How a measurement becomes evidence #

The project's most solid contribution may not be the speed gain, but the method. Six steps, always the same, and none can be skipped.

A six-step loop: source and fingerprint, bounded plan, isolated run, exact answer, stop and recovery, independent audit.
The qualification loop. A "PASS" only says what the test tested. It says nothing about stability, security or performance on another machine.

Concretely: the code and the model are identified by a fingerprint (SHA), a plan describes exactly what will run, a single process is started within limits, a precise answer is checked, the process is stopped, the memory is checked to have come back, and then an independent program redoes the checks.

Order matters. A server can answer a health check while its weights are not yet loaded. gnostral.rs therefore distinguishes eight states, from the mere fact of being "declared in the documentation" up to "qualified by an independent audit".

The eight states of truth, plainly
  1. Declared — the source or the provider says the operation exists.
  2. Planned — a request matches a precise capability and piece of evidence; no right to execute is granted.
  3. HTTP-ready — the health endpoint answers. That is not inference yet.
  4. Semantically ready — an independent test passes on the exact engine and model.
  5. Serving — only the admitted, bounded operation continues.
  6. Stopped / unloaded — processes and requests are cancelled or finished, the unload is acknowledged.
  7. Memory returned — system observations show the return to the announced envelope.
  8. Qualified — an independent auditor checks the identities, the negative checks and the non-claims.

Does the memory come back?

The loop's sixth step — stopping and recovery — is the one that fails the most runs. After each shutdown, what is still occupied on the graphics card is measured. The gate is set before the run: ±128 MiB. A fast run that leaves memory behind is refused.

Does graphics memory come back after shutdown? Dots per process: every retained run stays between −82 and +26 MiB, inside the ±128 MiB gate; the first Q-010 run at +196 MiB fails and stays on record. GNOSTRAL.RS · RECLAIM Does the memory come back? After each shutdown, what is still occupied on the card is measured. Beyond 128 MiB, the run is refused — even if it was fast. gate: ±128 MiB -100 0 +100 +200 Q-010 without patch, 3 processes Q-010 with patch, 3 processes Q-010 first run with patch +196 MiB · NOT QUALIFIED, kept Q-012 dense · embeddings · MoE Q-013-C real dense server ambient graphics-memory difference after shutdown, in MiB (negative: less than before) inside the gate: memory came back outside the gate: the run fails and stays on record; a full new run was made Data: Q-010 (audit and first run), Q-012 and Q-013-C receipts in gnostral.rs/evidence/runs/, at commit 38c4134.
A visible failure among the successes. The first patched Q-010 run left 196 MiB on the card — cause undetermined, possibly desktop GPU traffic. It is marked NOT QUALIFIED and kept; the published measurement comes from a new full session, with the same thresholds.

What it is not #

The limits, plainly
  • Not a server ready to deploy. It is not a standalone replacement for mistral.rs, llama.cpp, Candle or vLLM.
  • No hot model switching. The sequence A → B → A under a single supervisor has not been demonstrated.
  • No secured public API. The driver talks to localhost on a fixed port, without authenticating a hostile peer.
  • No multi-user service. No control plane or availability commitment has been ratified.
  • No guarantee on your hardware. The figures come from one precise configuration and are explicitly not portable.

Why the failures are public #

The first Q-010 run failed: graphics memory did not come back within the expected margin (+196 MiB against a ±128 MiB tolerance). The first Q-012 run failed too: a compile-time feature was missing, and the MoE model timed out.

Both failures are still on the record. It is a methodological choice, not an affectation: a result whose misses you do not know is not reusable. And a figure that cannot be contradicted is not a measurement; it is a claim.

The same principle applies to the Bonsai benchmark: the reference kept is 35.2 tokens per second, not the more flattering claim of 40 — for lack of sufficient evidence.

History: fifteen quests in fifteen days #

gnostral.rs moves forward by quests: each opens a precise question and closes with a written decision, including when the decision is "not qualified". The public log counts fifteen between October 7 and 21, 2026.

gnostral.rs history, October 7 to 21, 2026 Eight foundational quests and eight versions on October 7, the Q-009 track on the 9th, the Q-010 to Q-013-C proof chain on the 10th, an upstream watch on the 21st. GNOSTRAL.RS · HISTORY Fifteen quests in fifteen days Each quest opens a question and closes it with a written decision — including “not qualified”. 20 8 2 Oct 7 Oct 9 Oct 10 Oct 21 Q-001 Q-002 Q-003 Q-004 Q-005 Q-006 Q-007 Q-008 v0.1 → v0.8 the same day foundational research, donors Q-009 partial, dated track Q-010 Q-011 Q-012 Q-013-A Q-013-B Q-013-C native proof chain A/B, placement, 3 families, supervisor upstream watch 30 public commits · bars: commits per day · chips: closed quests (green), partial (orange) Source: QUESTLOG.md, CHANGELOG.md and Git history of gnu6dotlive/gnostral.rs at commit 38c4134.
Two days do most of the work. October 7 closes the foundational research and publishes versions 0.1 to 0.8; the 10th, the native proof chain, from the A/B to the real supervised server.

Projects studied, and turned down

Part of the work is examining other engines before touching them. The repository keeps its refusals as carefully as its adoptions:

xInfer — not qualified

A clean build failure against CUDA 13.4, model loads running out of memory. Adoption refused: the lab does not turn into a repair shop for an upstream project.

zLLM — blocked

A Gemma model served correctly, but the adaptive-placement promise could not be tested: the 17 to 19 GB download would have eaten nearly half of the free disk margin.

UniLLM — studied

Its registry and lifecycle ideas are adapted; its mocked telemetry is rejected. The rule that came out of it: write "unknown" rather than a plausible value.

A corrected claim

The very first quest, Q-001, measured nothing new: it withdrew a figure. A Bonsai benchmark claimed 40 tokens per second; for lack of sufficient evidence, the repository kept 35.2 and never published the 40. So the project starts with a correction — a choice of method.

Projections: the roadmap #

The target fits in one sentence: an inspectable, Rust-first, local inference control plane for constrained hardware — choosing the right engine for each model, bounding resources, proving readiness, stopping cleanly, accounting for performance. Compute kernels and expert placement stay the business of each engine.

gnostral.rs roadmap, M0 to M5 Six milestones: M0 closed, M1 Q-013-D next, M2 to M4 proposed, M5 conditional; below, five research leads dotted to the milestones they might feed. GNOSTRAL.RS · PROJECTIONS Technical sequencing, not a delivery schedule Each milestone has a written exit condition. The next one does not start on a promise. LANE A — HARDEN ACTUAL LOCAL SERVING M0 CLOSED Proven baseline Q-010 → Q-013-C M1 NEXT Identity while serving Q-013-D M2 PROPOSED Sequence A → B → A Q-014 M3 PROPOSED Resource admission Q-015 M4 PROPOSED Quality of service Q-016 M5 FUTURE Multi-model service conditional P1 Burn Remote quantised tensors P2 WakeKV reversible KV cache P2 Ferrum SLO client tail metrics P3 CubeCL multi-GPU — absent ongoing Bonsai PTQ1 low-bit kernels LANE B — CUTTING-EDGE RESEARCH, NOT ADOPTION Dotted links are candidate inputs, not dependencies or integrations. “Definition of progress: one more independently auditable boundary established, not one more feature added to a roadmap.” Source: gnostral.rs/docs/ROADMAP.md (as of October 10, 2026) at commit 38c4134.
One exit condition per milestone. M1 must prove it is talking to the right process for the whole time it serves; M2, that a model can be loaded, unloaded, another loaded and the first brought back without leaking memory. The multi-model service only comes at the end, and only if everything else holds.

Research, in parallel

A watch on five leads — quantised tensor transport (Burn), client-side latency metrics (Ferrum), a reversible KV cache (WakeKV), several cards (CubeCL), low-bit kernels (Bonsai). Each has its first falsifiable experiment; none is a dependency, and none may silently change the pinned engine.

What will not be promised

No public hosted API, no production-performance claim, no broad portability until the matching gate has passed. A failed run remains first-class evidence, even when a later run succeeds.

What it changes, depending on who you are #

Curious about local AI

You understand why a model does not "fit", and what each placement choice costs. The dossier's analogies are enough; the repository provides the details.

Developer

The repository contains a typed engine contract, a bounded process harness, plans tied to a fingerprint and measurement receipts in JSON. Much of it can be tested without a GPU.

Decision-maker or funder

The asset is not a finished product: it is a discipline of evidence, applied to a problem most teams prefer to work around by buying hardware.

Going further #

Technical — the repository's words

MoE ("mixture of experts"): an architecture where each token activates only a subset of the networks. Q2_K / Q3_K quantisation: compressing the weights to 2–3 bits, which cuts memory sharply at the cost of a little quality. Token: a fragment of a word; throughput is measured in tokens per second. Residency: where a piece of the model is actually loaded.

Language: Rust for the contracts, kernels and harness; Python for the experiment driver and the auditor. Licence: MIT for the original material; upstream projects keep their licences and attribution.

Checking without a graphics card

The repository provides a thirty-second evaluation: engine-contract tests, expert-residency tests, Python unit tests, then two scripts checking public hygiene and version identity. None of these checks needs a GPU.

A real experiment, on the other hand, requires exact weights and executable, plus an isolated, qualified workstation. The reproduction contract says so explicitly.