📈 GH Trending Explorer 🎲 Surprise me

← all repos

midagedev / bloomery

git clone https://github.com/midagedev/bloomery.git v0.3.6 · 2d ago

Hybrid GPU + CPU inference for mixture-of-experts models, written in Rust down to the CUDA kernels. A drop-in llama-server.

+6
stars, 24h · #2,220
+~42
stars, 7 days · #2,800
+~180
stars, 30 days · #2,835
50
★ total · +42% this week
5
forks · 50 open issues

Star history (as recorded here)

2026-10-20 · 43 ★ 2026-10-22 · 50 ★
LanguageRust
LicenseMIT
Created2026-09-19 (1mo ago)
Last pushtoday
Watchers0
OwnerUser

GitHub topics

Links

README excerpt
bloomery 
 A fast inference engine for mixture-of-experts models, built for offloading. 
 Written in Rust from the HTTP server down to the CUDA kernels. A drop-in
 llama-server .
- **MoE models larger than the card, and larger than the host's RAM.** Routed experts live on the GPU and in host
 RAM; the engine counts its own routing and moves the experts it calls most onto the card while it runs. On one
 RTX 3090 24 GB beside a 256 GB host, DeepSeek-V4.1-Flash `Q3_K_M` (347 GB) serves two requests at 34.4 tok/s in
 total and GLM-5.3-Flash at 26.9. When the RAM cannot hold the host's experts either, Qwen3.8, GLM-5.3-Flash and
 DeepSeek-V4.1-Flash page the rest from the model file on NVMe.
- **A prompt cache that survives other requests.** The Qwen3.8 and GLM-5.3-Flash seats keep saved prompt states in
 host RAM: a request that shares a prefix with an earlier one restores it, even after another request used the
 slot (recorded on tape).
- **Several requests, one pass.** With `--parallel 2` two busy streams run through the model together. With the MTP
 draft off, that gave 25–37 % more tokens a second in total than one stream (0.2.1,
 measured on the A6000). The draft
 is on by default and already fills the pass's rows: in 0.2.10's release check (A6000), two streams of Qwen3.8
 (`--place a`) and GLM-5.3 `UD-IQ4_XS` gave about the total of one stream.
- **llama-server compatible.** The same HTTP API (OpenAI and Anthropic), GGUF files and flag spellings: your client
 works unchanged.
- **Rust all the way down.** Every CUDA kernel is written in Rust and compiled with
 cuda-oxide.
 [code] 
## Status (0.3.6)
0.3.6 answers structured requests with schemajump (the fixed parts of a JSON answer are fed in one call, not decoded
token by token), serves `/v1/systemone` on every generative seat in the same body as the Clef seat, and runs
Solar-Open2-250B with its experts on the card and the host (release notes).
| Area | State |
|---|---|
| Linux x86-64, NVIDIA sm_86 (RTX 3090, RTX A6000, RTX 3060) | Runs. Every number here comes from these cards |
| NVIDIA driver | R580 or newer (CUDA 13); an older driver is refused at the start |
| Ada and Blackwell (sm_89, sm_120) | Blackwell ran on a user's RTX 5090 under WSL2 (#2): the sm_86 PTX compiles for the card at the first start. Ada not yet run. Reports welcome |
| NVIDIA DGX Spark (GB10, aarch64) | Builds and runs from source (a contributor's port, `docs/contrib/dgx-spark.md`): the plan treats the unified memory as one pool, `BLOOMERY_ARCH` sets sm_121, and the quant types without an aarch64 kernel run through a scalar mirror. Two Sparks over RDMA serve one model, a node owning routed experts (#358, #420). The release binaries are x86-64 only |
| Host CPU | x86-64 with AVX2 (x86-64-v3), AMD or Intel. Every number here comes from an 8-channel host; a 2-channel desktop host is not measured here and runs the CPU experts slower |
| macOS, Apple silicon · AMD GPUs, Windows without WSL2 | Not supported yet · Not supported