Show HN: Running 104GB Qwen3.8-Flash-Next on 48GB Mac with at ~12 tok/s (github.com)

1 points by carloslfu ↗ HN
I built slotstream, a way to run Qwen3.8-Flash-Next 4-bit on a low-memory mac starting from 16GB, a 125B parameter model that would need 100GB+ memory/RAM, thanks to expert-offloading/ssd-streaming. Easy to install/update, and mac-native using MLX and Swift.

It ships with auto-mode, which makes a good tradeoff between memory usage and speed. I'll be implementing and porting the MTP module for speculative decoding next

98 comments

[ 0.28 ms ] story [ 12.8 ms ] thread
There are already a handful of repos doing essentially exactly this: `mlx-moe-offload`, `streamlx`, `mlx-moe`, `mlx-flash`, and `deepseek-v4-flash-mlx` - i.e. keep the resident parts of an MoE in unified memory and page/stream routed experts from SSD on Apple Silicon.

At this point I'd much rather see people collaborate on one of these implementations, benchmark against them, or upstream the useful bits into MLX/MLX-LM instead of producing yet another near-identical repo.

The local-LLM ecosystem really does not need every implementation idea rediscovered five times and wrapped in a new README. AI-assisted coding makes producing a new repo cheap; maintaining, benchmarking, and integrating one is the actually valuable part.

And there are `Mference` and `SwiftLM` too, I think they are doing the same use case.
Why should they do that? For you? You could merge those projects and see if they get traction.
This is one of the aspects of this year that I've been finding very grating and wasteful. Collaboration still happens among people with the ability to do so and the technical skills, but everyone else is taking their own helicopter to the top of the mountain, "putting it out there", and there's just a ton of redundant projects that do the same thing.
It's horrible. Every 20-something working on a load-bearing inference engine on GitHub.
for the record, I'm almost 35
Also for the record, I wasn't trying to take a personal shot at you or your project—nor am I sure of how valid that would be, if that were to have been my intention—it's just a gripe I have in general what I think is somewhat degrading the trust I can have in certain types of projects, especially those that someone shits out, puts on the app store, appears on the surface to visibly look ok, but ultimately has no uniquely valuable contribution or long-term outlook and is just someone's zero to one replication of something that has an api and already exists. It is admittedly cynical, but I now scrutizinize what I pay for more aggressively as a consequence.
I think multiple people working on the same thing is great.

Everyone comes at it from a different point of view, and some approaches work, some don't. And when people do this themselves they learn. Existing projects have their mistakes worked out already.

Maybe one of these people is going to come up with the thing that nobody else thought of because of their experience working the problem from scratch. You may not get that from someone working from an existing project, because existing projects have their approach "baked in."

What all these projects are showing so far is that it's possible to stream from disk, but that the performance isn't ideal. But I'm sure you could take this approach with smaller models and get better performance.

In addition, it's a given that when you work with large data sets performance means organizing the data to take advantage of caches, both disk and cpu. It's not clear how that would work, exactly, given that each run is a not-quite-random walk through the data. The Big Data way is to prebuild all of that as much as possible, which is probably impossible with a big model. But what about a smaller model?

Multiple people working on the same thing is great. I'm less convinced about multiple people asking the same LLMs to redo the same project and coming up with a repo with a llm slop readme full of "Disk bites first", it's not this, it's that etc...

I don't think that this will bread any innovations.

how much energy does it consume?
Good one! I haven't measured this. I'll include it!
It seems we could use a new kind of memory that streams the weight data in, like GDDR in reverse.
yes! I guess future hardware designs will have something like that!
"Disk is the gate that bites first"

AI;DR

The never ending gate bites.

How I have come to detest certain phrases.

Load bearing gate bites.
...the seam.
Interesting! You're absolutely right, I'll check
Ha! AI;DR is a great phrase. Had not seen that before
[delayed]
I hate this AI style writing because since it doesn’t really understand flow, it’s being inserted in irrelevant places and it is extremely irritating to read.
I feel you! fix incomming
For what it’s worth, this comment was not targeted at you, but rather the model kinda forcing it. I get the sense that Anthropic did not think much of this, but it seems to have gotten worse with recent models and it really comes off as a kind of nails on the chalkboard writing style.

I have to image whatever style of writing this was trained on is a lot more pleasant to read and I feel bad for whoever writes like this now being associated as bad AI writing.

most of this stuff isn't really possible at this point _without_ models, so pissing and moaning about people publishing work and not humanizing is really silly.
"Remove anything from the README.md that wouldn't be helpful to someone who sees this project with zero context, for the first time. Rewrite all paragraphs and sections to be concise and remove all fluff, leave only important details new users must know before using the project"

and then above that the mention of hugging face is the bottleneck, not your link...

if someone completely new comes and read the current page... isn't that piece of information something they want to know?

and then the comment below about "extremely irritating" that whatever I read didn't read my mind to provide only and exactly only what I would consider great... it should be a twit that I can repost and be famous... instead I am so "extremely irritated".

what does it say about that group that gets "extremely irritated"?

Hey I spend 20 days working on this that covers something new and maybe grEat, check it out! "AAARRGHHH I'M SO IRRITATED it has one em-dash ARRRRRRGHHHH"

> if someone completely new comes and read the current page... isn't that piece of information something they want to know?

Again, the README is (was?) written in way that it was clear it was a conversation between an agent and a human, with literal replies in the README. I'm in no way whining the way you are or demonstrate, and I even give OP helpful advice to fix it. What more can you want from me?

I used similar prompts before. Now I simply say to "remove historical cruft" and results are good enough. It's the model itself that first used this wording, I found it concise.
I don’t want to be a cranky codger, but I dont get why 5 minutes of work cleaning up the README can’t be done before posting to HN.
Honestly? Me neither, I'd be embarrassed if I got caught not even looking at my own work before shipping it publicly.

However, feels like the battle is loosing, and now it's just about softening the landing instead of being vehemently against something the vast majority seems to be engaging in. I refuse to participate myself, but at least hopefully I could help steer some of them in a better (more concise) direction.

And it can even be LLM work. Just write a good requirements doc for document creation, including links to good readmes, maybe a style guide for your personal style.. and you can have quality docs with near zero tax.

Sure, hand editing each one is even better, but you can get 80% of the way there with zero ongoing investment.

> Run Qwen3.8-Flash-Next on a Mac that can't hold it

This is the first line of the README. I can't believe people are becoming ok with this, and I'm 100% on the AI train.

I'm hoping to see progress in this space.

Folks talking about how 32G is not enough for local use, but then there's been work like this to empower it.

My hope is that the new 32G M6 will be "useful" locally, possibly because of work like this.

yes! I'm bullish on this. there is a lot of work to do. I've been experimenting with pruning, distillation, and retraining too. I'm sure your 32gb m6 will run a badass local model!
Yes, but also 12 tok/s versus Claude is so far from comparable. I know that it’s not exactly 1:1, but it’s a long way from an easy trade-off, especially considering hardware prices for high levels of RAM.
32GB is simply too tight; you need 8 minimum for the OS and you need about 4-8 more for the LLM you’re visiting and kv cache.
It's hard to believe 16GB unified memory will give you 5 tok/sec unless you are ignoring the thermal warnings. I am running Qwen3.6-35B-A3B on my 16GB M3 and get 7-8 tokens/sec with all the optimizations while keeping the peak memory and thermal warnings at check. https://github.com/deepanwadhwa/samosa-chat
interesting! Yes, thermal is important. Pretty cool project man! Starred and checking it out!
Now I'm feeling pretty good about getting 10-11 tokens/sec running Qwopus 3.6-35B-A3B Q6_K on an old Mac Pro 2013 (trashcan) with 128GB RAM (DDR3), 12 core Xeon, dual D700s. Arch Linux and llama.cpp.
Anything smaller than a 16” runs into serious thermal problems; even an identically equipped 14” just can’t dissipate enough heat.
The laptops definitely can't hang but the minis don't really care. I threw mine down in the basement just to put the heat somewhere else, can tell when the dehumidifer next to it is on because it's a few C lower but that has no impact on performance. I don't think it's ever seen anything north of 70
As someone who is just looking at the theoretical benchmarks of each of these models I'm curious if anyone could share what are the problems (maybe around code) that flash-next was able to solve which 27b was not able to
For a local non-coding agent, instruction following and tool use are the most important gains
Is this going to destroy my SSD?
A particularly worrying situation considering a dead SSD will render your macbook usable for parts only.
I have a 48GB M5. I don't need to run larger models. I want more context. I've managed to set the context window at 71,680 using Qwen3.8-27B-oQ4e-fp16-mtp. But I want more. Is anybody, with similar specs, able to set their context window higher?
yes, with qwen3.8-27b-4bit run via rapid-mlx i can get to about 200k
Nice.. and how many toks/sec?
You should try Glimmer MTP. Qwen3.8 27B seems to have weird memory and caching issues on oMLX
We are running 35b-A3b with 264k context (the model's default max) using vllm and the "frog" jinja templates: https://huggingface.co/froggeric/Qwen-Fixed-Chat-Templates and had good luck. We are mostly running agentic workloads though, rather than coding. 27b has a slightly higher agentic job completion rate (95% vs 92%) but the 3% trade off is worth it because the A3B is sooooo much faster, and we reprocess the other jobs with a different model. Don't sleep on the froggeric templates.

Qwen: Looking at you for a new ~35B MoE! Please and thank you

I am running 3.8 27b at q6 quant with 160k context on a 32gb video card (arc b70 pro) - I quantized the kv cache at q8 - that is the only trick really - works great.
How are you finding it when it gets that high anyway? I’ve got a 64gb Mac so the context _can_ go higher. But I find around 70-80k it goes a bit weird and starts arguing with itself and doesn’t seem to know who it is vs me anymore.
I swear the models are named by the beatbox aliens from the post office in MiB
I love these efforts to get proper models running on lower cost hardware and I think this is where the next real breakthrough will come from. The more efficient this sort of thing can be done the bigger the chance to democratize this tech, 'good enough' is what you need and as long 'top of the line' gives a competitive edge even if it is at a cost there is a substantial risk of the door closing on general computing at some point in the near future. Keep in mind that there is no guarantee that the pendulum has to swing back, it can swing one way and get stuck, and then you're going to have to beg for crumbs from the haves.
I think there's a very good chance that history will rhyme a bit.

DOS/Windows and PC clones were by no means the best available, but they were cheap, ubiquitous, and versatile compared to alternatives that were either much better at one task but more expensive or better at everything but wildly expensive. They were "good enough" and represented a solid improvement over what many existing computer users had as well as a good entry point for new users. As such they spread like wildfire and became the standard while the expensive alternatives either became hardcore niche or vanished.

SUN Apollo SGI

Though to be fair it was Linux more than Windows that killed them. Dos and Windows were competition for DEC and - ironically - IBM.

I am trying to make it easier to use LLMs on older, cheaper, smaller GPUs. I'm taking a similar approach (move MoE expert weights to disk, avoid wasting VRAM on these). My goal is also to run models that do not fit. My work also suffers from AI documentation issues. Where my approach differs is that instead of running an LLM that doesn't fit slowly, run many agents in parallel sharing the streams of MoE experts weights, to increase throughput. I envision a team of AI agents sharing a pretty-good-at-coding LLM that does not fit to collaborate on a set of related features, being developed in parallel.

My work is showing promising results (if you can get past the way the AI tries to describe what I am doing). https://sw-ml-study.github.io/emufpga/index.html

I am doing this work initially on a 6-Xeon-cores Linux workstation with an RTX5060-16G to run MoE models larger than that. Then I will be moving this to a server with a lot more cores (Dual 32-cores) and a mix of SAS HD and SSD drives, using older GPUs.

Ultimately, I hope to build some FPGA/MCU "accelerators" that process the expert weights on systems with not enough CPU cores to offload the experts. If I can enable large capable models to run on older hardware, keeping the limited GPU VRAM for context and things that must be in VRAM, I can get useful work out of my old refurbished systems without paying today's RAM and VRAM/GPU prices.

32GB dedicated to an N-gram table instead of a draft model is an unusual choice for speculative decoding — what made it win over the more common draft-model approach here?
It wasn't either/or, the N-gram table is part of Qwen itself and stays on disk. I’ve now added its 1.5GB MTP draft head too, it gets 86% acceptance and about 1.24× faster decoding on my 48GB Mac.
Got it, thanks for clearing that up. 86% acceptance is solid — does it stay flat over longer generations, or drift with context length?
How usable is 12 tok/s?
Unpleasant for interactive agentic work. Still useful to leave it to do some work in the background.
so many inference project, omlx already supports all of this and has a 1000 people trying to optimize it constantly
Both projects are different in scope. Think of slotstream as optimizing for memory and for this specific model for now, my intention is not to build an inference engine the same as oMLX
Not a mac/UMA discussion point, but is it time to add additional, installable, DDR5 to GPUs? I can see this as a win/loose. PCIe 5x16 is close to maxing out the bandwidth available from high end dual channel DDR5 now, but not quite. I'm not a hardware person but I suspect putting it on the card could lead to significant performance improvements over using system ram so allowing systems like this, where MOE weights are shed, to get even higher performance than just adding that DDR5 to the system. Bigger models become closer to reality and it provides more of a pathway for developing technologies that take advantage of it. Of course the loose side is that you just put a lot of specialized ram on a card instead of into the system where it could be used for other things. I could see a place for a 16GB card with 64GB(or more) of DDR5 especially if we start seeing MOE and similar technologies really start being designed for this concept.
For what it's worth, I've spent some time with Claude to develop a local runner for `llama.cpp`. I run Qwen3.6-35B-A3B-MTP (fast!) and Qwen3.8-27B (20 tokens/s).

This was definitely worth the effort. Benchmarking and testing various approaches and various options really paid off. For example, one thing that surprised me was that MTP made things slower, not faster for Qwen3.8-27B.

I use a 64GB MacBook Pro (M4 Max).

I find mtp=3 does well with that model, only at 4 it becomes unprofitable.

Check your quants, its worth having the mtp layer be a bigger quant if it leads to 2x throughput from more accepted tokens.

I’m not an expert, but my understanding is that MTPs are smaller LLMs fine-tuned to "mimic" / predict a specific model’s response. It’s possible that the MTP you’re using isn’t trained well enough on Qwen 3.8. What accept rate are you getting?
For qwen, it's an additional transformer layer at the very back, it ships as part of the model.
Acceptance rate is good, but MTP doesn't help in my case because of my machine's memory bandwidth constraints (M4 Max). Turn out it's better to turn MTP off.
I just used it, went through the whole installation (took like 1 hour approx). Long but straightforward. If I put my computer to sleep will it continue?

I started the server (very curiously I was running oLlama in the same prot slotserve uses by default, instead of switching it which I know you can do, I just ditched oLlama, perhaps an insight for you) and built a small html hello world served via Python. The thing pointed me to the localhost link, nice!

As an early user, my advice is to focus on efficiency. The efficiency of the installation but more importantly, the efficiency of running the thing. 8.1GB per slotserve process is a lot! Is that in your control?

Also, I've seen an interest of certain kinds of programmers for open-weight models. "We all know agree that LLMs for coding are very useful but we're giving money to a small set of big, evil corporations. They're Trump donors. I heard it's bad for the environment because it uses water". If it's local and open-weight, this could be marketed this way I think.

Finally, what's the actual, real use case for slotserve?

thanks!

> ditched oLlama"

yeah! this is interesting.

> 8.1GB per slotserve process is a lot! Is that in your control?

yes, it is hard, but I agree the smaller the better. I'll work on that

> If it's local and open-weight, this could be marketed this way I think.

I like this!

> what's the actual, real use case for slotserve?

I'm working rn on an app on top of it that closes the loop and is a fully local AI app, an experiment. I'll publish it as soon as it is usable!

> built a small html hello world served via Python

What did you use as a harness here?

For the harness... just the shell. No client library. Does that answer your question?
thanks! in part, I was wondering how you got the code into files. I guess you copy pasted it inside a file, am I right?