▲ 5 r/u_BoxieBoo+1 crossposts

[Benchmark] Qwen3.8-Flash-Next 125B speed test via Strata layer-split + first same-harness PPL of GSQ-RCO vs unsloth Dynamic quants

TL;DR

  • 3× modded RTX 2080 Ti 22 GB (66 GB VRAM total) runs Qwen3.8-Flash-Next 125B MoE (~6B active) at 66.6 tok/s decode / 742 tok/s prefill with Strata’s layer-split — and 932 tok/s prefill on a fresh 83K-token prompt.
  • First same-harness perplexity comparison of the two competing quant families on this model (neither vendor publishes this head-to-head): UD-Q4_K_XL 4.1263 > IQ3_S 4.1967 > IQ3_XXS 4.2173, paired t-test over 72 chunks: Q4’s lead is significant (t=4.45 / 5.33); S vs XXS is not (t=1.05).
  • Strata layer-split beats NVLink peer mode by +83% and beats a standard llama.cpp partial-offload layout by 2.5× decode / 4.4× prefill on identical hardware.
  • 512K context is nearly free: 59.9 vs 66.6 tok/s at 262K (-10%, within noise of these runs), RSS +4 GB.

HARDWARE

Part Detail
CPU Intel Core i9-7980XE (Skylake-X), 18C/36T @ 2.6 GHz base, AVX-512
Board X299-E chipset (LGA2066), ASUS
RAM 128 GB DDR4-3600, quad-channel (8×16 GB G.Skill F4-3600C18, 2 DPC) — 125 GiB usable
Measured RAM BW STREAM triad 73.6 GB/s, 2 GB-block write 103.6 GB/s (peak spec 115.2)
GPUs 3× RTX 2080 Ti 22 GB (11→22 GB mod) = 66 GB VRAM
GPU power 167 W cap each (67% of stock 250 W, tuned from an efficiency sweep), boost 2100 MHz
Topology GPU0 x16, GPU1 x16 + NVLink→GPU2 (2×25.8 GB/s), GPU2 x8 (on a riser)
Storage 2× NVMe SSD RAID0, 953.6 GiB, ~2.6 GB/s read (model files)
Software Linux, driver 580.178.04 / CUDA 13.0, Strata 0.1.38, llama.cpp build 349 (sm_75+sm_86)

Models (all GGUF, from HF):

Quant bpw Size Source
UD-Q4_K_XL ~4.7 111.3 GB unsloth Dynamic
GSQ-RCO IQ3_S 3.50 83.6 GB ISTA-DASLab
GSQ-RCO IQ3_XXS 3.00 75.8 GB ISTA-DASLab

Strata splits the 48 layers into 3 stages (layer-split), keeps hot experts GPU-resident in an adaptive per-card cache (97–100% of routed mass), streams the rest from a RAM arena, PLE/n-gram table reads direct from NVMe, KV = int8 with a 32768-cell VRAM window.

SPEED (3-RUN AVERAGES, ~3K-TOKEN PROMPTS, KV INT8, CTX 262144 UNLESS NOTED)

Decode tok/s

Q4_K_XL   layer-split [0,1,2]      ████████████████████████████████████████66.6
IQ3_XXS   layer-split [0,1]        ███████████████████████████████████████▊63.2
IQ3_XXS   layer-split [0,1,2]      ███████████████████████████████████████ 61.3
Q4_K_XL   layer-split [0,1,2] 512K ████████████████████████████████████▍   59.9
IQ3_S     layer-split [0,1,2]      ███████████████████████████████████▍    58.3
Q4_K_XL   layer-split [0,1]        ███████████████████████████████████▍    57.6
IQ3_S     layer-split [0,1]        █████████████████████████████████▍      56.1
IQ3_XXS   1 GPU                    ████████████████████████████            50.5
IQ3_S     1 GPU                    ███████████████████████████             48.6
Q4_K_XL   NVLink peer 512K         █████████████████████                   36.6
llama.cpp partial-offload 512K     █████████████████                       27.0
Q4_K_XL   1 GPU                    ███████████████                         25.7

Prefill tok/s (short prompts)

IQ3_XXS   layer-split [0,1,2]      ████████████████████████████████████████ 742
IQ3_S     layer-split [0,1,2]      ███████████████████████████████████████▍ 726
IQ3_XXS   layer-split [0,1]        ███████████████████████████████████████▊ 700
IQ3_S     layer-split [0,1]        ████████████████████████████████████▍    671
IQ3_XXS   1 GPU                    ████████████████████████████             525
Q4_K_XL   layer-split [0,1,2]      ███████████████████████▍                 448
IQ3_S     1 GPU                    ███████████████████████▎                 426
Q4_K_XL   layer-split [0,1,2] 512K ███████████████████████                  424
Q4_K_XL   layer-split [0,1]        ████████████████████                     377
Q4_K_XL   1 GPU / peer             ████████████                            ~232
llama.cpp partial-offload          ██████                                   102

One-shot prefill on a fresh 83K-token prompt (this is the fun one)

Q4_K_XL layer-split [0,1,2] 512K  ████████████████████████████████████████ 932.5 tok/s
Q4_K_XL NVLink peer         512K  █████████████████████▌                   490.2 tok/s

(83,306 fresh tokens, 0 cache reuse — the 3-stage split parallelizes the prompt path; decode at 83K context: 58.9 tok/s, expert-cache hit 97.4%, KV VRAM-hit 92.8%.)

Expert-cache hit rate (avg) + per-model footprint @ layer-split [0,1,2]

Q4_K_XL IQ3_S IQ3_XXS
cache hit 96.9% 99.9% 100.0%
slots (of 24576) 15,218 24,390 24,576
load time 134 s 52 s 64 s
engine RSS 81.6 GB 55.8 GB 48.7 GB
VRAM / card ~21.5 / 22.5 GB (96%) all three

Ablations (on Q4 split3 — what NOT to do)

variant prefill decode verdict
baseline 448 66.6 —
+ PLE table locked in RAM 447 66.8 neutral — costs 29 GB pinned + swap, rejected
+ full KV in VRAM (no streaming) 427 65.2 small loss (fewer expert slots), rejected

Observations

  1. Layer-split >> NVLink peer mode: same model, 2 cards: peer 36.4 → split 57.6 tok/s (+58%); 3rd card adds +16% even though it’s the x8 slot (split hand-off goes through pinned host memory — NVLink direct is still an open Strata issue #338).
  2. The 1-GPU ranking inverts on 3 GPUs: 1 card → IQ3_XXS 50.5 > IQ3_S 48.6 > Q4 25.7 (smaller blobs = higher cache hit). 3 cards → Q4 66.6 > XXS 61.3 > S 58.3 with all caches near-full — pointing at per-format GPU kernel paths (Strata ships dedicated Q4_K/Q5_K/Q5_1/Q8_0 expert kernels since 0.1.31) plus draft-acceptance variance, not at cache misses.
  3. 512K context costs ~5-10% vs 262K (rope linear ×2): prefill 424 vs 448 (-5.5%), decode 59.9 vs 66.6 (round-spread is ±6 tok/s on both — read as noise to ~5%); draft acceptance dipped 73%→63% at 512K (possible mild effect of the scaled rope on drafting, or just run variance).

ACCURACY

Perplexity — wikitext-2-raw test, measured here

Method: llama-perplexity (build 349), test split = 4,358 rows / ~294K tokens, 72 chunks × ctx 4096, q8_0 KV, flash-attn on, byte-identical GPU placement flags for all three models (same -ot expert pins as the speed tests). Lower = better.

excess mean-log-PPL vs best (paired over the same 72 chunks, lower = better):

UD-Q4_K_XL  4.1263 █                                  (best)
GSQ IQ3_S   4.1967 ███████   +0.0704  (+1.71%)
GSQ IQ3_XXS 4.2173 █████████ +0.0910  (+2.21%)
comparison mean-log diff paired SE t verdict
Q4 vs IQ3_S −0.0704 0.0158 −4.45 Q4 significantly better
Q4 vs IQ3_XXS −0.0910 0.0171 −5.33 Q4 significantly better
IQ3_S vs IQ3_XXS −0.0206 0.0196 −1.05 not significant (S nominally better)
  • A duplicate full Q4 run produced bit-identical results (deterministic harness), so differences above ~0.01 mean-log are real, not noise.
  • The paired test (same chunks for every model) is far more sensitive than the tool’s unpaired ±0.024.

Published task numbers (ISTA’s evaluation — not re-run here)

BF16 IQ3_S IQ3_XXS
Task avg (AIME25 / GPQA-D / LCB v6) 93.12 93.26 92.57 (99.4%)
AIME25 100.00 100.00 100.00
GPQA-Diamond 91.92 92.93 91.41
LiveCodeBench v6 87.43 86.86 86.29

unsloth’s own metrics for the UD ladder (token-level, different scale — do not cross-read with task scores): Q4_K_XL top-1 recovery 92.26%, KLD 0.0469 · Q5 93.68/0.0304 · Q6 94.09/0.0271.

Reading of it: on distribution fit (ppl) the 4-bit UD wins measurably; on published tasks the IQ3_S claims base parity. Both can be true — ppl and task accuracy measure different things, and we have no BF16 ppl baseline here (354 GB). For “which do I run”: Q4 = best decode + best ppl; IQ3_S = smallest file / fastest load / published task parity; IQ3_XXS = best prefill, cheapest bits.

LLAMA.CPP COMPARISON (SAME BOX, SAME MODEL FILE)

The 103.7 GiB model can’t fit 66 GB VRAM + 512K KV + 28.8 GB PLE, so llama.cpp runs the usual partial-offload layout:

--n-cpu-moe 48                       # 48 expert layers
--split-mode layer --tensor-split 1,1,1
-ot 'per_layer_token_embd=CPU,       # PLE/n-gram -> CPU
     blk.(8|9|1[0-4])...=CUDA0,      # 7 expert blocks -> GPU0
     blk.(2[0-7])...=CUDA1,          # 8 -> GPU1
     blk.(3[8-9]|4[0-3])...=CUDA2'   # 6 -> GPU2
     # = 21 blocks on GPU, 27 expert layers on 16 CPU threads
--ctx-size 512000 --cache-type-k q8_0 --cache-type-v q8_0
--flash-attn on --threads 16 + MTP draft sidecar

Measured: 102 prefill / 27.0 tok/s decode (draft acceptance ~79.6%).

This is not “llama.cpp is slow” — it’s a different trade: Strata’s layer-split runs the same stage decomposition, but each stage computes its hot experts from GPU memory (adaptive cache, 97–100% routed mass) instead of gathering 27 layers’ experts from the CPU pool every token. Same split, different expert story → 4.4× prefill, 2.5× decode. Caveat: our build doesn’t have qwen4exp’s re-enabled -sm tensor path (upstream #28569), so tensor-split wasn’t an option here.

CAVEATS

  1. Speed prompts are synthetic (~3K tokens) + one 12K deep probe, 3 runs each; some configs show ±5–10% round spread (draft-acceptance variance) — treat sub-5% differences as noise.
  2. Absolute ppl depends on the chunking mode; the valid claim is the cross-model ordering under identical settings.
  3. Task tables are ISTA’s published numbers, not our measurements.
  4. GPUs are power-capped at 167 W (efficiency-tuned); a 250 W run would likely shift sustained clocks a bit.
  5. PPL ≠ task accuracy — both numbers are above so you can weight them yourself.

Configs, per-run JSONs and ppl logs are on hand — happy to post any specific one.

reddit.com
u/BoxieBoo — 11 days ago
▲ 3 r/u_BoxieBoo+2 crossposts

Qwen3.8 27B vs Flash Next vs Qwen3.6

In the past few days, I have gained the following experiences:

Although the performance of the Qwen 3.8 27B model is not bad, but...

Let's start at the very beginning. In terms of raw computing performance, coding based on my local measurements and in practice, it seems that the Qwen3.6-27B-Q4_K++ models are almost on the same level as the Qwen3.8 27B model. The big difference is that the 3.8 thinks a lot. This is where its advantage comes into play. The tool calling is better, so it is more efficient overall. However, it is not necessarily smarter.

If I set the thinking value to med or min for the Qwen 3.8 27B instead of xhigh, it consistently underperforms in the tests compared to the Qwen 3.6 27B.

So Qwen 3.8 27B is only smarter if the reasoning level is xhigh, but then it is incredibly slow and generates a lot of tokens. And the worst thing is that even though the KV cache is Q8 quantized, it still requires a brutal amount of RAM/VRAM compared to Qwen 3.6.

And here comes the point that needs to be discussed.

Qwen 3.6 27B runs with 200k+ ctx on my 22 GB GPU in good quality.

Qwen 3.8 27B does not. This is not enough for it, there is a maximum of 100k ctx in the VRAM and the model is only Q4 quality, the KV cache Q8, because below it the model will be brutally stupid, a lobotomy. Obviously the best would be F16.

So I think that for planning and ideation, thinking, Qwen 3.8 27B is suitable, but for implementation 3.6 27B is perfect and MUCH faster. But...

This is where Qwen 3.8 Flash Next comes into play.

While on the 2080 Ti card (22GB Modded) on the i9-7980XE CPU with quad channel DDR4 (128GB) RAM:

the Qwen 3.8 27B model runs at Q4 quantum quality, ctx 100k, KV Q8 settings at approx. 35-45 t/s with MTP,

the Qwen 3.8 Flash Next (Qwen3.8-Flash-Next-GSQ-RCO-IQ3_XXS) with STRATA, ngram can easily fit on 1 GPU with 256k ctx (KV Q8) and 64 GB RAM is enough for it. The speed is currently 60-75 t/s and the strata is developing at full speed.

A fast SSD is probably also important for this, but I'm not sure, because I think the ngram table is in the RAM now. By the way, I only have Gen3 PCI-e ports, so I solved the SSD acceleration by connecting 2 average SSDs to nvme ports and creating an array with RAID0, and then their speed added up.

Experiences about the Qwen 3.8 FN:

It doesn't overthink things. It can think a lot, but not always, only when justified. It's precise, follows instructions, smart. I'll risk saying that based on my usage habits, it's smarter than the GLM 5.3 Flash.

Since its speed is also better and the VRAM requirement is less than the Qwen 3.8 27B, the question now is which model should I choose? I think the answer is clear.

Do you have similar experiences?

reddit.com
u/BoxieBoo — 13 days ago
▲ 3 r/u_BoxieBoo+1 crossposts

RTX 2080 Ti power-limit sweep: Qwen3.6-27B delivers 95% of maximum speed at 190 W, peak efficiency 167 W (67% of default)

I was curious to see how much power these cards actually need to run LLM, so I ran a power limit sweep on one of my 22GB modded 2080 Ti cards with llama.cpp.

The settings were:

Qwen3.6-27B UD-Q4_K_XL (16.7GB, MTP disabled), KV f16 with about 50k contexts to fill the VRAM.

Greedy decode with volt temp 0, 2-5 runs x 1000 output tokens per point.

Not only did I specify the power limits, I also measured the actual card consumption with NVML, sampling every 2 seconds during generation. This might be interesting because a MoE or any other architecture model will stress the card differently. I needed a dense model that would fill the VRAM and almost always load the GPU at close to 100%, because that's how I could measure it.

The step is from 250 W to 100 W in 15 W steps (the card's minimum is 100 W), then 1 W steps around the breakpoint.

The results:

The speed hardly changes up to 190 W.

250 W: 27.3 tokens/s, 190 W: 26.0 (only -4.5%).

The efficiency (token/watt, calculated from the measured consumption) peaks at 167 W, which is 67% of the 250 W default in consumption!

This value remains within 2% between 165-175 W.

I set the sweetspot to 80% speed, which is arbitrary. The electrical power consumption of this is 162 W = 65% of the default.

Below 130 W there is a gap: still 17.5 frames/s at 145 W, but only 13.1 frames/s at 130 W, and the 115/100 W points practically collapse to ~4.7 frames/s. Probably because of the minimum clock speed.

I think the temperature was good: 40-57 °C in the entire range.

Now I run both my cards at 170 W (68%), but obviously one of them will get hotter, but they don't heat each other up as much as if they were running at 250-250W.

For the 2-card Qwen3.6 setup with MTP this is still ~44 tokens/s, while burning about 30% less power per card than the stock setup.

Notes: one card, one model, one prompt (greedy, so runs are largely deterministic), NVML draw sampled every 2 seconds.

The 167 W peak sits on the border of two measurement sections: 166 W: 0.144, 167 W: 0.149 tokens/watt, so the 165-175 W range can be safely considered the sweet spot.

The percentage scale in the graph is normalized to the 250W default — since this is the same TU102 silicon as a regular 2080 Ti, in percentage terms, other chips with similar technology or similar generation will likely have very similar results in terms of percentages, even if the absolute case/s will obviously be different depending on the model and specific card.

u/BoxieBoo — 28 days ago
▲ 0 r/CUDA

56 t/s on a $450 dual RTX 3060 with Qwen3.6-27B Q4_K_S + MTP

I spent the day benchmarking Qwen3.6-27B-MTP-APEX on a modest 2× RTX 3060 12GB + i7-6700 system. Started at 16.7 t/s with a basic layer-split config and ended up at 56 t/s at 96k context — a 3.3× speedup from where I started, and the context window went from 32k to 96k in the process.

This post walks through every measurement, every wrong turn, and the final config that actually works. The single command at the bottom replaces my previous setup.

TL;DR

* Final production config: Qwen3.6-27B Q4\_K\_S + tensor split + MTP (`n_max=2, p_min=0.44`) → 56 t/s at 96k ctx, F16 KV cache, 3.3× faster than the basic layer-split setup * The killer flag: `--split-mode tensor --tensor-split 1,1` — without it, I was stuck at 17 t/s * The hidden trap: Short benchmark prompts inflate `mean_draft_len` and make high `n_max` look amazing. Real workloads cap out at \~3-4.

Hardware

CPU:  Intel Core i7-6700 @ 3.40 GHz (Skylake, 4C/8T, 14nm)
Mobo: ASUS Z170 PRO GAMING (Intel Z170, LGA 1151)
RAM:  64GB DDR4 — DIMM\_A1: Samsung 32GB @ 2720 MT/s
                  DIMM\_B1: Team Group 32GB @ 2720 MT/s
                  (mismatched sticks, both XMP'd to 2720 from 2400 stock)
GPU:  2× NVIDIA GeForce RTX 3060 Lite Hash Rate (GA106), 12GB VRAM each
      (Intel HD 530 used for monitor output)
PSU:  (whatever I had lying around — total system power \~350W under load)
OS:   Linux Mint 22.3 "Zena" (Ubuntu 24.04 base, Linux 6.x kernel,
     Cinnamon desktop, X11 session)
CUDA: 12.0 (nvidia-driver-535)
llama.cpp: self-built from source, version 10218 (commit de699957b)
         built with -DGGML\_CUDA=ON, NCCL disabled

This is a $400 dual-3060 setup I picked up second-hand. Not impressive on paper. Let's see what it can do.

The GPUs run in `tensor-split 1.05,0.95` mode because the first card has a slightly better silicon lottery result and can take 5% more of the tensor-parallel split. No NVLink — just PCIe 3.0 x8/x8.

The journey: 9 measurements, 9 surprises

Every measurement below used the same prompt set: short Shakespeare quote (`. * 1300` ≈ 16k chars ≈ 4000-4500 tokens), 256-token generation, warm cache unless noted. All on Qwen3.6-27B-MTP-GGUF.

*Stage 1: Q4\_K\_XL, layer split (basic config)*

Config: --split-mode layer --tensor-split 1.05,0.95 --cache-type-k q8\_0 --cache-type-v q8\_0 Result: 16.73 t/s

The default setup. Predictable. The Q4\_K\_XL model is 17 GB on disk, which combined with q8\_0 KV at 32k ctx uses \~24 GB VRAM — basically all of it.

*Stage 2: Try MTP (no tensor split)*

Config: + --spec-type draft-mtp --spec-draft-n-max 2 --spec-draft-p-min 0.44
Result: 26.96 t/s (+61%)

MTP helps on this dense model? Apparently. The 81.9% draft acceptance rate pays off because dense forward passes are cheap enough that the draft overhead doesn't exceed the savings. Interesting.

*Stage 3: Tensor split (the breakthrough)*

Config: --split-mode tensor --tensor-split 1,1 (no KV quant — F16 KV)
Result: 28.46 t/s (+70% over baseline)

Tensor split distributes every matmul across both GPUs simultaneously instead of running layers sequentially. Combined with F16 KV cache, this is 70% faster than layer split.

But wait — tensor split means I can't use quantized KV cache. Trade-off accepted because tensor split was worth more than the KV quant savings.

*Stage 4: Tensor split + MTP (the holy-cow moment)*

Config: tensor split + draft-mtp n\_max=2 + F16 KV Result: 39.13 t/s on 7349-token prompt, 55.97 t/s on 2341-token prompt draft acceptance 85%, mean draft len 3.00

This was the moment. 2.33× over baseline. MTP + tensor split, who would have thought.

*Stage 5: Switch to Q4\_K\_S, push context to 96k*

The Q4\_K\_XL at 32k ctx was using 17 GB model + 7 GB F16 KV ≈ 24 GB VRAM. OOM at 64k. But Q4\_K\_S is 16 GB instead of 17 — fits at 96k!

Config: Q4\_K\_S + tensor\_mtp at 96k ctx
Result: 56.4 t/s, draft acceptance 100%, mean draft len 3.00

Identical throughput to 32k, but 3× the context. The lower quant also makes the model more confident — acceptance goes from 85% to 100%.

*Stage 6: n\_max sweep (cold cache, short prompts)*

Hypothesis: if `mean_draft_len = 3.00` at `n_max = 2`, then `n_max = 4` or `5` or `6` should give `mean_draft_len = 5`, `6`, `7` — even faster.

n\_max tg t/s mean\_len eff\_tps ← tg × mean\_len
1 48.0 2.00 96
2 56.0 3.00 168
3 57.5 4.00 230
4 61.0 5.00 305
5 62.4 6.00 374
6 63.9 7.00 447
7 64.3 7.97 512

Whoa! `n_max = 7` looks like 512 effective tok/s (62× the predicted per-second, because every step generates \~8 tokens). With `n_max ≥ 3` the server crashes (cuBLAS bug in b10218), but a workaround saves it:

Code

GGML\_CUDA\_DISABLE\_GRAPHS=1 ./llama-server ...

This works on every n\_max from 3 to 7. Stable through 1024-token generations. The dream config.

*Stage 7: Production reality check*

Then I tested with diverse real-world prompts (not the same Shakespeare quote × 1300) and longer generations (512 and 1024 tokens instead of 256):

n\_max tg t/s mean\_len eff\_tps
3 41.6 3.19 133
4 36.7 3.40 125
5 34.0 3.66 125
6 32.4 3.79 123
7 32.0 4.10 130

**The dream is dead.** In production:

* `mean_draft_len` plateaus around 3.0-4.1 regardless of `n_max` * Higher `n_max` only adds recursive draft forward overhead, lowering tg t/s without meaningfully raising mean\_len * n\_max = 3 wins (highest tg at 41.6 t/s, needs workaround) * n\_max = 2 is even better if you remove the workaround (see Stage 8)

*Stage 8: n\_max = 2 without the workaround*

The cuBLAS crash only triggers at `n_max ≥ 3` (with this build). With `n_max = 2` you don't need the workaround, and the `GGML_CUDA_DISABLE_GRAPHS=1` cost (\~5-10%) goes away.

Code

n\_max = 2, no workaround, real workloads:
  tg = 56 t/s, mean\_len = 3.00, eff\_tps = 168

**Same 56 t/s and 168 effective tok/s as the cold-cache measurement. This is the real production number, and it's also the safest config.**

**The complete picture**

A 3.3× tg-t/s speedup over the simple layer-split baseline, with 3× the context window (96k vs 32k) and 100% draft acceptance.

The production command

This is what I actually run on my box:

\~/llama.cpp/build/bin/llama-server \\
  --model /mnt/Data/Models/unsloth/Qwen3.6-27B-MTP-GGUF/Qwen3.6-27B-Q4\_K\_S.gguf \\
  --jinja \\
  --split-mode tensor --tensor-split 1,1 \\
  --ctx-size 98304 \\
  -fa on \\
  --batch-size 1024 --ubatch-size 256 \\
  --threads 2 \\
  --n-gpu-layers 99 \\
  --parallel 1 \\
  --spec-type draft-mtp \\
  --spec-draft-n-max 2 \\
  --spec-draft-p-min 0.44 \\
  --host 0.0.0.0 --port 8081

**Bulletproof, no workarounds needed, 56 t/s, 96k context. This is the configuration I'd actually deploy.**

Lessons learned (what I'd tell past-me)

  1. Don't trust short-prompt benchmarks for n\_max sweeps. Repetitive test text makes the MTP head look overconfident. Always measure with diverse prompts and longer generations before locking in a config.
  2. Q4\_K\_S gives you more context headroom than Q4\_K\_XL on VRAM-tight boxes. On 24 GB total VRAM, the difference between 17 GB and 16 GB model files is the difference between 49k and 96k max context. Throughput is essentially identical.
  3. Tensor split is mandatory on dual GPU. Without it, I was stuck at 17 t/s. The forward pass simply doesn't parallelize well across PCIe for matmuls.
  4. The workaround `GGML_CUDA_DISABLE_GRAPHS=1` costs \~5% throughput but prevents the cuBLAS crash when MTP is enabled at `n_max ≥ 3`. Track the upstream issue at `ggml-org/llama.cpp#25061`.
  5. `p_min = 0.44` is the sweet spot. I tried 0.7, 0.85 — when acceptance is already 100%, raising p\_min doesn't help (and slightly hurts because the model rarely hits the gate).
  6. My own benchmark data was misleading me initially. 39 t/s on 7349-token prompts vs 56 t/s on 2341-token prompts — same model, same config. The difference was prefill cost, not throughput. The number that matters is `effective tokens/second = tg × mean_draft_len`, not raw `predicted_per_second`.

The configurations that didn't work (saving you the trouble)

For completeness, here's what I tried that did not help:

Flag Effect
`--fit on` Identical to manual `-ngl 99`
`--cache-type-k q4_0 --cache-type-v q4_0` Marginally slower than q8\_0
`--threads 3` or `--threads 4` Same as `--threads 2` (GPU-bound)
`--batch-size 2048 --ubatch-size 512` Same as 1024/256
`--parallel 2` Same effective throughput, wasted VRAM
`-fa off` Crashes — quantized V cache needs FA
`-sm row` Requires NVLink, which 3060s don't have
MTP without workaround at n\_max ≥ 3 cuBLAS crash
MTP at high n\_max in production No speedup — mean\_draft\_len plateaus

If anyone has ideas on how to push past 56 t/s on this box, I'm all ears. The mean\_draft\_len plateau is the obvious next thing to investigate — does anyone know if there's a way to make the MTP head more confident on diverse prompts? Or is this fundamentally a limit of single-model self-speculation?

*Hardware: 2× RTX 3060 12GB + i7-6700 + 64GB DDR4. Model: Qwen3.6-27B Q4\_K\_S with baked-in MTP head. llama.cpp b10218. All measurements on the 2× RTX 3060 box described above. YMMV on other hardware.*

reddit.com
u/BoxieBoo — 2 months ago
▲ 8 r/u_BoxieBoo+1 crossposts

56 t/s on a $450 dual RTX 3060 with Qwen3.6-27B Q4_K_S + MTP

I spent the day benchmarking Qwen3.6-27B-MTP-APEX on a modest 2× RTX 3060 12GB + i7-6700 system. Started at 16.7 t/s with a basic layer-split config and ended up at 56 t/s at 96k context — a 3.3× speedup from where I started, and the context window went from 32k to 96k in the process.

This post walks through every measurement, every wrong turn, and the final config that actually works. The single command at the bottom replaces my previous setup.

TL;DR

  • Final production config: Qwen3.6-27B Q4_K_S + tensor split + MTP (n_max=2, p_min=0.44) → 56 t/s at 96k ctx, F16 KV cache, 3.3× faster than the basic layer-split setup
  • The killer flag: --split-mode tensor --tensor-split 1,1 — without it, I was stuck at 17 t/s
  • The hidden trap: Short benchmark prompts inflate mean_draft_len and make high n_max look amazing. Real workloads cap out at ~3-4.

Hardware

CPU:  Intel Core i7-6700 @ 3.40 GHz (Skylake, 4C/8T, 14nm)
Mobo: ASUS Z170 PRO GAMING (Intel Z170, LGA 1151)
RAM:  64GB DDR4 — DIMM_A1: Samsung 32GB @ 2720 MT/s
                  DIMM_B1: Team Group 32GB @ 2720 MT/s
                  (mismatched sticks, both XMP'd to 2720 from 2400 stock)
GPU:  2× NVIDIA GeForce RTX 3060 Lite Hash Rate (GA106), 12GB VRAM each
      (Intel HD 530 used for monitor output)
PSU:  (whatever I had lying around — total system power ~350W under load)
OS:   Linux Mint 22.3 "Zena" (Ubuntu 24.04 base, Linux 6.x kernel,
     Cinnamon desktop, X11 session)
CUDA: 12.0 (nvidia-driver-535)
llama.cpp: self-built from source, version 10218 (commit de699957b)
         built with -DGGML_CUDA=ON, NCCL disabled

This is a $400 dual-3060 setup I picked up second-hand. Not impressive on paper. Let's see what it can do.

The GPUs run in tensor-split 1.05,0.95 mode because the first card has a slightly better silicon lottery result and can take 5% more of the tensor-parallel split. No NVLink — just PCIe 3.0 x8/x8.

The journey: 9 measurements, 9 surprises

Every measurement below used the same prompt set: short Shakespeare quote (. * 1300 ≈ 16k chars ≈ 4000-4500 tokens), 256-token generation, warm cache unless noted. All on Qwen3.6-27B-MTP-GGUF.

Stage 1: Q4_K_XL, layer split (basic config)

Config: --split-mode layer --tensor-split 1.05,0.95 --cache-type-k q8_0 --cache-type-v q8_0 Result: 16.73 t/s

The default setup. Predictable. The Q4_K_XL model is 17 GB on disk, which combined with q8_0 KV at 32k ctx uses ~24 GB VRAM — basically all of it.

Stage 2: Try MTP (no tensor split)

Config: + --spec-type draft-mtp --spec-draft-n-max 2 --spec-draft-p-min 0.44
Result: 26.96 t/s (+61%)

MTP helps on this dense model? Apparently. The 81.9% draft acceptance rate pays off because dense forward passes are cheap enough that the draft overhead doesn't exceed the savings. Interesting.

Stage 3: Tensor split (the breakthrough)

Config: --split-mode tensor --tensor-split 1,1 (no KV quant — F16 KV)
Result: 28.46 t/s (+70% over baseline)

Tensor split distributes every matmul across both GPUs simultaneously instead of running layers sequentially. Combined with F16 KV cache, this is 70% faster than layer split.

But wait — tensor split means I can't use quantized KV cache. Trade-off accepted because tensor split was worth more than the KV quant savings.

Stage 4: Tensor split + MTP (the holy-cow moment)

Config: tensor split + draft-mtp n_max=2 + F16 KV Result: 39.13 t/s on 7349-token prompt, 55.97 t/s on 2341-token prompt draft acceptance 85%, mean draft len 3.00

This was the moment. 2.33× over baseline. MTP + tensor split, who would have thought.

Stage 5: Switch to Q4_K_S, push context to 96k

The Q4_K_XL at 32k ctx was using 17 GB model + 7 GB F16 KV ≈ 24 GB VRAM. OOM at 64k. But Q4_K_S is 16 GB instead of 17 — fits at 96k!

Config: Q4_K_S + tensor_mtp at 96k ctx
Result: 56.4 t/s, draft acceptance 100%, mean draft len 3.00

Identical throughput to 32k, but 3× the context. The lower quant also makes the model more confident — acceptance goes from 85% to 100%.

Stage 6: n_max sweep (cold cache, short prompts)

Hypothesis: if mean_draft_len = 3.00 at n_max = 2, then n_max = 4 or 5 or 6 should give mean_draft_len = 5, 6, 7 — even faster.

n_max tg t/s mean_len eff_tps ← tg × mean_len
1 48.0 2.00 96
2 56.0 3.00 168
3 57.5 4.00 230
4 61.0 5.00 305
5 62.4 6.00 374
6 63.9 7.00 447
7 64.3 7.97 512

Whoa! n_max = 7 looks like 512 effective tok/s (62× the predicted per-second, because every step generates ~8 tokens). With n_max ≥ 3 the server crashes (cuBLAS bug in b10218), but a workaround saves it:

Code

GGML_CUDA_DISABLE_GRAPHS=1 ./llama-server ...

This works on every n_max from 3 to 7. Stable through 1024-token generations. The dream config.

Stage 7: Production reality check

Then I tested with diverse real-world prompts (not the same Shakespeare quote × 1300) and longer generations (512 and 1024 tokens instead of 256):

n_max tg t/s mean_len eff_tps
3 41.6 3.19 133
4 36.7 3.40 125
5 34.0 3.66 125
6 32.4 3.79 123
7 32.0 4.10 130

The dream is dead. In production:

  • mean_draft_len plateaus around 3.0-4.1 regardless of n_max
  • Higher n_max only adds recursive draft forward overhead, lowering tg t/s without meaningfully raising mean_len
  • n_max = 3 wins (highest tg at 41.6 t/s, needs workaround)
  • n_max = 2 is even better if you remove the workaround (see Stage 8)

Stage 8: n_max = 2 without the workaround

The cuBLAS crash only triggers at n_max ≥ 3 (with this build). With n_max = 2 you don't need the workaround, and the GGML_CUDA_DISABLE_GRAPHS=1 cost (~5-10%) goes away.

Code

n_max = 2, no workaround, real workloads:
  tg = 56 t/s, mean_len = 3.00, eff_tps = 168

Same 56 t/s and 168 effective tok/s as the cold-cache measurement. This is the real production number, and it's also the safest config.

The complete picture

A 3.3× tg-t/s speedup over the simple layer-split baseline, with 3× the context window (96k vs 32k) and 100% draft acceptance.

The production command

This is what I actually run on my box:

~/llama.cpp/build/bin/llama-server \
  --model /mnt/Data/Models/unsloth/Qwen3.6-27B-MTP-GGUF/Qwen3.6-27B-Q4_K_S.gguf \
  --jinja \
  --split-mode tensor --tensor-split 1,1 \
  --ctx-size 98304 \
  -fa on \
  --batch-size 1024 --ubatch-size 256 \
  --threads 2 \
  --n-gpu-layers 99 \
  --parallel 1 \
  --spec-type draft-mtp \
  --spec-draft-n-max 2 \
  --spec-draft-p-min 0.44 \
  --host 0.0.0.0 --port 8081

Bulletproof, no workarounds needed, 56 t/s, 96k context. This is the configuration I'd actually deploy.

Lessons learned (what I'd tell past-me)

  1. Don't trust short-prompt benchmarks for n_max sweeps. Repetitive test text makes the MTP head look overconfident. Always measure with diverse prompts and longer generations before locking in a config.
  2. Q4_K_S gives you more context headroom than Q4_K_XL on VRAM-tight boxes. On 24 GB total VRAM, the difference between 17 GB and 16 GB model files is the difference between 49k and 96k max context. Throughput is essentially identical.
  3. Tensor split is mandatory on dual GPU. Without it, I was stuck at 17 t/s. The forward pass simply doesn't parallelize well across PCIe for matmuls.
  4. The workaround GGML_CUDA_DISABLE_GRAPHS=1 costs ~5% throughput but prevents the cuBLAS crash when MTP is enabled at n_max ≥ 3. Track the upstream issue at ggml-org/llama.cpp#25061.
  5. p_min = 0.44 is the sweet spot. I tried 0.7, 0.85 — when acceptance is already 100%, raising p_min doesn't help (and slightly hurts because the model rarely hits the gate).
  6. My own benchmark data was misleading me initially. 39 t/s on 7349-token prompts vs 56 t/s on 2341-token prompts — same model, same config. The difference was prefill cost, not throughput. The number that matters is effective tokens/second = tg × mean_draft_len, not raw predicted_per_second.

The configurations that didn't work (saving you the trouble)

For completeness, here's what I tried that did not help:

Flag Effect
--fit on Identical to manual -ngl 99
--cache-type-k q4_0 --cache-type-v q4_0 Marginally slower than q8_0
--threads 3 or --threads 4 Same as --threads 2 (GPU-bound)
--batch-size 2048 --ubatch-size 512 Same as 1024/256
--parallel 2 Same effective throughput, wasted VRAM
-fa off Crashes — quantized V cache needs FA
-sm row Requires NVLink, which 3060s don't have
MTP without workaround at n_max ≥ 3 cuBLAS crash
MTP at high n_max in production No speedup — mean_draft_len plateaus

If anyone has ideas on how to push past 56 t/s on this box, I'm all ears. The mean_draft_len plateau is the obvious next thing to investigate — does anyone know if there's a way to make the MTP head more confident on diverse prompts? Or is this fundamentally a limit of single-model self-speculation?

Hardware: 2× RTX 3060 12GB + i7-6700 + 64GB DDR4. Model: Qwen3.6-27B Q4_K_S with baked-in MTP head. llama.cpp b10218. All measurements on the 2× RTX 3060 box described above. YMMV on other hardware.

reddit.com
u/BoxieBoo — 2 months ago
▲ 4 r/LocalAIServers+1 crossposts

Running Ornith-1.0-35B-MTP-APEX on 2x RTX 3060 12GB — getting ~33 t/s, should I boost it?

System Specs:

CPU: Intel Core i7-6700 @ 3.40 GHz (4 cores, Skylake 14nm)

Motherboard: ASUS Z170 PRO GAMING (Intel Z170, LGA 1151)

RAM: 64 GB DDR4

  • DIMM_A1: Samsung 32GB @ 2720 MT/s (M471A4G43AB1-CWE)
  • DIMM_B1: Team Group 32GB @ 2720 MT/s (TEAMGROUP-SD4-3200)
  • DIMM_A2/B2: Empty
  • Note: Mismatched sticks (Samsung + Team Group). 2720 MT/s is overclocked via XMP (official Z170 DDR4 limit is 2133, XMP typically 2400-2666, 2720 is OC'd).

GPU:

  • GPU 0: NVIDIA GeForce RTX 3060 Lite Hash Rate (GA106) — 12GB VRAM
  • GPU 1: NVIDIA GeForce RTX 3060 Lite Hash Rate (GA106) — 12GB VRAM
  • Intel HD Graphics 530 (integrated, used for monitor output)

The Setup:

I've been experimenting with MoE models, specifically trying to offload certain parts to CPU/SystemRAM to see if it helps. Currently testing the SC117/Ornith-1.0-35B-MTP-APEX-I-Balanced.gguf model.

It's looking pretty good — I'm getting a comfortable ~33-35 t/s generation speed. But here's the thing: when I enable MTP (Mixture of Tokens Parallelism), speed drops to max ~28 t/s. The MTP heads consume additional memory, so when I load them, more of the model falls back to SystemRAM.

Right now I'm running without MTP. Theoretically, the APEX quantization is the best quality I can get from this model, and the speed is already usable. So I've reached a point where I'm wondering:

What would you optimize here, if anything? Or is this about the maximum I can squeeze out of this model on this hardware?

Current llama-server command:

Code· bash

~/llama.cpp/build/bin/llama-server \
  --model /mnt/Data/Models/SC117/Ornith-1.0-35B-MTP-APEX-GGUF/Ornith-1.0-35B-MTP-APEX-I-Balanced.gguf \
  --jinja \
  --n-gpu-layers 40 \
  --split-mode layer \
  --tensor-split 1.05,0.95 \
  --n-cpu-moe 5 \
  --ctx-size 131072 \
  --cache-type-k q8_0 \
  --cache-type-v q8_0 \
  --no-mmap \
  -fa on \
  --batch-size 1024 \
  --ubatch-size 256 \
  --threads 2 \
  --host 0.0.0.0 \
  --port 8081 \
  --temp 0.8

Results from the log:

  • Prompt processing: ~303 t/s (extremely fast)
  • Generation: ~33.3 t/s stable
  • GPU memory: 11709MiB + 11711MiB = ~23GB used (out of 24GB total)

Warnings from the log:

  • failed to fit params to free device memory: n_gpu_layers already set by user to 40, abort
  • model has unused tensor blk.40.* (several tensors in layer 40 marked as unused)
  • fused Gated Delta Net (chunked) not supported, set to disabled

TL;DR: 33 t/s without MTP, 28 t/s with MTP. The APEX quant seems optimal for quality. Should I bother with MTP or is this the ceiling for this model on dual 3060s?

Edit: Fixed the --n-gpu-layers 40 warning — it's expected since I'm explicitly setting it. The blk.40 unused tensors are likely because layer 40 (0-indexed) spills to CPU and some of its tensors aren't needed for this architecture.

reddit.com
u/BoxieBoo — 2 months ago
▲ 68 r/u_BoxieBoo+2 crossposts

Linux Mint still works on 10+ year old hardware. My bank says I need a new phone. Here's the contradiction.

A reflection on why apps (especially banking apps) refuse to run on hardware you actually own — and why this amounts to a quiet dismantling of your digital self-determination. I'd like people to understand what's happening beyond the screen.

^(These examples are mostly Hungarian, but the pattern is global. Please share examples from your own country in the comments — let's build a map of how this plays out worldwide.)

Introduction

Digital freedom is disappearing slowly, quietly — and most people don't even notice.

In recent years, more and more banking apps have decided they will simply not run on phones where the user has made their own choices about the software. If the bootloader is unlocked, if the device is rooted, if you're running an AOSP-based Android, or a Linux-based mobile OS (Ubuntu Touch, Mobian, /e/OS, GrapheneOS), the app just refuses to launch.

At first glance, this looks like a security measure. In reality, it's about a great deal more.

I. The phone is yours. Or is it?

You bought the phone. The hardware is yours. In principle, you should be the one deciding what operating system or software runs on it.

And yet we've reached a point where certain essential services — banking being the obvious example — are only conveniently accessible if the user runs exactly the software environment a handful of large corporations deem acceptable.

Banking apps today do far more than banking. They start by thoroughly inspecting your device:

  • they check the bootloader state,
  • they check system integrity,
  • they check for root privileges,
  • they pull the manufacturer, firmware, and hardware fingerprint (biometrics live in a different story),
  • and they ask Google whether the device carries Google's certification.

Google gives all of this away for free through the Play Integrity API (formerly SafetyNet) — so for developers, "all" they have to do is integrate it. A few lines of code, and suddenly the app decides what you're allowed to run on your own hardware.

This has a cost

  • it burns CPU time on your phone,
  • it consumes energy — increasingly expensive these days,
  • it eats storage — itself becoming a privilege,
  • and it locks up development capacity inside the bank.

But the biggest cost isn't any of that. It's that the user loses the freedom to choose.

If a banking app only works on certain systems, the user eventually has no choice but to use those. This indirectly determines:

  • which phone is worth buying,
  • which operating system you may use,
  • and when you have to replace a device that otherwise works perfectly.

So it's no longer the user who decides. It's the provider.

II. The monoculture trap

This has serious long-term consequences.

Developers go where the users are. If every important app only works properly on two or three platforms, developing for alternative systems becomes harder and harder. Fewer users, fewer developers, fewer apps — a self-reinforcing cycle kicks in.

In parallel, technological diversity shrinks — and from an information-security standpoint, that is not a good thing.

When almost everyone runs the same platform, a single critical vulnerability or serious security flaw can affect a huge number of users at the same time. Diversity isn't just healthy competition — it is, in a real sense, a more resilient ecosystem.

Just remember: Log4Shell, Heartbleed, and the Pegasus spyware were all especially dangerous because the affected software was everywhere. Diversity is the simplest and cheapest "immune system" we have.

III. GrapheneOS — the rebuttal the banks find most inconvenient

It is worth pointing out that not every alternative system is less secure. There are Android variants — the best known being GrapheneOS — that many security professionals consider genuinely high-security. GrapheneOS is:

  • open source, fully auditable,
  • considered a benchmark in the security research community,
  • effectively resistant to everything a typical Android device can be tricked into running.

The independent security portal privsec dot dev maintains a tracker of how banking apps behave on GrapheneOS. The result: many of those apps don't block GrapheneOS because it's less secure — they block it because it lacks Google's certification. In other words, the decision is not a security decision, it's a platform-political one.

This is a good illustration that the current practice is not really about actual security risk — it's about a trust model that protects platforms, not users. The bank trusts Google, not the user. The bank hands the decision to Google, not to its own engineers.

IV. Personal data: the invisible tax

Then there's the data problem.

The big platforms no longer just know what you buy. They also know:

  • when you wake up (the first screen-unlock of the day),
  • where you move (GPS, cell-tower info, Wi-Fi),
  • when you work (app-usage patterns),
  • who you talk to, how often, in what mode,
  • how your habits shift from month to month, year to year.

From this data, extremely accurate behavioural models can be built. Not rough statistics — individual-level predictions.

This data wealth is used for advertising and business decisions (e.g. telling a corner shop, based on foot-traffic patterns, how many staff and what opening hours are worth running), but also for:

  • political campaign targeting — crowd reactions can now be modelled at the individual level,
  • law-enforcement profiling — transactional and location data can be assembled into patterns of daily life.

Your digital footprint is your new real estate — except you don't own it, and you don't get the rent.

V. The squeeze on cash: the last link in the chain

On top of all this comes the gradual displacement of cash.

A growing number of large transactions can only be settled by bank transfer:

  • In 2026, for agricultural land sales, full abolition of cash payment had been planned — only wire transfer or escrow with a lawyer would have been allowed. Under public pressure, the original plan was softened: in some narrow cases, cash is still technically usable, but under severely restricted conditions that turn it into a fiction of free choice.
  • For real-estate purchases, mandatory bank transfer is also becoming the norm; in many cases the seller's side will no longer accept cash at all.

If you want to do this quickly, mobile banking becomes essentially unavoidable. And if you want to use mobile banking, the bank often tells you which operating system your phone must run. If you refuse, the only option is a branch visit. During office hours. With a queue. And a day of your life gone.

Budapest parking — 1 July 2026

The Budapest General Assembly decided on a phased removal of parking meters. In the summer of 2026, more than three thousand machines were taken off the streets, while fees were simultaneously raised by 30–50%. Cash and card payment at the meter are gone — parking can only be paid for by mobile phone: app, SMS, or voice call.

Notice the pattern:

  1. First came the "convenient" app.
  2. Then the provider made the app effectively mandatory.
  3. The previous option (meter, cash) was scrapped.
  4. The price was raised, because now you "have to" use it anyway.

The enforcement officer offers no way to comply lawfully — there is no ticket to buy from them. They only fine. But if you have cash, time, and no smartphone, there is nowhere to buy from. It forces everyone — the old, the young, the poor, the rich alike — to own a smartphone, have a bank card on file, and actually use it. This is the modern form of digital exclusion. The citizen is expected to know which zone they are in, the phone number, the exact wording of the SMS, and how to operate the device. The margin for error is zero — otherwise the fine arrives.

VI. Why is this the bank's preferred solution?

Banks obviously have legitimate security concerns. Nobody wants their account broken into, or strangers accessing their money.

But the real question is: is this really the only possible path?

The current practice essentially says: "If your phone does not run exactly the software environment we accept, you simply cannot use our service conveniently."

That is undeniably the easier path for the bank.

Banks have significant financial, development, and IT resources. In principle, they could:

  • harden the application itself (internal code review, anti-reverse-engineering),
  • strengthen server-side checks (anomaly detection, behaviour-based fraud analysis),
  • protect communication (end-to-end encryption, hardware-backed key storage),
  • improve authentication (FIDO2, hardware security keys, biometric signing),
  • or even work together with communities and developers to securely support more operating systems.

Instead, in many cases, it seems simpler to exclude everyone who doesn't match the platforms they accept.

This has a cost. The bank doesn't pay it. The user does.

The user who, years after buying the device, would otherwise still be perfectly happy with their phone. The user who consciously chose an open-source operating system. The user who wants to decide for themselves what software to run on a device they actually own.

Naturally, this is the most profitable path — the one that costs the bank the least. As for what it costs millions of users — not to mention the global pollution — it seems nobody is really interested. Only the current business goal matters.

VII. Planned obsolescence

Many apps today require a specific minimum Android version. A five-, six-, or more-year-old phone that otherwise works perfectly can easily lose its usefulness — not because the hardware failed, but because a provider has decided to stop supporting it.

This isn't just a financial issue. It's an environmental one.

Every phone replaced before its time means:

  • more electronic waste,
  • more raw-material extraction (cobalt, lithium, rare earths),
  • more energy used in manufacturing and shipping,
  • and the carbon footprint baked into the device loses its meaning the moment it's thrown away early.

While many companies loudly communicate sustainability and "green" operations, they say much less about the fact that their own software support decisions have a major impact on how long an electronic device can actually be used.

Sustainability is not just about office recycling bins or reducing paper use. It's also about not forcing millions of people to replace perfectly functional devices purely because of software decisions.

The contrast: Linux Mint on a 3rd-generation Intel CPU

Think about it: on a 10+ year-old computer with a 3rd-generation Intel processor, a modern Linux distribution like Linux Mint 22 still runs without trouble. Browsing, programming, document editing, watching video — and even more demanding development or graphics work can be done with the right software. The same hardware is officially unsupported by Windows 11.

So the question isn't whether it's technically impossible to run a modern OS on that machine — other systems prove that it isn't. The question is which direction the software industry is steering users.

The same pattern shows up in professional software: there are well-optimized browser-based 3D design and modelling tools that still run on decade-old hardware, while comparable "protected" and heavily marketed expensive software requires a brand-new workstation bought at astronomical prices. Same logic, same pattern, same business model.

VIII. Meta, Instagram, Messenger — and what's coming next

I haven't gone into detail on the serious data-collection and behavioural-analysis risks yet. But Meta (Facebook, Instagram, Messenger, WhatsApp), Google, TikTok, and the other major platforms are turning exactly this danger into a daily reality — not in theory, but in everyday life.

Chat Control — tomorrow's problem, already here today

On top of all this comes a new layer: the EU's so-called "Chat Control" proposal.

The official goal is to combat online sexual abuse of children. The actual content of the draft, however, would mean:

  • client-side scanning — your message would be run through an algorithm on your own device, before encryption, and compared against a central database,
  • messaging providers (Signal, WhatsApp, Telegram, Messenger) would be obliged to roll this out for all users,
  • all this while end-to-end encryption is kept in place — the proposal's logic being that encryption "is not broken," when in practice the opposite is true.

If your own device is the one scanning your own messages, that is the end of private communication. Not because "encryption is broken," but because encryption no longer protects you: the content is read by a third party's algorithm before it is sent. It's the same logic as a bank telling you which software you can run on your device: the provider checks, through your own device, without your consent, in the name of your own good.

The proposal triggered serious debate in 2024 and 2025, and returned to the agenda in 2026. The details keep shifting, but the direction is clear: private communication is being gradually turned into supervised communication.

IX. What can you do?

  1. Deliberately rate down these apps in the App Store and Google Play. It doesn't matter whether you personally use them. The rating is immediately visible on the top charts, and it creates pressure.
  2. Publicly boycott providers that only work on Google-certified, locked-bootloader, "managed" environments. Your money is your vote in a system that otherwise ignores you.
  3. Formally raise the issue with your bank and provider: "Open up your service to AOSP, rooted devices, Ubuntu Touch, a proper web interface, hardware security keys, FIDO2…" They may say no. But the request will be on the record.
  4. Hold decision-makers accountable at the political level: when a municipality or a state abolishes cash payment without offering an alternative, that is a form of digital exclusion that hits the elderly, the poor, the digitally restricted, and the privacy-conscious alike. That is not neutrality — that is serious discrimination.
  5. Speak about it publicly. Share, comment, debate, write. Digital exclusion happens in silence — and silence is its main weapon.

X. Closing

Windows is a story of its own — as is the world of closed-source software. Age-verification mandates and similar absurdities are arriving there as well. iOS, Android, their ongoing "wonders," online age checks, the closure of social platforms, the narrowing of options and the increasingly heavy-handed steering of free choice, the masses shaped by media narratives — those are topics for another post that never quite gets written.

For now, we are here: the boycott of banking apps, the deliberate low ratings, public protest. That is the only way to bring the giants to their senses. Let the market dance to our song, not the other way around.

There are solutions that would simply warn the user of the risks, and then leave the decision in their hands. Just as we can decide which operating system to install on a computer, we should have the right to decide which software to use on a phone we actually own.

Technically, security does not have to mean the abolition of freedom — and, with it, the discrimination of ordinary people.

reddit.com
u/BoxieBoo — 2 months ago
▲ 0 r/u_BoxieBoo+1 crossposts

Amikor a „kényelem" a saját börtönünkké válik

Egy szösszenet arról, hogy a különböző (pl. banki appok) miért nem hajlandóak futni a saját tulajdonú készülékeden, és ez miért jelenti a digitális önrendelkezésed totális felszámolását. Szeretném ha az emberek megértenék, hogy mi történik a kijelzőn túl. 

Bevezető

A digitális szabadság lassan, észrevétlenül tűnik el — és sokaknak ez fel sem tűnik.

Az elmúlt években egyre több banki alkalmazás dönt úgy, hogy nem hajlandó működni olyan telefonokon, amelyeken a felhasználó saját maga döntött a szoftveréről. Ha nyitott a bootloader, ha rootolt a készülék, ha AOSP alapú Android fut rajta, vagy éppen Linux alapú mobil operációs rendszer (például Ubuntu Touch, Mobian, /e/OS, GrapheneOS), akkor az alkalmazás egyszerűen megtagadja az indulást.

Első ránézésre ez biztonsági intézkedésnek tűnik. De valójában ennél sokkal többről van szó.

I. A telefon a tiéd. Vagy mégsem?

A telefont megvásároltad. A hardver a tiéd. Elvileg neked kellene eldöntened, milyen operációs rendszert  vagy szoftvereket szeretnél használni rajta.

Mégis odáig jutottunk, hogy bizonyos alapvető szolgáltatások — például a bankolás — már csak akkor érhetők el kényelmesen, ha a felhasználó pontosan azt a szoftverkörnyezetet használja, amelyet néhány nagyvállalat elfogadhatónak tart.

A banki alkalmazások ma már nemcsak bankolnak. Elsőként részletesen megvizsgálják a készülékedet:

  • ellenőrzik a bootloader állapotát
  • ellenőrzik a rendszer integritását
  • ellenőrzik a root jogosultság meglétét
  • lekérik a gyártót, a firmware-t, a hardveres ujjlenyomatot (a biometrikus egy másik kávéház)
  • és megkérdezik a Google-t, hogy a készülék tanúsítvánnyal ellátott-e

Mindehhez a Google ingyen adja a Play Integrity API-t (korábban SafetyNet) — így a fejlesztőknek „csak" be kell építeniük az alkalmazásba. Néhány sor kód, és máris az alkalmazás dönti el, hogy mit futtathatsz a saját hardvereden.

Ennek ára van

  • CPU-időt használ a telefonodon
  • Energiát fogyaszt - ami ma egyre drágább
  • Tárhelyet foglal - ami szintén egyre inkább kiváltság lesz
  • Fejlesztési kapacitást köt le

De a legnagyobb ára mégsem ez. Hanem az, hogy a felhasználó elveszíti a választás szabadságát.

Ha a például egy banki alkalmazás csak bizonyos rendszereken hajlandó működni, a felhasználó előbb-utóbb kénytelen lesz azokat használni. Ez közvetve meghatározza:

  • milyen telefont érdemes vásárolnia,
  • milyen operációs rendszert használhat,
  • és mikor kell lecserélnie egy egyébként tökéletesen működő készüléket.

Így nem a felhasználó dönt. Hanem a szolgáltató.

II. A monokultúra csapdája

Ennek hosszabb távon komoly következményei vannak.

A fejlesztők is oda mennek, ahol a legtöbb felhasználó van. Ha minden fontos alkalmazás kizárólag két-három platformon működik megfelelően, akkor az alternatív rendszerek fejlesztése egyre nehezebb lesz. Kevesebb felhasználó, kevesebb fejlesztő, kevesebb alkalmazás — egy önmagát erősítő folyamat indul el.

Ezzel párhuzamosan csökken a technológiai sokszínűség — és ez informatikai szempontból sem feltétlenül előnyös.

Ha szinte mindenki ugyanazt a platformot használja, akkor egy kritikus sérülékenység vagy egy súlyos biztonsági hiba potenciálisan egyszerre nagyon sok felhasználót érinthet. A sokféle rendszer nemcsak egy egészséges versenyhelyzetet jelent, hanem bizonyos értelemben ellenállóbb ökoszisztémát is.

Emlékezzünk csak: a Log4Shell, a Heartbleed, a Pegasus kémszoftver mind azért volt különösen veszélyes, mert az érintett szoftver szinte mindenhol ott volt. A sokszínűség a legegyszerűbb és legolcsóbb „immunrendszer".

III. GrapheneOS — a cáfolat, ami a legkevésbé zavarja a bankokat

Érdemes megemlíteni, hogy nem minden alternatív rendszer kevésbé biztonságos. Vannak olyan Android-változatok — a legismertebb a GrapheneOS —, amelyeket számos biztonsági szakember kifejezetten magas biztonsági szintűnek tart. A GrapheneOS:

  • nyílt forráskódú, teljesen auditható,
  • a biztonsági kutatók körében referencia-értékű,
  • gyakorlatilag minden, amit egyáltalán ésszel fel lehet törni egy átlagos androidos eszközön, GrapheneOS-on nem működik.

A privsec.dev független biztonsági portál számon tartja, mely banki appok hogyan viselkednek GrapheneOS-en. Az eredmény: a banki appok egy része nem azért blokkolja a GrapheneOS-t, mert az kevésbé biztonságos, hanem azért, mert nincs Google tanúsítvány. Magyarul: a döntés nem biztonsági, hanem platformpolitikai.

Ez jól szemlélteti, hogy a jelenlegi gyakorlat nem kizárólag a tényleges biztonsági kockázatokról szól, hanem a platformokra vonatkozó bizalmi modellről is. A bank a Google-nek hisz, nem a felhasználónak. A bank a Google-nek adja át a döntést, nem pedig a saját mérnökeinek.

IV. Személyes adatok: a láthatatlan adó

A másik probléma az adatok kérdése.

Ma már nemcsak azt tudják a nagy platformok, hogy mit vásárolunk. Hanem azt is:

  • mikor kelünk fel (a telefon elsô képernyő-feloldása),
  • merre közlekedünk (GPS, hálózati cellainformáció, Wi-Fi),
  • mikor dolgozunk (app-használati minták),
  • kikkel kommunikálunk, milyen gyakorisággal, milyen üzemmódban,
  • hogyan változnak a szokásaink hónapról hónapra, évről évre.

Ezekből az adatokból rendkívül pontos viselkedési modellek készíthetők. Nem elnagyolt statisztikák — hanem egyéni szintű előrejelzések.

Ezeket az adatvagyonokat használják hirdetésekhez, üzleti döntésekhez (pl. egy adott utca forgalma alapján megmondják egy kisboltnak, hány alkalmazottal és milyen nyitvatartással éri meg működnie), de ugyanígy:

  • politikai kampányok célzásához — a tömegek reakciója személyre szabhatóan modellezhető,
  • hatósági profilalkotáshoz — a tranzakciós és helyadatokból életviteli minták rajzolhatók ki.

A digitális lábnyomod az új ingatlanod — csak nem rendelkezel felette, és az árát sem te kapod.

V. A készpénz kiszorítása: az utolsó láncszem

Ehhez társul a készpénz fokozatos háttérbe szorítása.

Ma már számos nagyobb tranzakció kizárólag banki átutalással intézhető:

  • 2026-tól a termőföld-adásvételeknél tervezték, hogy teljesen megszüntetik a készpénzes fizetést — kizárólag átutalás vagy ügyvédi letét jöhetett volna szóba. A társadalmi ellenállás hatására azonban az eredeti elképzelést nem hajtották végre, hagytak egy látszólag szabad döntési lehetőséget: súlyosan korlátozott feltételekkel még van olyan eset amikor használhatod a készpénzt.
  • Az ingatlanvásárlásoknál is egyre elterjedtebb a kötelező átutalás, sok esetben az eladói oldal már el sem fogad készpénzt.

Ha ezt gyorsan szeretnéd elvégezni, szinte elengedhetetlenné válik a mobilbank. Ha pedig mobilbankot akarsz használni, gyakran már azt is megmondják, milyen operációs rendszer lehet a telefonodon. Ha ezt nem fogadod el, marad a bankfiók. Munkaidőben. Sorszámmal. És az életedből ráment egy nap.

Budapest parkolás — 2026. július 1.

A Fővárosi Közgyűlés döntött a parkolóautomaták fokozatos kivezetéséről. 2026 nyarán több mint háromezer automatát szereltek le, a díjak egyidejűleg 30–50%-kal emelkedtek. A készpénzes és bankkártyás fizetés megszűnt — kizárólag mobiltelefonról lehet parkolást fizetni: alkalmazással, SMS-sel vagy hanghívással.

Figyeld meg, mi történt:

  1. Először jött a „kényelmes" app.
  2. Aztán a szolgáltató kvázi kötelezővé tette az appot.
  3. A korábbi lehetőséget (automata, készpénz) felszámolta.
  4. Az árat megemelte

Az ellenőr nem ad lehetőséget a jogkövető magatartás gyakorlására, nincs nála lehetőség a vásárlásra, hanem büntet. De ha készpénzed van, időd és okostelefonod azonban nincsen, akkor vásárolni sincs hol. Rákényszerít mindenkit — az időst, a fiatalt, a szegényt, a gazdagot egyaránt — hogy rendelkezzen okostelefonnal, bankkártya-adatokkal, és azokat használja is. Ez a digitális kirekesztés modern formája. Az állampolgárnak szükséges tudnia éppen melyik zónában tarzózkodik, mi a telefonszám, az sms pontos tartalma, hogyan kell a készüléket kezelni. A hiba lehetősége kizárt, különben jön a dádá.

VI. Miért pont ez a megoldás a bankoknak?

A bankoknak természetesen legitim biztonsági szempontjaik vannak. Senki sem szeretné, hogy egy bankszámlát feltörjenek, vagy illetéktelenek hozzáférjenek a pénzéhez.

A kérdés azonban az, hogy valóban ez-e az egyetlen lehetséges út.

A jelenlegi gyakorlat lényegében azt mondja:

>

Ez kétségtelenül egyszerűbb megoldás a bank oldalán.

A bankok jelentős pénzügyi, fejlesztői és informatikai erőforrásokkal rendelkeznek. Elméletileg lehetőségük lenne:

  • magának az alkalmazásnak a biztonságosabbá tételére (saját kódellenőrzés, reverse-engineering elleni védelem),
  • a szerveroldali ellenőrzések erősítésére (anomália-detektálás, viselkedés-alapú ellenőrzés),
  • a kommunikáció védelmére (végponttól végpontig titkosítás, kulcstárolás),
  • a hitelesítési folyamatok fejlesztésére (FIDO2, hardveres kulcs, biometrikus aláírás),
  • vagy akár arra, hogy több operációs rendszer biztonságos támogatásán dolgozzanak együtt a közösségekkel és a fejlesztőkkel.

Ehelyett ma sok esetben egyszerűbbnek tűnik kizárni mindenkit, aki eltér az általuk elfogadott platformoktól.

Ennek ára van. Nem a bank fizeti meg. Hanem a felhasználó.

Az a felhasználó, aki évekkel a készüléke megvásárlása után is elégedett lenne a telefonjával. Az a felhasználó, aki tudatosan választott egy nyílt forráskódú operációs rendszert. Az a felhasználó, aki saját maga szeretné eldönteni, milyen szoftvert futtat a saját tulajdonában lévő eszközön.

Nyilván ez a legprofitábilisebb, a legkevesebb költséggel ez jár a bankok számára. Az pedig, hogy a felhasználók millióinak ez milyen költséget jelent — nem beszélve a globális szennyezésről — az úgy tűnik, hogy valójában nem érdekel senkit.

VII. A tervezett elavulás

Sok alkalmazás ma már egy meghatározott Android-verziót követel meg. Egy öt-hat vagy több éves, egyébként teljesen jól működő telefon emiatt könnyen elveszítheti használhatóságát — nem azért, mert a hardver elromlott, hanem mert egy szolgáltató már nem hajlandó azt támogatni.

Ez nemcsak pénzügyi kérdés. Ez környezetvédelmi kérdés is.

Minden idő előtt lecserélt telefon:

  • újabb elektronikai hulladékot jelent,
  • újabb nyersanyag-kitermelést (kobalt, lítium, ritkaföldfémek),
  • újabb energiafelhasználást a gyártásban és a szállításban,
  • és az eszközbe épített karbonlábnyom azonnal elveszti az értelmét, ha a készüléket idő előtt kidobjuk.

Miközben nagyon sok vállalat kommunikációjában hangsúlyosan jelenik meg a fenntarthatóság és a „zöld" működés, ritkábban esik szó arról, hogy a szoftveres támogatási döntések önmagukban is jelentős hatással vannak arra, hogy meddig használható egy elektronikai eszköz.

A fenntarthatóság nemcsak az irodák szelektív hulladékgyűjtéséről vagy a papírfelhasználás csökkentéséről szól. Hanem arról is, hogy nem kényszerítjük emberek millióit teljesen működőképes készülékeik lecserélésére pusztán szoftveres döntések miatt.

>

A kontraszt: Linux Mint egy 3. generációs Intel processzoron

Gondoljunk csak bele: egy több mint tízéves, 3. generációs Intel processzorral szerelt számítógépen ma is gond nélkül fut egy korszerű Linux-disztribúció, például Linux Mint 22. Böngészni, programozni, dokumentumokat szerkeszteni, videót nézni, sőt akár komolyabb fejlesztői vagy grafikai feladatokat is el lehet rajta végezni megfelelő szoftverekkel. Ugyanez a hardver azonban hivatalosan már nem támogatott a Windows 11 esetében.

A kérdés tehát nem az, hogy technikailag lehetetlen-e rajta futtatni egy modern operációs rendszert — hiszen más rendszerek bizonyítják, hogy lehetséges. A kérdés az, hogy a szoftveripar milyen irányba tereli a felhasználókat.

Ez egyébként a professzionális szoftvereknél is igaz: léteznek nagyon jól optimalizált, böngészőben futó 3D-tervező és modellező eszközök, amelyek a mai napig futtathatók akár évtizedes hardveren, miközben a hasonló funkciójú, de „védett" és reklámozott, drága szoftverekhez csillagászati áron kell új hardvert vásárolni. Ugyanez a logika, ugyanaz a minta, ugyanaz az üzleti modell.

>

VIII. Meta, Instagram, Messenger — és ami most jön

A súlyos adatgyűjtési és viselkedéselemzési kockázatokat még nem is említettem részletesebbrn. Pedig a Meta (Facebook, Instagram, Messenger, WhatsApp), a Google, a TikTok és a többi nagy platform épp ezt a veszélyt emelik valós szintre — nem elméletben, hanem a mindennapokban.

Chat Control — a holnap problémája, ami már ma itt van

Ehhez most jön egy újabb réteg: az EU „Chat Control" javaslata.

A javaslat hivatalos célja a gyermekek online szexuális bántalmazása elleni fellépés. A valóságban viszont az asztalon lévő tervezet a következőt jelentené:

  • kliensoldali szkennelés — az üzeneted a te készülékeden, még a titkosítás előtt futna át egy algoritmuson, amely összehasonlítaná egy központi adatbázissal,
  • a szolgáltató (Signal, WhatsApp, Telegram, Messenger) kötelessége lenne ezt minden felhasználóra bevezetni,
  • és mindezt az end-to-end titkosítás fenntartása mellett — ami a tervezet logikája szerint „nem sérül", pedig a gyakorlatban pont az ellenkezője történik.

Ha a te készüléked maga vizsgálja át a saját üzeneteidet, az a privát kommunikáció végét jelenti. Nem azért, mert „megszűnik a titkosítás", hanem azért, mert a titkosítás már nem véd: a tartalmat a küldés előtt egy harmadik fél algoritmusa olvassa. Ez ugyanaz a logika, mint amikor a bank megmondja, milyen szoftvert futtathatsz: a szolgáltató a te eszközödön keresztül ellenőriz, a te beleegyezésed nélkül, a te érdekedre hivatkozva.

A javaslat 2024-ben és 2025-ben is komoly vitákat váltott ki, 2026-ban pedig újra napirendre került — a részletek folyamatosan változnak, de az irány egyértelmű: a privát kommunikáció fokozatosan ellenőrzött kommunikációvá válik.

IX. Mit tehetsz?

  1. Tüntetőleg lepontozni az érintett appokat az App Store-ban és a Google Playen. Mindegy, hogy használod-e. Az értékelés azonnal látszik a toplistán, és nyomást gyakorol.
  2. Nyilvánosan bojkottálni azokat a szolgáltatókat, amelyek kizárólag Google-tanúsítványú, lezárt bootloaderes, „felügyelt" környezetben hajlandóak működni. A te pénzed a te szavazatod egy antidemokratikus üzleti világban.
  3. Szervezetten jelezni a problémát a bankok és szolgáltatók felé: „Nyissátok meg a szolgáltatásotokat AOSP-re, rootolt eszközre, Ubuntu Touch-ra, webes felületen, hardveres kulccsl stb..." Lehet, hogy nemet mondanak. De a kérés dokumentálva lesz.
  4. Számonkérni a döntéshozókat politikai szinten: ha egy önkormányzat vagy állam felszámolja a készpénzes fizetést anélkül, hogy alternatívát adna, az a digitális kirekesztés egy formája, ami az időseket, a szegényeket, a digitálisan korlátozottakat és a magánéletre érzékenyeket egyaránt sújtja. Ez nem semlegesség, hanem súlyos diszkrimináció.
  5. Nyilvánosan beszélni róla. Megosztani, kommentelni, vitatkozni, írni róla. A digitális kirekesztés csendben zajlik sőt, a csend a fő fegyvere.

X. Levezetés

A Windows, is egy külön műsor — és a zárt szoftverek világa. Ott is jönnek most az életkor-ellenőrzések és a hasonló abszurditások. Az iOS, az Android további "csodái", vagy éppen az online életkorellenőrzés, a közösségi oldalak bezárása, az egyre szűkülő lehetőségek és a szabad döntés egyre durvább befolyásolása, a média által befolyásolt tömegek egy másik, soha el nem készülő bejegyzés témája lesz majd. 

Egyelőre itt tartunk: a banki appok bojkottja, a lepontozás, a nyilvános tiltakozás. Csak így lehet a nagyokat belátásra bírni. Táncoljon a piac úgy, ahogyan mi énekelünk, ne pedig fordítva.

Létezhetnének olyan megoldások is, amelyek figyelmeztetik a felhasználót a kockázatokra, de végül meghagyják neki a szabad döntés jogát. Ahogy egy számítógépen is eldönthetjük, milyen operációs rendszert telepítünk, úgy egy saját tulajdonú telefonon is jogunk kellene legyen eldönteni, milyen szoftvert szeretnénk használni.

Technikailag a biztonság nem jelentheti automatikusan a szabadság megszüntetését - és ezzel egyidejűleg az emberek hátrányos megkülönböztetését.

u/BoxieBoo — 2 months ago
▲ 3 r/LocalLLM+1 crossposts

Searching the optimal MTP configuration

I did a test on the UD Qwen3.6 27B MTP Q4_K_XL model. Hardware: 2x RTX3060@12GB (Gen3 8x pcie speed for each card). CPU is currently an i5-6500, along with 1x 8GB DDR4@2666MHz.

The CPU is a bottleneck, later I will change it to an i7-6700 and the ram to Dual-channel 3200 MHz.

So the script is in Hungarian for now, but the parameters can still be read.

I specified the following settings under llama.cpp:

/home/adam/llama.cpp/build/bin/llama-server -m /home/adam/Models/unsloth/Qwen3.6-27B-MTP-GGUF/Qwen3.6-27B-UD-Q4_K_XL.gguf --port 8081 --ctx-size 2048 -ngl 99 -t 2 -sm layer -fa on -rea off --cache-type-k q8_0 --spec-type draft-mtp --spec-draft-n-max [1..4] --spec-draft-p-min [0.05..0.95]

The step size was 0.05 for the spec-draft-p-min value.

This was the first round.

Then when I had the data to see where outstanding performance was seen, the second round was fine tuning. Here I used the best result from the first round, with a resolution of +-10 pmin and 0.01 step size.

Originally, if MTP is turned off with this model, it generates tokens at a speed of ~15t/s. Based on the test, the most optimal settings for this hardware are:

-> Draft Tokens: 2

-> Draft Probability: 0.44

-> Speed: 22.26 tok/sec

This is about a 48% speed increase. But during token generation, the CPU is driven at maximum, so I think it can be increased even further later after the CPU is replaced.

That's all for now, just a little curiosity. If I have time, I want to make the script universal so that it is easier to run in other hardware environments.

u/BoxieBoo — 4 months ago
▲ 55 r/ollama

Token generation speed on integrated vga card with DDR4 RAM

Hello!

I did some simple tests. The goal was simply to show what the possibilities are on a mid-range machine.

This is a laptop, 2x32GB DDR4 3600MHz RAM dual-channel. Ryzen 5 7430u + integrated Vega GPU. The interesting thing is that the use of Vulkan GPU is forced, in ollama and thus the laptop is about 20 degrees cooler, approx. It consumes 15-20W less and the token generation speed is roughly 10% faster. In addition, the CPU remains usable. 16GB of RAM is set for it in the UEFI Setup and another 16GB for the GTT, so the GPU uses a total of 32GB of RAM, but if that is not enough, then of course the additional RAM can also be used for larger models. In this test, the smaller q2-q3 quants were the target. I didn't just test the speed, I also gave them real tasks, but so far I don't have the results.

So that's just a little point of interest. If someone thinks like this and has a similar computer, this is what you can expect. Later, if I find suitable models for me, I might test them separately with ollama and llama.cpp, because supposedly the latter can even bring extra performance.

UD models are also unsloth models, I just started renaming them because of the long name.

(The text of the header and footer in the picture is in Hungarian, but I think it is still understandable.)

u/BoxieBoo — 4 months ago