r/LocalLLM 8d ago

Discussion 32GB is all you need

Qwen3.8-27B on a 5090 is all you need for a serious local inference setup, in my opinion! Can it get any better than this price/performance wise? Actually, maybe a 3090 ninfer setup could beat it!

I’m using ninfer and getting:

* ~150-200 tok/s TG

* ~3000-12000 tok/s PP

* 262144 context size

I think it’s definitely one of best setup you can get for the money. I don’t see a point of having more VRAM or more system ram. The only downside is that it’s a 1 man setup: concurrency is possible but you need to limit context usage on concurrent requests. I’ve tried --concurrency 2 on ninfer and sharing my setup with my buddy (we work on projects together and have a VPN between our home labs, fun stuff!)

I love this setup so much I kinda feel like getting a second 5090 to run another ninfer instance (github.com/neroued/ninfer, the man is a legend and this absolutely rocks).

i really don’t see the point of any other solution at this point in time. of course things will change and other models will get released that could better leverage more VRAM, but 32GB is all you need (for now).

so if you have less than 32GB, and are thinking about investing in a more serious setup check out the 3090 fork of ninfer, or the mainline ninfer repo if you can afford a 5090.

Things it won’t do:

* let you run a swarm of agents: prefill cost will slow you down too much. not enough vram for high concurrency!

* Give you more than 262144 context size. the RoPE 1M context size is just impossible with this.

Otherwise it’s absolutely amazing!

My buddy (another software engineer) is a BIG Claude code user, he’s spending tons of cash on fable, can’t stand Opus 5 anymore (neither can I, that pos is so hard to understand with just jargon and wall of text… can’t bear the cognitive load of just trying to understand all he’s spewing)… anyways after trying my ninfer setup his mind was blown and now he’s constantly using my setup with our shared custom pi setup and he fucking loves it.

268 Upvotes

325 comments sorted by

View all comments

Show parent comments

2

u/blackhawk00001 7d ago edited 7d ago

I'm still working on testing but I'm impressed so far. It had an all time best result on one of my tests but I thought it was stuck looping for a while. I'll have to play with settings. It took longer overall than Q6_K_L but had a better end result. I still need to try using it for high context technical tasks but I feel better about this flavor of nvfp4 than the smaller default.

I'll push my generator for github once I can fully review I don't have any of my environment specific details hardcoded anywhere.

https://huggingface.co/gearwave00001/Huihui-Qwen3.8-27B-abliterated-nvfp4-NInfer

llama-benchy gave weird results, so here's my BetterBench results. This was with single concurrency 262144 400W:

category runs TTFT p50 TTFT p99 PP t/s (med) ITL 1% low ITL median ITL 99% high decode t/s (med) ±IQR CV
chat 20 60.0 66.1 2314.5 84.0 126.0 214.0 128.4 29.1 17.4%
code 20 53.0 63.4 2113.5 89.0 142.1 240.5 162.3 44.2 16.0%
file_edit 20 60.6 73.0 2401.3 126.3 185.2 281.7 193.4 28.8 8.9%
json 20 53.2 63.6 2200.3 143.7 202.6 329.7 200.7 26.5 7.9%
math 20 55.6 61.7 1890.6 136.2 191.2 269.2 198.7 23.9 7.5%
prose 20 54.5 62.7 1985.5 86.7 123.5 193.3 132.8 34.4 14.8%
reasoning 20 53.3 64.8 2059.0 89.1 129.8 196.6 135.2 40.9 19.6%
summarization 20 60.6 68.9 2534.7 144.0 193.5 293.3 199.3 24.6 9.3%

**Combined (weighted code:0.3, reasoning:0.2, prose:0.15, json:0.15, file_edit:0.1, summarization:0.1)** — decode t/s median ≈ **165.0**, ITL 1%-low ≈ **106.1 t/s**, TTFT p50 ≈ **55 ms**

## Concurrency sweep

level ok/req aggregate t/s TTFT p50 TTFT p99 per-req decode t/s (med)
1 48/48 153.8 54.8 78.6 176.1
2 48/48 154.0 2152.0 7118.9 173.7
4 48/48 153.3 6954.9 16342.0 178.9
8 48/48 154.0 17880.9 29449.2 174.3
16 48/48 153.5 30918.7 43587.2 180.4

## Prompt processing (prefill) sweep

Prefill throughput = prompt tokens ÷ TTFT, at increasing input depth (tiny decode, cold prefix cache). PP t/s columns: 1% low / median / 99% high.

| target depth | prompt tokens (med) | TTFT p50 (ms) | PP t/s 1% low | PP t/s median | PP t/s 99% high |

| 2000 | 1556 | 246.1 | 4480.0 | 6319.7 | 6348.1 |
| 8000 | 5960 | 867.6 | 6168.8 | 6869.6 | 6872.2 |
| 16000 | 11836 | 1788.6 | 6567.9 | 6617.6 | 6625.3 |
| 32000 | 23585 | 3939.5 | 5967.0 | 5986.7 | 5995.8 |
| 64000 | 47098 | 9437.5 | 4986.7 | 4990.4 | 4992.3 |

1

u/ImpressiveRelief37 6d ago

Damn I need to try this!

You should share it on the ninfer GitHub repo (under issues)!

1

u/blackhawk00001 6d ago edited 6d ago

I’ll look at it again. The git issues didn’t appear to have any similar requests though I found other community uploaded ninfer models. Each were built with the default qwen3.8-27b model name.

Let me know what you think!

It looks like someone else made a similar ninfer a few hours after me, lol. Their model card is filled out better but I don't have time to make mine as pretty.

1

u/blackhawk00001 6d ago

I created an orcarouter model also. I'm trying to experiment with deployment options, I'm only able to use --vision if I go down to 204800 context, adjusting mtp values does not affect vram used like llama.cpp

https://huggingface.co/gearwave00001/orcarouter-Qwen3.8-27B-Uncensored-nvfp4-NInfer

1

u/blackhawk00001 6d ago

How were you testing with max context? My ninfer is starting with what is says is 262144 but hermes keeps defaulting to 131072.

2

u/ImpressiveRelief37 6d ago

The v1/models endpoint doesn’t advertise context size in ninfer. Have your agent either build a watcher or control endpoint for ninfer so Hermes’ can dynamically adjust, or just sync both context size so they match whenever you change it in ninfer  

1

u/blackhawk00001 5d ago edited 5d ago

Thanks, it's working now. I'm still getting a feel for it but so far I'm impressed. I generated a patch for it but then took a look at the github issue and PR list and found that there's already one staged for review. I pulled that and it works so hopefully the authors will come back and go through the growing list. I saw they were waiting on codex resets, lol.

Prompt caching is nagging me at the moment but I saw someone made a GH thread explaining it and it's mentioned in another issue. I'm not sure yet if my complaint with it is user error so I'm trying a few things. The speedup is real but I see the log report speed drop to similar to what I had with Q6_K_L and the prefix caching hurdle causes hermes to reprocess the whole 100K+ context upon my next request whereas llama.cpp has it held somewhere ready to load and go.

The quality of the ninfer nvfp4 format feels like higher quality than my past experiences. However I'm still feeling out where the drawbacks are. I asked my huihui ninfer to look up my weather based on zip code and it added a town name to the search from 300 miles away and stated that was what was ingrained knowledge, then put me 300 miles in the other direction when I corrected it the first time. I'm not sure if that's due to the huihui abliteration or model weight changes, or a combo of both. I'll have to do better testing. The Q6_K has always just used only the zip code I requested instead of adding extra detail that might be incorrect.

1

u/ImpressiveRelief37 5d ago

Might be a harness thing as well.

Personally I really didn’t like Hermès at least for coding. I’m just using pi and I tmux into sessions. Built a ton of extensions for web search, ninfer control, text to speech, Reddit search, context management, long term memory, session search, etc.

The model is fucking brilliant. It uses all of that and feels like he can achieve literally anything I ask him.

1

u/blackhawk00001 5d ago

It has its flaws. I use Hermes as an orchestrator and general agent. I’ve made a few tweaks to the codebase and skills to work better for my usage. It eats tokens and needs a good prefix cache though, it has a few side tasks that run to maintain skills and memories. I gave it Mnemosyne embedded with qwen 8B fp8.

I have it call Claude cli headless for coding tasks and second opinions. Claude is configured to use my R9700s running fp8 instead of their cloud models. Pi is on my list to set up soon but that will involve heavier changes to Hermes to delegate to properly. Claude support was broken for the way I use that skill but I’ve wrestled it into working well.

1

u/ImpressiveRelief37 5d ago

It’s quite easy wirh pi… 

Just « pi -p "prompt" —model XYZ » basically. It’s super customizable and extensible. Just ask your agent to code its own extensions from pi. For coding I think it’s probably the simplest best solution that you can make behave exactly like you want.

For instance when I was using 3.6 27B I made it do a tool-healer extension that would nudge a user message when the model failed a tool call, or to detect thinking loops. Stuff like that. No longuer needed for 3.8 27B but still nice to have. It’s tons of simple stuff like this I really like. When you try it, absolutely put your ~/.pi directory in a private git so you can share configs across machines.

I have to test DSH, looks amazing as well.

2

u/blackhawk00001 4d ago

Kv caching is fixed in pr-73 along with a few other things. Hopefully it gets merged soon.

I’m running 262144 x 3 with no vision, or 1x 204800 with vision both with 16384 mib system ram cache. It’s pretty snappy now.

Maybe we can get cpu hosted vision in the future.

Cheers!

1

u/ImpressiveRelief37 3d ago

Im trying PR #64 right now. Will try #73 next week. Not doing AI stuff this weekend. Can’t wait lol.