GPT + Opus (via Copilot CLI) helped me uncover 180 JIT bugs, each with a minimal C# repro using only safe code 😶 - most had been hiding from us for many releases github.com/dotnet/runtime/is…
Donating inference to your favorite OSS project will soon be beautiful and easy.
Set up your repo, donate to another repo, browse issues, save profiles with your preferred harness, model, and effort.
Give your inference a purpose 🌞
Bus use: stock llama.cpp reached ~145GB/s on Ornith. These engine tweaks reach ~171GB/s over a whole pass and 234GB/s in its best kernel.
The memory floor for a pass is ~17.4ms, this implementation reaches 23.5ms so still some headroom left at the same quant.
Caveats:
custom ggml + libllama under stock llama-server
Speed moves ~2.5% run to run and more by prompt.
Pooled routing changes the model, a preliminary and partial SWE-bench run showed about 11/19 resolved rate with my pi harness, 10m per task.
The takeaway so far: capacity is free but bandwidth is not. The ideal model is ~100GB of small experts behind a thin trunk, reading ~3GB per token. Ornith has the read pattern right, but does not fill the hardware's capacity.
Draft head: only the 65,536 most common tokens of 248k, stored at Q4_0. Used for drafts only, every token is still verified by the full Q8_0 model so the output does not change. It only moves draft acceptance rate.
Next lever is MTP and Ornith ships its own draft block. It drafts 3 tokens, then one main pass verifies 4 positions.
The trunk is read once per pass, not once per token. So, a thin trunk makes verification cheap. ~2.7 tokens kept per pass.
Then the engine, a stock verify pass is ~2,400 GPU nodes and each small kernel costs about 5us.
I fused them: MoE layer 42 nodes -> 1 op, linear attention layer -> 3 ops. Now 284 nodes and each weight row is read once for all 4 tokens.
There is a problem, though. 4 positions each pick 8 of 256 experts, so up to 32 expert sets per pass.
The fix is pooled routing. The 4 positions share a pool of 12 experts and each takes its top 8 from the pool. ~60% less expert traffic. Routers tuned for the Strix.
Since you can't make the bus faster, you need to cut bytes/token.
Ornith at Q8_0 reads a 2.17GB trunk once per pass + 1.10GB of experts per token.
Stock llama.cpp running Ornith-1.5-35B-A3B: 45 t/s
Doing some AMD Halo Strix testing...
First is picking a base model that fits the strix's architecture and is able to run as optimally as the hardware allows.
Ornith 1.5 35B A3B fits this description as it is small-trunk MoE, allowing for small experts on the shared memory bus.
The Halo Strix used in testing has 128GB of memory but one shared bus at ~230GB/s. Single stream means your speed is bandwidth / bytes read per token. Size and compute is not the limit in this case.
This raises the question, how do we saturate that 230GB/s shared bus best?
The maintainer asks. A supporter lends inference.
We've added local model support through Pi, live donation transcripts and a way to continue stopped work.
More ways to help, with the owner still deciding what gets merged.
Shut the door or keep it open and pay the review tax?
We propose a middle-ground.
The maintainer approves the issue.
A supporter lends their inference to it.
The PR that arrives is one they asked for.
We propose contribution via inference.
The maintainer knows their project. They should not be beholden to a flood of PRs.
Let them decide direction, contribution can take the form of donated tokens.