ML engineering · 9 min read
Can NCM run on a MacBook without its GPU? I tested it against GPT-2 and Gemma 4
Next-Concept Modeling is a new way for AI to write text. I ran it on a MacBook Pro's CPU alone, next to GPT-2 and Gemma 4 12B. It runs in about 2 GB, and a fix of about 20 lines made its summaries 2.5 times faster.
Ken Ruiz Inoue · October 2026
NCM, short for Next-Concept Modeling, is a new way for AI to write text, from Stanford and Together AI. Its paper measured its speed on an NVIDIA H100, a data center GPU.
I ran NCM's released models on a MacBook Pro's CPU alone, with its GPU unused, next to GPT-2 and Gemma 4 12B. The scripts, the logs and a setup script that rebuilds everything are public, and every measured number below comes from runs on October 30, 2026.
How NCM writes
Most language models, GPT-2 and Gemma included, write one token at a time, and every token costs a full pass through the model. Diffusion language models start from a blank, masked-out text and fill in all of it over many passes. NCM takes a third path. A learned tokenizer squeezes text into a short list of codes, which the paper calls concepts, at several levels of detail. The model writes the coarsest level first, then each finer level in one pass, and a small decoder adds all the levels together and turns them into words.
The news summary model has 9 levels, from 4 codes to 48, so every summary takes 9 passes. The paper counts 8, leaving out the pass that picks the first level. It reports it matching the strongest diffusion model's summary score while generating 31 times faster, on that H100.
Read the article
Sketch
Refine
Finish
Decode
The test setup
One 14-inch MacBook Pro from 2021, with an Apple M1 Pro and 16 GB of memory, CPU only with its GPU unused, one request at a time. Every model got one untimed warm-up run before the clock started.
NCM ran its released news summary model on XSum, a set of BBC articles with one-sentence summaries, and its released story model, trained on TinyStories, a set of simple children's stories. GPT-2 small is about the same size and writes one token at a time, so it shows what NCM's design changes. It was never trained to summarize, so it is a speed reference only, made to write as many tokens as NCM did. Gemma 4 12B, Google's open model, is about 80 times bigger and shows what a much larger model does on the same CPU.
| Model | Size | Ran with |
|---|---|---|
| NCM, news summaries | 88M plus a 61M tokenizer | PyTorch, CPU |
| NCM, short stories | 89M plus a 36M tokenizer | PyTorch, CPU |
| GPT-2 small | 124M | PyTorch, CPU |
| Gemma 4 12B | 11.9B, Q4_K_M | llama.cpp, no GPU device |
Two traps on the way
NCM's code is written for NVIDIA GPUs and loads its checkpoints as Python pickles with weights_only=False, which lets a file run code as it loads. I checked with pickletools that the files hold only tensors, loaded them with weights_only=True, and took out every GPU call.
Gemma was harder to keep off the GPU. Ollama's Gemma 4 builds still put all or part of the model on the Mac's GPU even when told not to, so Gemma ran in llama.cpp with no GPU device at all.
Summaries, where the time went
NCM's 9 steps against GPT-2's 20 to 28 should have made it faster. It was slower, 1.06 s against 0.61 s, so I timed each part of one summary. Almost all of it was the 9 passes. The decoder and the word picking took 0.03 s together.
The reason is the article. Each NCM pass ran all 512 article tokens through the model again, along with the summary codes. GPT-2 reads the article once and keeps the attention keys and values it computed, its KV cache, so each new token costs one small pass.
1.03 s
in the 9 passes
0.01 s
in the decoder
0.02 s
picking the words
512
tokens reread per pass
The fix, read the article once
Inside NCM, the attention mask blocks the article from looking at the summary, so the article's keys and values come out the same in all 9 passes. The fix keeps them from the first pass and runs the next 8 passes on the summary's codes alone. It is about 20 lines in the test script, behind a --cache flag, and NCM's own code stays unchanged.
NCM's code has a cache option of its own, but it is turned off for this model, and it would skip the mask that hides the article's padding. The test patch keeps that mask, which is why the output did not change.
Summaries went from 1.06 s to 0.42 s, faster than GPT-2, and the 100 summaries came out word for word the same, so quality is untouched. On one thread the gain is bigger, from 1.77 s to 0.49 s.
Default, 6 threads
Seconds per summary, same 100 summaries
One thread
Seconds per summary, same 20 summaries
Stories, where coarse to fine pays off
The story model writes from nothing, so there is no article to reread. It wrote a 128-token story in 11 passes and 0.47 s. The paper counts 12 steps here, since it includes the first level, one code, which the released model draws from a stored frequency table with no pass. GPT-2 needed 128 passes and 3.01 s, so NCM wrote about 218 words per second against 31. On one thread it was 0.53 s against 2.64 s.
Gemma 4 12B took 16.4 s to write a 128-token story, 7.7 tokens per second. In llama.cpp's own benchmark on this CPU it reads about 27 tokens per second and writes about 11, because every token goes through almost 12 billion parameters.
One 128-token story
Seconds to write it, lower is better
Speed is not quality
Gemma 4 12B is about 80 times bigger than NCM, 11.9 billion parameters against 149 million, and it shows. On the first 20 articles its summaries scored 39.0 on ROUGE-L, a standard score for how close a summary comes to one written by a person, against NCM's 27.1. It took about 25 seconds per summary, most of it spent reading the article.
NCM scored 27.5 on 100 articles, close to the paper's 28.0, so the laptop did not change its quality. But that quality is rough. One story it wrote reads "One day, a little dog named Max went for a walk. He had a big big cat named Lily. Max liked to take walks to Lily. Lily would put itch on. leg to bite Max's leg feel and and."
Here is one BBC article, summarized three ways.
A person wrote "A man has appeared in court after firearms, ammunition and cash were seized by police in Edinburgh."
NCM wrote "A man has been arrested in connection with a number of firearms ammunition and ammunition were seized in Edinburgh."
Gemma 4 12B wrote "A 26-year-old man has appeared in court after police seized firearms, ammunition, and a five-figure sum of money during searches in Edinburgh."
What this test is not
It is not an old laptop. The M1 Pro's memory and matrix units are much faster, so an older machine would likely be slower for every model. The one-thread runs show how each model scales with less CPU, not how an old machine performs.
It is not NCM against diffusion models, which is what the paper's speedups compare, and no diffusion model ran here. It is not NCM's long-text model either. The 1,024-token OpenWebText model is listed in NCM's repo but not released yet, so 128-token stories are the longest test possible.
And Gemma ran in different software. llama.cpp is a common way to run it at home, while NCM and GPT-2 both ran in plain PyTorch, so their comparison is like for like.
Run it yourself
The repo has the scripts, the logs behind every number in this post, and a setup script that downloads NCM's code at the tested commit, its two models and the test articles. It runs on macOS and Linux, and on Windows through WSL.
The point
NCM runs on a laptop CPU in about 2 GB, and once the article is read only once, its few-step design beats GPT-2, a one-token-at-a-time model of about its size, on both tests. Today's released models are small and their text is rough, so a 12B model like Gemma is still far better at the job, at 35 to 60 times the time. The lesson carries over to any model. Measure one request end to end and look for work that repeats before you call a model slow or fast.
Next-Concept Modeling is research by Hermann Kumbong and coauthors at Stanford University and Together AI. This is an independent test, not affiliated with or endorsed by them, Apple, Google or OpenAI. Gemma is provided by Google under the Gemma terms of use.