
Nitro-MoE / Evidence
Technical evidence is published in English.
stopped mid-experiment; source artifacts no longer on disk · verified 2026-10-03 · compiled 2026-10-03
F51 Nitro is an attempt to make a large mixture-of-experts model run on one consumer GPU by keeping the experts the router keeps asking for resident in VRAM instead of reloading them per token. The work happened in May-June 2026 on a single Windows workstation (RTX 5060 Ti 16 GB + RTX 3060, 64 GB DDR5), as a patch to a local llama.cpp fork plus a standalone cache-policy simulator. This page records what is still verifiable. The short version is uncomfortable: the cache compiled into the CUDA library but the code path that triggers it never fired in the real server, so the ~39 tok/s the project was promoted with was plain --cpu-moe, without the cache; when the cache was forced on, it was 5-8x slower and at one capacity its output was corrupted; and the '82%' number exists only in notes and pitch documents whose source logs were deleted. The project stopped in early June 2026 and C:\llama.cpp, C:\F51_LAB and the Desktop project folders no longer exist on this machine. What does exist is the raw session trail, which is quoted here with paths and dates.
Evidence file for F51 Nitro / Nitro-MoE. Written 2026-10-03 by reading every surviving file on this machine that touches the project: the raw Codex session records under (local source: ) (May-June 2026), the project memory notes under (local source: ), and the site's own audit notes. Revised the same day after a line-by-line pass over the session records to quote them directly: six figures were added, each a render of literal recorded terminal text with a byte-literal .txt companion, all six re-verified against their source records by assets/nitro-moe/_build/verify_literal.py. The two headline numbers the project was promoted with - '82% expert persistence' and '~38.7 tok/s' as a caching result - do NOT have a surviving file that supports them; the surviving output contradicts the first (the 82.7% is a router-skew column, the best cache scenario is 66.85%) and the project itself withdrew the second on 2026-05-30. They are listed under missing[] and are not published as results here. Everything else on this page is either quoted from a file that still exists on disk, or explicitly labelled as 'recorded in a session transcript' or 'documented, artifact no longer on disk'. Nothing is estimated or reconstructed.
A mixture-of-experts model activates only a fraction of its weights per token, so the constraint is not model size but where each expert lives at the moment it is needed. On a 16 GB card an 80B MoE cannot hold its experts, and the default fix is to compute them on the CPU (llama.cpp --cpu-moe) or to stream them over PCIe.
The project's claim was that consecutive tokens re-select many of the same experts, so a small VRAM cache of the hot expert set should remove most of the PCIe traffic, letting an 80B model run on a consumer GPU. The model documented in the records is Qwen3-Coder-Next 80B IQ4_XS: 48 layers, 512 experts per layer, 10 active plus a shared expert, 262,144-token native context, loaded with -ngl 999 --cpu-moe -c 262144 -fa on.
Three instruments: a Layer-1 expert-persistence cache patched into a local llama.cpp fork, a standalone cache-policy simulator driven by captured router traces, and a benchmark protocol that runs the same model in three modes (CPU-only, GPU-all, --cpu-moe with the cache) across a context ladder.
The cache is a fixed pool of VRAM slots per MoE tensor with an LRU-FREQ eviction policy: a struct f51_moe_tensor_cache holding expert_to_slot / slot_to_expert maps, a per-slot frequency counter, last-used timestamps and hit/miss counters; choose_slot() scores freq * 1000 - age; frequencies decay by 0.75 every 2x capacity misses; ensure() does lookup, evict, cudaMemcpyAsync H2D and returns the slot. It is wired into ggml_cuda_mul_mat_id() and gated by environment variables (F51_MOE_CACHE_CAPACITY, F51_LAYER1_ENABLE). The startup line it prints is 'F51 cache: %d slots x %zu MB = %zu MB VRAM'.
f51_cache_sim.py is a standalone eviction-policy simulator over captured router traces. It computes per-layer router skew (what share of expert selections lands in the top 10/20/30% of experts, and how many tokens touch that set at least once), then replays 50 capacity/policy scenarios across the observed layers and ranks them by hit rate. It is the piece that survived in the session record: a full run against a gpt-oss-120B MXFP4 trace (128 experts, top-k 4, 12.61 MiB per expert, 1584 clean trace lines) printed its complete ranked table.
The protocol required three modes per model - CPU-only (-ngl 0), GPU-all (-ngl 99), and the Nitro mode - plus a context ladder (4K, 16K, 32K, 128K, 256K, 512K, 1M) with no skipped steps, and a per-run checklist recording model, hash, quant, exact command, llama.cpp version, context, token counts, tok/s, VRAM, RAM and the stderr log. The ladder and checklist survive only as notes.
What the records show is not a speedup. The cache compiled, but on the real serving path it never engaged; the throughput the project was promoted with came from the CPU-compute path with no cache involved; and every run in which the cache was actually active was slower than the baseline, with one capacity producing corrupted output.
The Layer-1 patch was compiled into the CUDA library - the strings 'F51 cache: cudaMalloc %zu MB failed' and 'F51 cache: %d slots x %zu MB = %zu MB VRAM' are present in ggml-cuda.dll - but the initialisation line never appeared in any server log. The root cause was isolated with a debug log: with --cpu-moe the MoE experts report buffer buft='CUDA0', so the guard condition that should route experts through the cache never becomes true. The server was therefore running plain inference at 39-41 tok/s with the F51 path completely unused. A separate diagnostic run of the cache instrumentation opens with hits=0, misses=145, reuse_pct=0.0 and saved_mb=0.000 on the cold fill of every tensor; the second, warm pass over the same tensors inside the same output reports reuse_pct from 20.0% to 99.1%. Both passes are on this page (figure fig-06) because the cold-pass quote alone reads as a stronger claim than the record supports.
The benchmark table kept in the project (and echoed by the agents at the time) compares three configurations: --cpu-moe alone at 40.8 tok/s with correct output and 2 GB VRAM; --cpu-moe plus the F51 cache at capacity 64 with offload at 8.1 tok/s with corrupted output (CUDA event-reuse bug); and the fixed version at capacity 128 at 5.2 tok/s with correct output and about 4 GB VRAM. The explanation recorded at the time: under --cpu-moe the expert weight never crosses PCIe, so there is nothing for a VRAM cache to save; the CPU computes the small expert matmuls directly.
The 50-scenario run on the 120B trace ranked by hit rate: best 66.85% (dynamic LRU, 13 GiB, 5030 hits / 2494 misses, 61.93 GB avoided), then hot-static per-layer uniform 25-30% at 66.59%, and static-global 30% at 2 GiB at 55.97%. The script's own summary collapses this to a range of 56.0% (every 2-8 GiB budget) to 66.9% (13 GiB). Note there is no 82% in this table - the best number the simulator ever produced is 66.85%, and the mid-range budgets sit at 56%. The same output's router-skew table shows the top 30% of experts account for 82.7% of selections at layer 27 (72.6% for the top 20%, 51.5% for the top 10%), with per-token coverage of the top 10% set at 99.5%. Note what that 82.7% is - a router-skew share, not a cache hit rate. The whole output is published as figure fig-01 on this page, including the 236 corrupted trace lines its own header reports.
The 2026-05-29 session answers the question the rest of this page can only argue about. Its Layer-5 analysis prints a table headed 'LAYER 5 - F51 MOE EXECUTOR - PASSA (no papel)' - pass on paper - mapping a cache hit rate to a time per token, a throughput and a speedup against CPU: 30% HR gives 1766 us/token and 566 tok/s; 50% gives 1296 us and 772 tok/s; 67% gives 896 us and 1116 tok/s; 82% gives 543 us, 1840 tok/s and 7.3x; 100% gives 240 us and 4167 tok/s. So in the record 82% is an input to an on-paper projection whose output was 1840 tok/s - not anywhere near the 2 tok/s the only validated run later measured - and it was then quoted downstream as though it were a measured cache hit rate. The same session is explicit that it did not match reality: the agent writes 'agora tenho numero real ... reconciliar o 82% vs 57-67% real', and separately, about a different policy, 'em C=128 chega nos ~82% de hit que voce ja citava no doc' - carried over from a document, not produced by the run. This is the whole reason 82% is withheld on this page: it is a projection constant that escaped its table.
The final packaged validation, on 2026-05-31 (GPT-OSS 120B MXFP4, kit 'safe5'), started cleanly, passed /health and /completion, and showed the F51 cache active in the server logs. Measured throughput: prompt eval 1.88 tok/s, generation 2.00 tok/s (64 tokens in 35.82 s). The summary was written to .../F51-Nitro-MoE/evidencias/validation/20260531_2226_safe5/validation_summary.json. The same conversation states plainly that what got proven that day was the 120B path, not a speedup.
The honest comparison in this project is not cache-on versus cache-off; it is three execution modes of the same 80B model, and the finding that the cheapest-looking one is the worst.
Recorded across the session trail and the notes: 80B GPU-all 8.41 tok/s at 15.9 GB VRAM (saturated, collapsed); 80B CPU-only 17.18 tok/s at 0 GB VRAM; 80B in Nitro mode 38.67 tok/s at 2.4 GB VRAM - described at the time as 4.6x GPU-all and 2.3x CPU-only. The last number is the one that is mislabelled: the runs behind it are --cpu-moe with the cache not engaged (see The result), so it is a CPU-compute baseline, not a cache result. It is listed under missing[] for exactly that reason.
Two adjacent ideas were measured and killed inside the same programme and are still published on the MIKE page: PCIe expert transfer (695 us of transfer against 164 us of CPU compute - not viable) and speculative prefetch as originally designed. No surviving file carries those two numbers; they appear only in the site's own audit text and the generated page. They are therefore also listed under missing[].
Everything below is about what does not exist, and it is the reason this page contains no 82% and no 38.7 tok/s as results.
On 2026-10-03, Test-Path returns false for C:\llama.cpp, C:\F51_LAB, (local source: SuperEzio-Arbitro), (local source: F51-Nitro-MoE) and (local source: F51-Darwin-NITRO.) That removes f51_cache_sim.py, f51_nitro.cuh, the patched common.cuh and ggml-cuda.cu, f51_stderr.log (recorded at 17,626 bytes on 2026-05-25 and 71,706 bytes on 2026-05-26), the whitepaper and the four Layer-1 docs, and the 2026-05-31 validation JSON. The only reason any of their content can be quoted here is that the Codex session records kept the terminal output. The Darwin-CL audit of 2026-07-17 had already recorded the Nitro folders as MISSING.
A public llama.cpp fork exists at github.com/marcobarreto007/llama.cpp. Checked on 2026-10-03: the default branch is master, the repository lists 11,046 commits, and neither the branch listing nor the root file listing contains anything named f51 or nitro. The branch the sessions name - f51-nitro-layer1 - is not public. There is no Nitro-MoE paper, DOI, release or pull request. The project's own research page says 'No public link yet', which remains true.
Nothing image-like was made by the project: no PNG, SVG, JPG or diagram survives in any directory, and none is referenced in the session records as an attachment. The only quantitative visual the project ever had was a terminal table. The six figures on this page are therefore F51 Labs renders of the surviving terminal text, made on 2026-10-03 and labelled as such in every caption - they are quotations, not artifacts. Each has a byte-literal .txt companion and is re-verified against the source session record by assets/nitro-moe/_build/verify_literal.py.
The last F51-cache session on this machine is 2026-06-02 (the 14-20 tok/s run and the f51-nitro-layer1 branch identification). The last note written is dated 2026-05-28 (Musical Chairs / F51_PIN_EXPERTS). The 2026-06-14/15 sessions that mention an 80B are about the SuperEzio/Arbitro product, not the cache line. So the line has been stopped for roughly four months as of 2026-10-03, and the artifacts were deleted at some point after the June sessions and before the July 2026 Darwin audit that already recorded the folders as missing.





terminal text
terminal text
None of these is a project artifact. Everything the project left behind that looked like a figure was a terminal table or a JSON dump, and the folders that held the logs (C:\llama.cpp, C:\F51_LAB, the Desktop repo) are deleted. Five images and two text files, all made by F51 Labs on 2026-10-03 by rendering the literal output that survives inside the Codex session records. Nothing was retyped, re-wrapped or corrected: each .txt companion is the byte-for-byte recorded text, and assets/nitro-moe/_build/verify_literal.py re-reads every quote out of the source JSONL and confirms it appears there verbatim (7/7 pass; 478, 251, 127, 107, 42, 29 and 14 lines checked, none missing). Where a line is omitted the elision is marked in amber and explained. Two glyphs could not be drawn by the render font - a warning sign in the simulator's gate line and a check mark in the 82% table's heading - so those whole lines are marked as omitted in the image and printed in full in the .txt. The generator is kept at assets/nitro-moe/_build/gen_extracts.py so anyone can re-derive every figure from the sessions.
simulator
The file is deleted. A second copy or copy-path is recorded in the 2026-05-28 session as (local source: f51_cache_sim.py), where 'python -m py_compile evidencias\f51_cache_sim.py' passed and 'python evidencias\f51_cache_sim.py' reproduced the dossier's rankings; the two recorded paths are not reconciled. Its complete 50-scenario output survives verbatim in the session record (local source: rollout-2026-05-30T16-57-00-019e7aad-0816-7200-bf4a-84d9dc434e98.jsonl), which is the source of the numbers in section 'The result' and of figure fig-01 on this page. It was run against a gpt-oss-120B MXFP4 trace, not the 80B. · local source (f51_cache_sim.py); not published
measurement log
C:\F51_LAB\f51_stderr.log
Recorded in the 2026-05-25/26 session as 17,626 bytes (2026-05-25 23:00) and 71,706 bytes (2026-05-26 09:40), alongside f51_cuda_mul_mat_id.log, f51_cpu_mul_mat_id.log and f51_layer1_sched_server.log. C:\F51_LAB no longer exists; no copy was found in the recycle bin or on D:/E:. This file is the only thing that could have settled the 82% claim, and it is gone.
CUDA source
C:\llama.cpp\ggml\src\ggml-cuda\f51_nitro.cuh
The fork at C:\llama.cpp is deleted. Its contents are described in memory/f51-code-map.md (struct f51_moe_tensor_cache in common.cuh, the MUL_MAT_ID hook in ggml-cuda.cu, the five-layer orchestrator in f51_nitro.cuh) and the Layer-1 patch text is quoted inside the 2026-05-25 session record. The public fork github.com/marcobarreto007/llama.cpp contains no f51 or nitro file on the branches checked on 2026-10-03.
whitepaper and design docs
SuperEzio-Arbitro/docs/F51_NITRO_MOE_WHITEPAPER.md
Existed in the repo file listing of 2026-05-26 together with F51_NITRO_BENCHMARK_PROTOCOL.md, F51_LAYER1_IMPLEMENTATION.md and F51_NITRO_AGENT_REFERENCE.md. The whitepaper is the document that carried the '38.67 tok/s, 2.4 GB VRAM' claim and the 5-layer roadmap; its text is partially echoed in the 2026-05-25 session record. Deleted with the repo folder.
benchmark summary
The only run that reached a packaged validation state: GPT-OSS 120B MXFP4, /health 200, /completion OK, F51 cache visible in the logs, measured 1.88 tok/s prompt eval and 2.00 tok/s generation (64 tokens in 35.82 s). The folder is deleted; the numbers survive in the 2026-05-31 session record. · local source (validation_summary.json); not published
raw session transcripts
Primary evidence for every 'recorded in session transcript' claim above, and the source of all seven figures. Key files by date, with the line each figure came from: 05/25 rollout-2026-05-25T20-54-01 (patch, logs, is_cuda root cause; line 6 -> fig-02; line 940 -> fig-06; the ~38.7-to-~55 experiment plan at line 120), 05/28 18-21 and 22-13 (pitch tables, 40.8/8.1/5.2 tok/s, the 8x-slower finding, the conflicting-numbers audit at 18-21 line 418), 05/29 16-44 (trace-quality audit and the origin of the 82% claim; line 307 -> fig-03, including the 'reconciliar o 82% vs 57-67% real' note), 05/30 16-57 (the full simulator output at line 264 -> fig-01, plus the TESTE 1 / TESTE 2 sweep and prefetch tables at line 263), 05/30 21-48 (the live 120B server log at line 41 -> fig-04, and the project's own withdrawal list at line 1172 -> fig-05), 05/31 22-02 (the validated 120B checkpoint; line 519 -> fig-07), 06/02 12-42 (docs say 38.7-42 vs live 14-20 tok/s; branch f51-nitro-layer1). · local source (local file); not published
runtime logs
E:\dados\logs\nitro_daemon.log and E:\dados\logs\nitro_server.log
Found on 2026-10-03 by a filesystem sweep for anything named nitro; the only surviving trace of the packaged kit anywhere on this machine. Both are llama-server logs written 2026-07-23, six weeks after the project stopped, and nitro_server.log opens with the launch line 'cmd.exe /c start /b "" E:\F51_Nitro_20GB_DualGPU\bin\llama-server.exe ...' - so the kit existed and was run. Three cautions. (1) The kit folder itself is not on this machine today: E:\F51_Nitro_20GB_DualGPU returns false, and the paths inside the logs point at a different box - (local source: ), with an RTX 2070 (8 GB) and a P106-100 (6 GB), neither of which is a GPU in this workstation. (2) The model is not the project's model: Qwen3.6-35B-A3B-Uncensored IQ3_M, 256 experts, 8 active. (3) Both logs stop at 'srv load_model: initializing slots, n_slots = 4' - no request was served, no eval time was printed, and the string 'F51 cache:' does not appear anywhere in either file. So this is not a Nitro-MoE result and does not add a hit rate or a throughput. It is published here because it is the only surviving evidence that the packaged kit ran at all, and because it repeats the project's central failure on a second machine: the F51 binary started and the cache said nothing.
notes
f51-code-map.md, nitro-moe-protocol.md, nitro-80b-checkpoint.md, f51-cache-benchmark.md (the only file that states '82% at C=64'), f51-musical-chairs.md and f51-pin-experts-diary.md (benchmarks of other models: GLM-4.5-Air 8.69-10.27 tok/s, DeepSeek V2-Lite 125 tok/s), terceiro-mandamento.md, plano-funding-canada.json. These are working notes, not measurement artifacts. · local source (local file); not published