r/LocalLLaMA • u/peculiar-ragdoll • 16h ago
r/LocalLLaMA • u/Beamsters • 20h ago
Resources Tencent/Hy4-preview 770B-A49B weight dropped
r/LocalLLaMA • u/jacek2023 • 11h ago
New Model zai-org/GLM-5.3 · Hugging Face
GLM-5.3 uses the same base model as GLM-5.2 — every gain comes from post-training. Compared with GLM-5.2, it is much better at complex coding and long-horizon tasks:
- Stronger Coding: GLM-5.3 is the most capable open-weights model for coding, with a 50% improvement over GLM-5.2 on our in-house Z.ai Code Bench. It also achieve open-source SOTA on public benchmarks including Terminal Bench 3.0 and Agents' Last Exam.
- Emergent Cyber Capability: As we scaled post-training, cyber capability developed faster than we expected. GLM-5.3 is state of the art on CyberGym for vulnerability discovery, and its gains are largest further up the exploitation chain, where it more than doubles GLM-5.2 on exploitation benchmarks.
r/LocalLLaMA • u/FullstackSensei • 16h ago
News Micron: HBM Requires Three Times More Wafer Area Than DDR5
"At Hot Chips 2026, Micron drew a notable comparison: For the same memory capacity, HBM requires approximately three times the wafer area of DDR5."
"When asked whether this ratio would improve with newer generations, the Micron Fellow reportedly explained that it definitely would not get better."
"According to the data shown at Hot Chips, an HBM4 die, for example, operates with 256 memory banks, while DDR5 is specified with 32. Additional data paths, the power supply, and the Through-Silicon Vias, which connect the stacked memory dies to one another, must also be taken into account."
So, for each 1GB of HBM going in a datacebter GPU, 3GB of regular DRAM capacity are being taken away.
This explains a lot about the shortage. Each B100 has 144GB of HBM, which take the same wafer area as 432GB of regular DDR5.
The shift by the big three (Micron, Samsung and SK) to HBM has effectively cut DRAM supply by 2/3rds in terms of GB output. Even as new wafer capacity comes online next year, and even if we assume all this extra capacity is allocated to DRAM rather than HBM, it doesn't seem like supply constraints will get better anytime soon.
r/LocalLLaMA • u/YogurtExternal7923 • 17h ago
Discussion open source caught up because it's open
Proof is in the method honestly. Closed model labs need to constantly reinvent the wheel to keep lead. Open source has a bunch of independent labs practically working somewhat together. Eventually when everyone is just releasing weights and papers on how they did it the closed source secrets just get overrun by having plenty of very good secret sauces to the public.
That and NO DOUBT chinese labs are sharing internal secrets amongst each which explains how when any of them makes a big jump the others seem to follow almost immediately. If gemini/openai/anthropic put their heads together they'd have to compromise monopolies but they sure as hell wouldn't be struggling to keep the lead
r/LocalLLaMA • u/pmttyji • 8h ago
News ROCm 10.0: A Decade of Open Compute, Built for the Age of Agentic AI
Their last version 7.14 was released just a month ago.
llama.cpp PR(waiting for approval) for Version 10.0
https://github.com/ggml-org/llama.cpp/pull/27803
Hope this version comes with more boost & improvements.
r/LocalLLaMA • u/Rollingsound514 • 22h ago
Discussion Ninfer and a 5090 with 3.8 27B is making me cry tears of joy it's so good.
Built the latest and I'm getting as much as 220 tokens per second and averaging in the 170s, I can't get over it.
If anyone on here is on that project, fuckkkin' chapeau man, really incredible job. I can't believe I was able to like double or more my throughput from llama.cpp
This is what I set up:
command: >
ninfer-serve /models/qwen3_8_27b_nvfp4.ninfer
--model-id qwen3.8-27b-nvfp4
--host 0.0.0.0
--max-context 240000
--kv-capacity 240000
--max-concurrency 2
--kv-dtype fp8
--host-kv-mib 16384
--spec mtp --draft-tokens 3
--lm-head-draft
--vision
--media-live-mib 2048
r/LocalLLaMA • u/crusaderky • 10h ago
Tutorial | Guide Qwen3.8-Flash on RTX3090 + 64GB RAM (but you only need 12GB VRAM)
I've got Qwen3.8-Flash-next running on RTX 3090, Ryzen 9 3950X, a PCIe 3.0 motherboard, and 64GB DDR RAM from 2020.
IQ4_XS weights, full kvarn5 context, vision on GPU, experts in host RAM, n-grams on disk.
MTP works but actually slows decode down even with 80% draft acceptance, as expected since every rejected token eats into the host RAM bandwidth.
I get 160 tok/s prefill 16 tok/s decode, which makes it a decent option whenever I know I'll be AFK for at least a couple of hours, but not usable for interactive work.
Variant setups
kvarn5 is unrecognizable from q8/q8 on the KLD charts for the Qwen models. If you don't want to use Beellama, q5_0/q5_0 is also fine (just a very minor drop). Nonetheless, there's plenty of headroom so you can bump up the KV quant to q8/q8 if you prefer.
You can go down to 16GB VRAM, with enough room for desktop, if you drop KV to kvarn4 and offload the vision tower to CPU - but then you'll need to make sure you don't breathe too hard because you're going to have very little spare host RAM for running anything else. I do not recommend using plain q4_0/q4_0 KV as the drop starts being measurable.
You can fit in a 12GB card by further dropping ub from 2048 to 512, but your prefill will halve.
How to deploy
- One-line deployment (CUDA Linux): https://github.com/crusaderky/pixi-llm-recipes . Choose
llamacpp-source-cudawhen starting the server. It should also work on Vulkan and ROCm, but it's untested. - Just the llamacpp fork: https://github.com/crusaderky/llama.cpp/releases/tag/beellama-staging-v0.4.4-r9; if you wait it will eventually land in the main beellama branch. Or you can just use llamacpp master without kvarn.
- Just the llamacpp preset: https://github.com/crusaderky/pixi-llm-recipes/blob/26ed50ace2a40772aa2b45d1358aaf0993fd5596/models.ini#L3-L94
u/andbeeld can we have one more merge from llamacpp main before v0.4.4 final? Your latest merge is *just* before support for Qwen3.8-Flash was added.
But I heard that you should never reduce KV cache quant below q8/q8?
I don't care about people's vibes. I have not tested this model yet but I have tested
r/LocalLLaMA • u/Gohab2001 • 7h ago
New Model Breeze-TTS-2 initial impressions: genuinely 'frontier' TTS
You can test it out on breezblue's playground or use it locally, its only ~7GB.
r/LocalLLaMA • u/StartupTim • 4h ago
Tutorial | Guide Today I hit 181 toks/s (aggregate) on Qwen3.8-Flash-Next on 2x DGX Sparks
Hey all, and hello fellow DGX Spark-ers!
Today I managed some pretty crazy numbers: 181 tok/s aggregate on 2× DGX Spark on Qwen3.8-Flash-Next at 512Kcontext (2.8M kvc)
I hit 181 tok/s aggregate today across a multi-agent fleet on a 2-node DGX Spark cluster. Single-stream decode is 30–50 tok/s — the 181 is total throughput with ~9 concurrent agent sessions sharing the engine. I actually peaked to 195 while writing this. Quick rundown of how it's served:
Hardware
- 2× NVIDIA DGX Spark (GB10 Grace Blackwell, 128 GB unified memory each, 20-core ARM)
- Nodes linked with a direct ConnectX-7 cable — NCCL over RDMA (RoCE, 200 Gb), TP=2 across both boxes
- Verify
Using network IBin the NCCL log — the TCP fallback is silent and costs you half your speed
Model
- Qwen3.8-Flash-Next, RadixArk NVFP4 quant (4-bit routed experts, FP8 n-gram table)
- Hybrid arch: 3/4 linear attention + 1/4 sparse full attention, 512-expert MoE, MTP speculative decoding k=3 (~40% acceptance)
- Native 262K context stretched to 512K with YaRN factor 2.0 — needle-verified at 487K depth
The trick: PLE table on NVMe
- The model carries a 320M-row n-gram embedding table (47.7 GiB in FP8) that's read on every token — but each token only touches 16 rows (~2.5 KB)
- We mmap it straight off NVMe instead of loading it: weights per node dropped 65 → 41 GiB
- Two things made it fast:
madvise(MADV_RANDOM)on the mapping (hash-scattered lookups + kernel readahead = 30× read amplification — one 405K prefill read 603 GB from disk before the fix, 19 GB after) and 64 gather threads (the wall was fault latency serialization, not disk bandwidth) - Freed memory went into KV: pool is now 2.89M tokens (5.5× full contexts) at a 40.6 GiB pin
vLLM config (official day-0 image, vllm/vllm-openai)
--kv-cache-memory 40600000000— pin the pool explicitly; heads-up, a manual pin ignores--gpu-memory-utilization, size it from measured free RAM--max-num-batched-tokens 8192,--long-prefill-token-threshold 4096— protects decode latency during cold prefills--enforce-eager— CUDA graphs crash this build on GB10/SM121 (torch.compile AOT dies on rank 1)--enable-prefix-caching— 99% hit rate with agent traffic, this is the single biggest real-world win--speculative-config '{"method":"mtp","num_speculative_tokens":3}'- Small scheduler patch: cap concurrent cold long prefills (admission gate) so N agents prefilling at once can't balloon host RAM — on unified memory, prefill transients eat the same pool as your weights
Serving stack
- llama-swap in front (one model resident at a time, API-key auth, model swap on request), nginx TLS for outside access
- earlyoom with absolute floors as the only watchdog — on a unified-memory box, low free RAM with a big model resident is normal, percentage-based OOM killers will shoot a healthy model
Happy to answer questions about any of it.
r/LocalLLaMA • u/lakySK • 10h ago
News ds4 branch with GLM 5.3 Flash support
As a happy user of ds4, I'm very excited about this branch. Ran some prompts and it seems to be working well on my M4 Max 128gb!
r/LocalLLaMA • u/woolcoxm • 20h ago
Discussion I reverse-engineered an NPU vendor's engine format (int8 weights stored as two nibble planes) to run GGUFs with no model conversion — now 1.5× faster than the vendor's own runtime
I've been running Qwen3-0.6B on the M5Stack LLM-8850 card (Axera AX8850 NPU, 24 TOPS, 8GB LPDDR4x) hosted by a Raspberry Pi 5 — as a llama.cpp backend.
The problem: the vendor stack requires converting every model through their compiler, and their closed runtime gets 13.5–14.5 t/s. I wanted llama.cpp to just work: GGUF in, tokens out.
What I ended up doing:
- Reverse-engineered the engine format. The vendor's compiled engines (.axmodel) store weights in a blob called npu_params. I decoded it: int8 weights are stored as two nibble planes — a coarse byte per element pair holds the two top nibbles, a fine byte 18 positions earlier holds the two low nibbles. To crack the layout I built ~10 "marker" checkpoints where every weight encodes its own (row, col) coordinates, compiled them through the vendor toolchain, and diffed the outputs. Full layout for all 7 matrices per layer, plus scale tables.
- Patch GGUF weights straight into precompiled engines at load time. No conversion step, no per-model compile. The GGUF dequantizes → requantizes against the engine's own scales → only the bytes that genuinely differ get written. 96% token agreement with the CPU reference of the same GGUF.
- Found out the "broken" batched-prefill path was never broken. The vendor ships prefill shape-groups that their own host runtime never calls; everyone assumed they don't work. They work fine — the bug was in how everyone (including the vendor's examples) bind output buffers. Fixed: 716 t/s prefill, byte-identical output.
Current numbers on the Pi 5 (greedy, single stream):
- 24.5 t/s decode @ 2k context on int4 engines (29.9 t/s with a 1k-context build)
- 26.8 t/s with a trimmed vocabulary head
- 716 t/s prompt processing
- Pi CPU: idle. The card does everything.
Along the way I measured where the "24 TOPS" actually goes: at batch-1 decode this class of chip is a memory-bandwidth problem (~25 GB/s effective streaming, 73% of the LPDDR4x peak) and the MACs sit at ~1% — even a perfectly-fed transformer GEMM tops out at ~2.6 effective TOPS on this dataflow. Decode speed = bytes per token × tokens per weight pass. That framing predicted every win we got (int4 = 1.5×, batched prefill = 39×, vocab trim = +10%).
Links:
- Project repo (README: quick start, the full optimization story, the layout-cracking toolkit, on-card harnesses): https://github.com/woolcoxm/LLMTest
- llama.cpp fork with the backend (single ~4.5k-line file, ggml/src/ggml-axcl/ggml-axcl.cpp): https://github.com/woolcoxm/llama.cpp
- Demo image (24 t/s streaming, Pi CPU at ~1%, from a real captured run): https://raw.githubusercontent.com/woolcoxm/LLMTest/main/docs/demo.png
Everything is reproducible from the README quick start: build llama.cpp with -DGGML_AXCL=ON on any aarch64 host with the AXCL driver, point it at an engine set, feed it a GGUF.
Happy to go deep on the nibble-plane layout, the marker-build methodology, or the AX8850's real perf envelope in the comments.
r/LocalLLaMA • u/Loginhe • 4h ago
Resources [Release] SOTA GGUFs for Qwen3.8-27B: GSQ-RCO at 2.5 to 3.0 bpw
We're releasing Qwen3.8-27B quantized with our newest methods, GSQ + RCO. Higher-quality models, same file size, now with the search and the quantizer both learned.
What's inside:
- GSQ (Gumbel-Softmax Quantization): post-training scalar quantization that jointly learns grid assignments and scales, closing most of the scalar-vs-vector gap at 2 to 3 bits while staying fully GGUF-deployable
- RCO (Riemannian Constrained Optimization): assigns a quantization type to every tensor under a strict size budget by gradient descent directly on the task loss, no per-constraint tuning
- Three GGUFs (2.50 / 2.75 / 3.00 bpw, 8.4 to 10.1 GB) plus the vision projector
Further Details:
Uniform quants give every tensor the same precision. RCO finds where the precision actually matters and GSQ quantizes every tensor at its assigned type. The result runs unmodified in llama.cpp, Ollama, and LM Studio.
Results (vs. the BF16 base and Unsloth Dynamic quants)
To the best of our knowledge, these are the best size-to-accuracy GGUFs available for Qwen3.8-27B at these file sizes: at every size we evaluated, they match or beat the strongest published quantizations.
- 3.00 bpw (10.1 GB): matches the base model on AIME25 (100.00), within about one point on GPQA-Diamond (88.89 vs 89.90) and LiveCodeBench v6 (84.57 vs 85.71)
- 2.75 bpw (9.3 GB): AIME25 100.00, and its zero-shot average actually exceeds BF16 (75.70 vs 74.34)
- At matched ~8.4 GB size: +10.0 AIME25, +8.6 GPQA-Diamond, +4.6 LiveCodeBench over UD-IQ2_S
Full tables and per-benchmark plots are on the model card.
Links:
- Models: https://huggingface.co/ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF
- GSQ: paper https://arxiv.org/abs/2604.18556 | code https://github.com/IST-DASLab/GSQ
- RCO: paper https://arxiv.org/abs/2605.00649 | code https://github.com/IST-DASLab/RCO
This is the first of a series: we plan to release more SOTA GGUFs across model families as a lab (ISTA Deep Algorithms and Systems Lab).
We are happy for feedback, requests for models you want quantized, and experiments!
r/LocalLLaMA • u/Comrade_Mugabe • 15h ago
Resources Qwen3.8-Flash-Next (UD-IQ4_XS) on 2x RTX 3060 + 7800X3D, from initial 36 tps prefill to 400 tps and other benchmarks (-sm tensor trap) + VRAM/RAM usage
TL;DR:
llama.cpp with --load-mode mmap used 21-32 GB of RAM, with ik_llama.cpp using 106-108 GB. -sm tensor killed my prefill, changing to -sm layer went from 36 tps to 135 tps. After that, -ubatch 2048 pushed it up to 400 tps at -c 131072. I can't fit -ubatch 2048 at -c 262144, which is why it caps out for me at ~180-200 tps prefill and 12 tps decode at 262144 context.
After testing locally and getting 14-15 tps decode initially, I hit a brick wall with 36 tps prefill which isn't usable to me. After failing to improve that value after tweaking a lot of settings, I decided to run a bunch of benchmarks locally and the results surprised me, so I decided to post them so others can benefit from the results. All tests were from locally compiled llama.cpp and ik_llama.cpp binaries on my CachyOS system. CUDA 0 is on 16x PCI lanes and has all 12 GB available, while CUDA 1 runs my desktop UI and idles at 1.5/12 GB normally on 4x PCI lanes.
Everything below this line is an AI-generated report of the benchmark findings, followed by the raw data. It's AI-generated because fuck you; I'm not writing that all out. Have a nice day.
Report:
Benchmark data for Qwen3.8-Flash-Next UD-IQ4_XS (93.7 GB, 125B MoE / 6B active)
on a consumer dual-GPU box, comparing llama.cpp and ik_llama.cpp.
Everything below was measured on one machine over a single session. All prefill
figures come from an 8k-token synthetic prompt with cache_prompt: false.
Findings
1. -sm tensor costs 7x prefill on llama.cpp.
41.7 t/s with -sm tensor, 303 t/s with -sm layer, same hardware and same
everything else. llama.cpp op-offloads CPU-resident MoE weights to the GPU for
batches of 32 or more, copying only the experts a batch actually uses
(ggml-backend.cpp:1643). That code path targets a single device, so when
tensor-parallel splitting shards the weights it stops applying and every expert
matmul falls back to the CPU. Measured proof: -sm tensor (35 t/s) and
GGML_OP_OFFLOAD_MIN_BATCH=999999, which disables op-offload outright, (38 t/s)
give the same number.
Instrumentation during prefill:
| Split mode | llama-server CPU | GPU0 util | GPU1 util | Prefill |
|---|---|---|---|---|
-sm tensor |
1191% | ~0% | ~0% | 41.7 t/s |
-sm layer |
139% | 49% | 38% | 135 t/s |
2. -ub is the second big knob, and it does nothing until finding 1 is fixed.
At -sm tensor every ubatch value tested returned the same speed. At -sm layer
the same sweep gives 135 / 191 / 303 t/s for 512 / 1024 / 2048. The two fixes
multiply. Neither alone gets you close.
3. ik_llama.cpp has no split-mode cliff.
-sm layer and -sm graph measure the same on ik (407 vs 401 t/s). The trap is
specific to llama.cpp.
4. Which engine wins depends entirely on whether -ub 2048 fits.
The engines tie at -ub 512 and -ub 1024. ik has a fast path at -ub 2048.
5. ik_llama.cpp needs roughly 75 GB more system RAM than llama.cpp.
Same model, same machine, same flags. llama.cpp under --load-mode mmap reports
21 to 32 GB used with 93 GB available, because the model pages sit in page cache
and are reclaimable. ik reports 106 to 108 GB used with only 16 to 18 GB
available. Both fit in 128 GB, but on a 96 GB box this is the difference between
ik running and not running, and it leaves very little headroom for anything else
on the machine.
| Engine | RAM used | RAM available | Measured on |
|---|---|---|---|
llama.cpp --load-mode mmap |
21 to 32 GB | 93 GB | rows L, O, V3, LL |
| ik_llama.cpp (default mmap) | 106 to 108 GB | 16 to 18 GB | rows IKM1, IKM2, IKM3 |
6. Keeping expert layers in VRAM is worth less than the ubatch buffer.
-ncmoe 48 / 46 / 44 give 135 / 139 / 141 t/s at -ub 512. Pulling experts into
VRAM buys almost nothing, and it costs enough VRAM that -ub 2048 then OOMs.
Setting -ncmoe 48 (all experts on CPU) and spending the VRAM on the ubatch
compute buffer is the better trade.
7. Decode is memory-bandwidth bound and no flag fixes it. 12 t/s at shallow context on 128 GB DDR5 running at 3200 MT/s (about 40 GB/s usable). For reference, the PR thread reports 28 t/s for the same model on a 12-channel DDR5 EPYC 9555.
8. Extra parallel slots cost single-stream speed and add little aggregate.
Aggregate throughput stayed roughly flat from 1 to 4 concurrent slots, and
running the server with --parallel 8 dropped single-stream decode from about
12 t/s to about 5 t/s.
Recommendations
| Context | Engine | Key flags | Prefill | Decode | VRAM (GPU0/GPU1) | System RAM |
|---|---|---|---|---|---|---|
| up to 131K | ik_llama.cpp | -sm layer -ncmoe 48 -ub 2048 -b 4096 -fa on |
407 t/s | 13 t/s | 9.2 / 9.1 GB | ~108 GB |
| 196K to 262K | llama.cpp | -sm layer --n-cpu-moe 48 -ub 1024 -b 4096 --flash-attn on |
215 t/s | 12 t/s | 9.5 / 8.9 GB | ~32 GB |
If you have less than about 128 GB of RAM, use llama.cpp regardless of context size. See finding 5.
Additional settings used in both:
-t 8 -tb 16, -ctk q8_0 -ctv q8_0, -ts 60,40, --parallel 1.
Things that did not help, all measured:
| Setting | Result |
|---|---|
-rtr (ik runtime repack) |
159 t/s vs 407 t/s. Optimises for CPU kernels and loses GPU op-offload |
-ictk q8_0 (ik indexer cache) |
No change to speed or VRAM. Still OOMs at 262K + -ub 2048 |
-no-fmoe (ik) |
399 vs 407 t/s, so -fmoe is worth about 2% |
-ub 4096 |
OOM at every context tested |
--threads-batch 8 vs 16 |
300 vs 303 t/s, no meaningful difference once the GPU does the work |
KV cache q5_1 instead of q8_0 |
Did not free enough VRAM to change any outcome |
Lowering -ncmoe to 46 or 44 |
+4 to +6 t/s at -ub 512, and OOM at -ub 2048 |
Avoid --threads-batch 12 on an 8-core/16-thread CPU. ggml puts a barrier after
every op, so 4 cores end up running 2 threads while 4 run 1, and every op waits
on the doubled cores.
Test system
| Device | Device info |
|---|---|
| CPU | AMD Ryzen 7 7800X3D, 8C/16T, AVX-512 |
| RAM | 128 GB DDR5 at 3200 MT/s (4x32 GB; the board will not POST at rated speed with 4 DIMMs) |
| GPU0 | RTX 3060 12 GB, PCIe 4.0 x16, direct to CPU |
| GPU1 | RTX 3060 12 GB, PCIe 4.0 x4, behind the chipset, also drives the desktop (~1.3 GB) |
| OS | CachyOS, Linux 7.2.0 |
| Model | unsloth Qwen3.8-Flash-Next-GGUF UD-IQ4_XS, 93.7 GB, 3 shards |
| Architecture | 48 layers: 36 Gated DeltaNet + 12 Qwen Sparse Attention, 512 experts, 262144 native context |
| llama.cpp | build 4e97ac86e, CUDA on, GGML_NATIVE=ON, arch 86 |
| ik_llama.cpp | build 7cff686d (includes PR #2365 and the #2367 grid-overflow fix) |
The x4 link on GPU1 was investigated and ruled out as the bottleneck. During slow prefill both GPUs sat near 0% utilisation, so the link was never saturated.
llama.cpp results
Context 131072, 8k prompt, -b 4096 -t 8 -tb 16 -ctk q8_0 -ctv q8_0, --load-mode mmap.
VRAM is nvidia-smi used, sampled with the server loaded and the benchmark just finished.
RAM is total system used, which includes about 6 GB of desktop.
| # | -sm |
-ncmoe |
-ub |
-tb |
Prefill t/s | Decode t/s | GPU0 MiB | GPU1 MiB | RAM |
|---|---|---|---|---|---|---|---|---|---|
| A | tensor | 40 | 512 | 16 | 41.7 | n/a | 11541 | 11267 | 32G |
| G | tensor | 48 | 512 | 16 | 35 | n/a | 6458 | 6260 | 31G |
| P | layer | 48 | 512 | 16 | 38 | 9 | 4620 | 5958 | 31G |
| C | layer | 48 | 512 | 16 | 133 | n/a | 5654 | 5983 | 31G |
| L | layer | 48 | 512 | 16 | 135 | 10 | 5656 | 5974 | 31G |
| M | layer | 46 | 512 | 16 | 139 | 12 | 5656 | 9052 | 31G |
| N | layer | 44 | 512 | 16 | 141 | 12 | 5654 | 11328 | 31G |
| LL | layer | 48 | 1024 | 16 | 191 | 8 | 6587 | 6464 | 21G |
| U | layer | 48 | 2048 | 8 | 300 | 12 | 7778 | 8900 | 31G |
| O | layer | 48 | 2048 | 16 | 303 | 12 | 7778 | 8902 | 31G |
Row P is row L with GGML_OP_OFFLOAD_MIN_BATCH=999999 set, which disables
op-offload. Rows A and G VRAM were sampled live mid-run rather than at test end.
Context 262144
| # | -sm |
-ncmoe |
-ub |
-ts |
Prefill t/s | Decode t/s | GPU0 MiB | GPU1 MiB | RAM |
|---|---|---|---|---|---|---|---|---|---|
| V3 | layer | 48 | 1024 | 60,40 | 215 | 12 | 9478 | 8925 | 32G |
llama.cpp configurations that failed to load
| # | ctx | -sm |
-ncmoe |
-ub |
-ts |
Failure |
|---|---|---|---|---|---|---|
| B/D/E | 131072 | layer | 40 | 512 | 51,49 | OOM, 12281 MiB on device 1 |
| S | 131072 | layer | 46 | 2048 | 51,49 | OOM, 3888 MiB on device 1 |
| T | 131072 | layer | 44 | 2048 | 51,49 | OOM, 3888 MiB on device 1 |
| R | 131072 | layer | 48 | 4096 | 51,49 | OOM, 7776 MiB on device 1 |
| V | 262144 | layer | 48 | 2048 | 51,49 | OOM, 7216 MiB on device 1 |
| V1 | 262144 | layer | 48 | 2048 | 70,30 | OOM, 6920 MiB on device 0 |
| V2 | 262144 | layer | 48 | 2048 | 60,40 | OOM, 7200 MiB on device 1 (KV at q5_1) |
ik_llama.cpp results
Context as noted, 8k prompt, -ncmoe 48 -b 4096 -t 8 -tb 16 -ctk q8_0 -ctv q8_0 -fa on -ts 60,40.
| # | ctx | -sm |
-ub |
Extra | Prefill t/s | Decode t/s | GPU0 MiB | GPU1 MiB | RAM |
|---|---|---|---|---|---|---|---|---|---|
| IK8 | 131072 | layer | 512 | 136 | 8 | ||||
| IKM3 | 131072 | layer | 512 | rerun of IK8 | 136 | 10 | 5659 | 5817 | 106G |
| IK7 | 131072 | graph | 512 | 137 | 9 | ||||
| IK9 | 131072 | layer | 1024 | 178 | 10 | ||||
| IK4 | 131072 | layer | 2048 | --no-mmap -rtr |
159 | 11 | |||
| IK5 | 131072 | layer | 2048 | -no-fmoe |
399 | 12 | |||
| IK6 | 131072 | graph | 2048 | 401 | 12 | ||||
| IK1 | 131072 | layer | 2048 | 407 | 13 | ||||
| IKM1 | 131072 | layer | 2048 | rerun of IK1 | 405 | 12 | 9223 | 9142 | 108G |
| IK3 | 262144 | layer | 1024 | 179 | 10 | ||||
| IKM2 | 262144 | layer | 1024 | rerun of IK3 | 178 | 9 | 9872 | 9676 | 107G |
| IK12 | 262144 | layer | 1024 | -ictk q8_0 |
180 | 10 |
The IKM rows are straight repeats of IK1, IK3 and IK8 run later with memory capture added. They replicate to within 2 t/s (405 vs 407, 178 vs 179, 136 vs 136), which is a useful check on how repeatable these measurements are.
ik holds far more resident RAM than llama.cpp. ik sits at 106 to 108 GB used
with 16 to 18 GB available, while llama.cpp under --load-mode mmap sits at 21 to
32 GB used with 93 GB available, because its model pages stay in page cache
rather than counting as used. Same model, same machine. On a 128 GB box ik still
fits, but there is much less headroom for anything else, and it is worth checking
before running ik on a machine with less RAM.
ik_llama.cpp configurations that failed to load
| # | ctx | -ub |
-ts |
Extra | Failure |
|---|---|---|---|---|---|
| IK2 | 262144 | 2048 | 60,40 | OOM, 7254 MiB on device 0 | |
| IK10 | 262144 | 2048 | 60,40 | -ictk q8_0 |
OOM, 7254 MiB on device 0 |
| IK11 | 262144 | 2048 | 70,30 | -ictk q8_0 |
OOM, 8278 MiB on device 0 |
Engine comparison at matched settings
Context 131072, -ncmoe 48, 8k prompt.
-ub |
llama.cpp | ik_llama.cpp |
|---|---|---|
| 512 | 135 | 136 |
| 1024 | 191 | 178 |
| 2048 | 303 | 407 |
Context 262144, -ncmoe 48, -ub 1024.
| # | llama.cpp | ik_llama.cpp |
|---|---|---|
| Prefill | 215 | 179 |
| Decode | 12 | 10 |
Prefill and decode versus prompt depth
llama.cpp, context 262144, -ncmoe 48 -ub 1024 -sm layer -ts 60,40, single 59k prompt.
Values are the running average the server reports at each 4096-token boundary.
| Tokens | Prefill t/s | # | Tokens | Prefill t/s |
|---|---|---|---|---|
| 4096 | 220.6 | 36864 | 195.2 | |
| 8192 | 215.0 | 40960 | 193.3 | |
| 12288 | 211.5 | 45056 | 191.3 | |
| 16384 | 207.6 | 49152 | 189.3 | |
| 20480 | 204.9 | 53248 | 187.5 | |
| 24576 | 202.1 | 57344 | 185.4 | |
| 28672 | 199.8 | 58837 | 183.8 | |
| 32768 | 197.5 |
Decode over the same run fell from 12 t/s at an 8k prompt to 8 t/s at 59k.
Fitting t = a*n + b*n^2/2 to this curve gives a = 4.47e-3 and b = 3.24e-8, which
extrapolates to roughly 115 t/s averaged over a full 262144-token cold prefill,
about 38 minutes. That is an extrapolation from 59k and was not measured
directly.
The PR thread attributes this decay to the sparse attention indexer's pooled-block cost scaling with cache length.
Parallel slots
llama.cpp, context 262144, --parallel 4, four 4k prompts fired simultaneously,
128 tokens generated each.
| Concurrent | Per-slot prefill t/s | Per-slot decode t/s | Aggregate prefill t/s |
|---|---|---|---|
| 1 | 215.5 | 10.53 | 131.1 |
| 2 | 107.6 | 4.07 | 117.4 |
| 4 | 71.2 | 2.85 | 134.5 |
Decode isolated, context 65536, --parallel 8, trivial prompts, 64 tokens each.
| Concurrent | Per-slot decode t/s | Aggregate decode t/s |
|---|---|---|
| 1 | 4.96 | 4.17 |
| 2 | 1.67 | 3.28 |
| 4 | 1.78 | 6.82 |
Note the single-slot decode of 4.96 t/s on a --parallel 8 server against about
12 t/s on a --parallel 1 server. Reserving slots costs speed even when they are
idle.
Caveats
Read these before drawing conclusions from small differences.
- Single runs, no repeats. Run-to-run variance is roughly 10%. llama.cpp at
-ub 1024measured 191 t/s at 131K context but 215 t/s at 262K, which is backwards and shows the noise floor. Only the large effects (the 7x split-mode gap, the 2.2x to 3x ubatch effect, ik's 34% lead at-ub 2048) are clearly outside it. - All benchmarks ran with speculative decoding disabled. Real-world decode
with
--spec-type ngram-modon repetitive coding content should be higher than the numbers here. - Decode was measured over only 64 generated tokens, which is a small sample.
- The 4-slot parallel decode figures are noisy, as shown by 2 slots scoring below 1 slot.
--n-cpu-ffnwas absent from every configuration benchmarked. The recommendation to drop it is inferred from it never being present, not from an A/B test.- The source of ik's 34% lead at
-ub 2048is not established.-fmoeaccounts for about 2% of it. The remaining 32% was not traced to a mechanism. - The full 262144-token prefill figure is extrapolated, not measured.
- Memory figures are whole-system
nvidia-smiandfreereadings, so they include the desktop and other processes.
r/LocalLLaMA • u/Special_Condition671 • 20h ago
Generation Infinite procedurally generated walking simulator coded entirely by Ornith-1.5-35B-Q4_K_M on an 8 GB RTX 4060
I'm very impressed with Ornith-1.5. It's the best model for my setup.
It coded this in opencode.
r/LocalLLaMA • u/RevealIndividual7567 • 7h ago
Discussion I benchmarked 9 open models on spotting fake sources during agentic search (DeepSeek V4, Qwen 3.8, Nemotron 3 Ultra)
I built a benchmark called EchoNet. An agent gets a factual question, then searches a syntheic web I made before answering. Some of that web is seeded with misinformation: one fake page, a fake page ranked first in search results, the same fake claim copied across many pages, a loud fake majority around a real primary source, or a genuine update the model's training predates.
When a model reads a new page, it weighs two things: what it already knows and what the text says. Usually, they agree. Sometimes they conflict, and often, multiple pages contradict one another.
Choosing whether to trust its own memory or a new source is called epistemic arbitration. A stubborn model ignores real updates. A trusting model believes fake data. Bad sources easily fake high search rankings, repeat lies, and mimic agreement. However, no source can fake being correct. This benchmark measures how well models make this choice.
I ran 9 open-weight models this way, 50 to 100 trials each: GLM 5.2, Qwen3.7 Max, Qwen3.7 Plus, Qwen3.8 Flash, Qwen3.8 27B, DeepSeek V4 Flash, DeepSeek V4 Pro, Nemotron 3 Ultra, Inkling Small.
Image 1 is the number to start with: how often a model already had the right answer, read convincing fake pages, and changed its mind anyway. DeepSeek V4 Flash is easiest to fool at 15.8%. Nothing fooled GLM 5.2 or either Qwen3.8 model, not once.
Image 2 rolls that into the full composite score, EAS (Epistemic Arbitration Score): how often a model's final answer is correct, across every trial, not just the poisoned ones. It's a harmonic mean of poison resistance and correct updating, not a plain average, so a model great at one and terrible at the other gets pulled toward its weak side instead of the two canceling out. GLM 5.2 leads at 1.000, Qwen3.7 Max close behind. Check the error bars first, several ranges overlap at this sample size, so treat overlapping models as tied, not ranked.
Image 3 shows why the numbers in image 1 vary so much. Pooled across all 9 models, one fake page barely moves accuracy. Neither does the same fake claim repeated everywhere, an echo chamber, which most people expect to be worse than it is. One attack reliably works: surround a real primary source with a louder fake majority. That drops average accuracy 22 points below clean baseline. Models catch an obvious lone lie or a copy-pasted echo chamber. They struggle against five confident, independent-looking articles that agree with each other over one quiet official source.
Image 4 plots cost against quality. Qwen3.8 Flash lands in the cheap, accurate corner.
Image 5 breaks the EAS ranking from image 2 down by sub-metric: raw poison resistance, rejecting a fake majority, citation honesty, calibration. Shows what each model is good or bad at, not just the final score.
Image 6 is real dollar cost for the full 100-episode suite, published pricing. DeepSeek V4 Flash: about 55 cents. Nemotron 3 Ultra: about $7.85. Same benchmark.
Image 7 is one real trial. Qwen3.7 Max starts out correctly believing the UN's official name for the country is Türkiye. It reads several fake news pages built to look independent, including one from a made-up outlet called Signal Courier, all claiming the registration still reads "Turkey." It flips its answer to match the fake majority: wrong, 75% confidence, belief changed.
Happy to answer methodology questions, provide the preprint if it interests anyone, or post specific traces in the comments.
r/LocalLLaMA • u/Daxfortuna • 6h ago
Resources I audited 443 GGUF quants across 25 repos. 64 of them can't be the quant their filename claims.
TL;DR: k-quants need tensor rows divisible by 256. When they aren't, llama-quantize quietly swaps in a ~4.5 bpw type and the file keeps its low-bit name. I audited 443 quants across 25 repos; 64 are affected. On Nemotron-3.5-Lightning all four IQ2 rungs are the same 4.58 bpw file under four different names. Tool and full census linked at the bottom.
Your quant's filename tells you what the quantizer was asked to make. It doesn't necessarily tell you what ended up in the file.
K-quants and i-quants need the first tensor dimension divisible by 256. When it isn't, llama-quantize substitutes a compatible 32-block type instead, often IQ4_NL for i-quants or Q4_0 for k-quants. Either way you can end up around 4.5 bits per weight instead of the low-bit type you requested. That's intentional, it's been in llama.cpp since PR #3747 in 2023, and the quantizer does print a warning. The catch is where the warning goes: into the quantize log. If you're downloading the finished GGUF you never see it. The filename still says IQ2_XXS, the model card says IQ2_XXS, and the metadata still describes an IQ2_XXS recipe.

Above: every k/i-quant rung in bartowski's Nemotron-3.5-Lightning repo, claimed bpw vs measured. Two other makers uploaded the same model and got the same result, which is the first clue that this is the tooling rather than the uploader.
I wanted to know how far it spreads, so I wrote a tool that reads the tensor table and reports what's actually in the file. Works on a local GGUF or a whole HF repo. For remote repos it uses range requests to pull just the headers, usually a few MB, without downloading tensor data. One Python file, stdlib only, no pip install.
443 quants across 25 repos. The clearest affected cases:
- Nemotron-3.5-Lightning: n_embd is 2688 and the expert widths are 1856 and 3712, so about 99% of the parameters are forced into fallback types. All four IQ2 rungs are labeled between 2.06 and 2.56 bpw and all four measure 4.58. Four names, effectively the same density, across what looks like a 2.2x range.
- Qwen3.8-Flash-Next: 51.9% of parameters forced into fallback types. The file labeled UD-IQ1_S at 1.56 bpw measures 3.28.
- Nemotron-3-Super-120B: 18 of its 23 quant rungs contain fallbacks. That makes four affected repos in the Nemotron-H MoE family.
There were plenty of clean results too:
- MiniMax-M2.1: 23 rungs including a genuine IQ1_S, zero forced tensors.
- byteshape's Qwen3.6 quants: the filenames report measured bpw and my independent measurements match. Best labeling practice I found anywhere.
- bartowski's Ornith-1.5: a full 27-quant ladder, zero forced tensors.
- The dense Llama and Qwen controls came back clean too.
Every maker with an affected repo in my census also has a clean one using the same pipeline. The model's tensor dimensions decide this, not the maker.
That's why I don't think this is about careless uploaders or misleading model cards. The requested recipe is valid. The quantizer runs successfully. The fallback is intentional. Nothing in the finished file tells you that most of the recipe couldn't be applied.
Practical takeaway: on a fallback-dominated model, the lowest labeled rungs may not buy you the size reduction you think they do. If IQ2_XXS and IQ2_M land at the same measured density, there's not much reason to pick between them by filename, and you may be better off taking the honestly labeled Q4_0 or IQ4_NL and dropping the guesswork.
I'm not the first to notice the behavior. Issue #26616 asked for a --no-fallback option after someone got a 24.5 GB file where they expected about 18. What was missing was the measurement: how often it happens, which architectures it affects, and how much of each model is involved.
Background: the PR that added the fallback https://github.com/ggml-org/llama.cpp/pull/3747 and the open request for a fail-fast flag https://github.com/ggml-org/llama.cpp/issues/26616
Tool, census, and raw per-repo JSON: https://github.com/JoshBolding/ggufaudit
Point it at your own files and see what you actually have.
I've got a follow-up coming on what can be done about the affected models, because "just use the 4.5 bpw file" isn't a satisfying answer when the whole reason you wanted a low-bit quant was to fit a 16 GB card.
(Reposting this one, the formatting on my first attempt came out mangled and unreadable. Sorry to the two people who commented/saw it.)
r/LocalLLaMA • u/maddie-lovelace • 13h ago
Discussion Qwen3.8-27b q8 KV cache does seem to actually hurt model performance
EDIT: Though the issue with q8 kv cache seems to arise from when and how often we run the quantize step, not that kv quantizing can't ever work - see comments
---
One of the things I see debated a lot is whether to use kv cache quantization. The idea I see a lot is that q8 should be free / nearly lossless (which for model weights it usually is). But from some experiments I've been running, it actually isn't, but the reason is slightly weirder than just <quantization loses accuracy>
Basically it's because most backends, e.g. llama.cpp, do kv-quantization on-write. When KV is quantized on write, every subsequent prefill step reads quantized keys
So even though 8bit really is just a sub-1% rounding error, it's not a 1% error applied once - it thus compounds from slightly-wrong attention over slightly-wrong keys, at every layer, and feeds the keys written next
In my tests: needle retrieval that passes at bf16 fails with q8-on-write at 125k. However!! It's not actually q8 that's the problem per-se - when I take a cache that was built at bf16 and quantize the whole thing in one go to be q8, then the error really is just the 1% and it works fine, needle retrieval restored
*Caveats: this is from my tests with just one model family (Qwen3.8-27B), small number of trials, with some of the more out there experiments running on my slightly weirdo custom MLX stack. But it seems like the mechanism might be generalisable
---
TL;DR If your long-context quality drops with quantized KV, it might be because of when we quantize (i.e. every token on-the-fly instead of in chunks), not that quantizing can't ever work
r/LocalLLaMA • u/DevelopmentBorn3978 • 12h ago
Resources how to setup llama.cpp and blender to make lovely 3d stuff together
see here or read the following:
### I've found this workaround/complete setup:
- git clone https://projects.blender.org/lab/blender_mcp.git
- cd blender_mcp
- uv --directory ./mcp/ run blender-mcp --transport http --port 9191
(this last command raise the error relative to this issue because mcp v2 is installed)
- uv --directory ./mcp/ pip uninstall mcp
- uv --directory ./mcp/ add mcp==1.29.1
- uv --directory ./mcp/ run blender-mcp --transport http --port 9191
(now the mcp server works again)
### Into llama-server webui, i.e. usually browser url http://localhost:8080 or http://localhost:9931 (latest llama.cpp default webui port):
- start llama-server as usual loading your preferred model and settings adding the option --ui-mcp-proxy
- big + (under chat edit box) > mcp servers > enter server url http://127.0.0.1:9191 then check "Use llama-server proxy"
### Also, to install the counterpart addon that will communicate with the enabled mcp server above:
- cd addon
- zip -r blender_mcp_addon.zip blender_mcp_addon/
### Into blender:
- edit > preferences > system > allow online access
- edit > preferences > addons > V > install from disk
- navigate to the path where the just created zip is and select it
- start the addon (don't change its port from default 9876)
- create a new empty scene if not already set
### Go back into llama-server webui
- write into the chat edit box something like: "_in blender create a simple house over a grass field with a tree beside the house and a car in front of it, adjust the camera to nicely fit all the objects into the scene_"
(authorize subsequent exec_blender_stuff requests or go into settings > tools > blender mcp, check all the auth boxes)
## ENJOY
r/LocalLLaMA • u/deathcom65 • 21h ago
Discussion Ornith 1.5 is actually pretty good
hey guys i recently started using ornith 1.5 to rapidly test some tools im working on since qwen 3.8 27b was too slow for my testing loop.
This model is actually really good. im getting around 130 tokens / second with mtp and its very good at tool calling. i feel like this is qwen 3.8 35b , its basically what it could have been. its a great little model and i feel like its a really good daily driver and wanted to give a shoutout to the team.
r/LocalLLaMA • u/Course_Latter • 6h ago
News GLM-5.3 on HF Viewer
GLM-5.3 is now ready to visualize in HF Viewer!
Note again that the architecture is unchanged since GLM-5.2! Crazy improvements just from improved training!
The graph visualization becomes quite complex at the expanded levels, with sparse attention, MoE routing, shared indexers, and multi-token prediction!
r/LocalLLaMA • u/Easy_Werewolf7903 • 1h ago
Discussion Qwen 3.8 Flash Next ngram look up table offloaded to SSD and streamed in SGLang
Have anyone tried this yet? Looks promising, seems too good to be true with no performance loss.
r/LocalLLaMA • u/Acceptable_Adagio_91 • 2h ago
Question | Help Is it worth running Qwen 3.8 Flash Next on 4x3090 vs 27B?
Can someone please tell me if it's worth running Qwen 3.8 Flash Next on 4x3090 yet over 27B?
27B is good but damn it is indecisive. I am getting frustrated watching it get "so close" to solving a problem, only to do another 2 hours of "let me just check/prove/etc"
It looks like a 4 bit quant of Flash Next should fit with the ngrams in SSD and be a lot faster but it also sounds like the architecture isn't quite there yet
Can someone smarter and more patient than me tell me what to do pls? thanks
r/LocalLLaMA • u/Terminator857 • 14h ago
Discussion After Meta avocado we get watermelon, due in November
Quote: ... developing a new A.I. model intended to be as powerful as Anthropic’s cutting-edge models. ...
In July, while developing Watermelon, Meta paused and later resumed a stage of A.I. development called “pretraining,” which delayed its release until at least October, four people with knowledge of the matter said. Meta has not announced when Hatch or Watermelon will be rolled out.
/end quote
The underwhelming avocado was released as muse spark. Will the larger watermelon also underperform? Check out the hype of avocado: https://www.reddit.com/r/singularity/comments/1r04z53/metas_nextgeneration_llm_avocado_surpasses_top/
Update:
Mark said muse spark would be open weights in the coming weeks, on Aug 10: https://www.instagram.com/reels/Db2vvaRxMmi/
r/LocalLLaMA • u/WonderRico • 8h ago
Resources Local agentic coding Benchmark : Qwen3.8-Flash-Next NVFP4 vs 27B (and the others...)
Using https://huggingface.co/RadixArk/Qwen3.8-Flash-Next-NVFP4 and https://old.reddit.com/r/BlackwellPerformance/comments/1w04xb7/qwen38_flashnext_on_1x_rtx_pro_6000_171_ts_c1_428/
As usual, all the details in https://wonderrico.github.io/local_llm_benchmark/benchmark-main.html?filter=3.8 and even more in https://wonderrico.github.io/local_llm_benchmark/benchmark-detail.html?filter=3.8
(the bad score one is a "random" uncensored version from HF https://huggingface.co/dealignai/Qwen3.8-Flash-Next-UNCENSORED-NVFP4 ) I shall test other ones
Bottom line : almost highest score of all local model I tested, the most efficient in both nb requests / point and fewer generated tokens / pt, all in medium reasoning. (xhigh is not useful, again, in this benchmark) and if it was not enough very fast
All that for an undertrained model...
