Sebastian Christiansen (@CerebralCoding_) header
Sebastian Christiansen (@CerebralCoding_) profile picture

Senior software engineer Automation + applied AI (pharma) Contributor: MLX-Serve, TensorFold, ds4 Local inference · Real hardware · Builders

Joined September 2026
Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)Photo by Sebastian Christiansen (@CerebralCoding_)
Building automation and applied AI systems for pharma. Contributing to local inference projects (MLX-Serve and TensorFold). Obsessed with making models run faster and more reliably on real hardware. Tinkerers and builders — what are you working on? I’d love to connect.
3
25
3,252
Mac vs DGX Spark was always the wrong fight. Run both. oMLX 0.8.0 hands prefill to the Spark and the Mac keeps decoding. M3 Ultra 512GB, 64K token prompt, Qwen3.8 27B: Mac alone: 352 tok/s With a Spark: 1,062 tok/s With 2x RTX A6000: 1,879 tok/s Decode barely moves.
5
13
893
Credit to @jundotkim, chart and details here. The GPU doesn't need to hold the whole model, the Mac does. DeepSeek V4.1 Flash prefill goes 1,085 to 2,412 tok/s with a Spark, decode 44.4 to 45.1. xitter.twitterapi.xyz/jundotkim/status/21209…
oMLX can now use your NVIDIA GPU or DGX Spark as a Prefill Accelerator. github.com/jundot/omlx/relea… All you need is a Mac that can hold the model. A faster NVIDIA GPU or a DGX Spark takes over the prefill, and your Mac keeps decoding at the same speed. - The GPU doesn't need to fit the model. It speeds up as many layers as it can hold. - No RDMA, no Thunderbolt. Just plug in a LAN cable (1GbE works, 2.5GbE recommended). - One docker run on the NVIDIA machine. No oMLX install or SSH needed there. 64K prompt, M3 Ultra 512GB + GPU over 2.5GbE With a DGX Spark - Qwen3.8 27B: 352 -> 1,062 tok/s (+202%) - Qwen3.8 Flash-Next: 1,370 -> 2,715 tok/s (+98%) - DeepSeek V4.1 Flash: 1,085 -> 2,412 tok/s (+122%) - GLM-5.3 Flash: 555 -> 1,076 tok/s (+94%) With 2x RTX A6000 - Qwen3.8 27B: 352 -> 1,879 tok/s (+434%) - Qwen3.8 Flash-Next: 1,370 -> 3,928 tok/s (+187%) - DeepSeek V4.1 Flash: 1,085 -> 1,914 tok/s (+76%) - GLM-5.3 Flash: 555 -> 978 tok/s (+76%) The CUDA helper builds on the great CUDA kernels of TensorFold by @ashhart and mlx-serve by @ddalcu, and would not have been possible without them. Thank you both for sharing them in the open. Also in 0.8.0rc1 - DeepSeek V4.1 with the DSpark drafter: 8 requests decode 73.2 -> 107.9 tok/s (+47%) - Concurrent Request Priority: new prompts start sooner while other responses stream - Affine KV decodes up to 58% faster at long context
There's a new version of this post
1
67
Jensen Huang just resigned, and local AI should be paying closer attention than Wall Street. Under him, Nvidia became one of the biggest open model publishers there is: 650+ open models and 250+ open datasets on Hugging Face. Nemotron ships the weights, the data, and the training recipe. He called open models "the lifeblood of innovation." Wall Street is watching the stock. I'm watching whether the next CEO keeps shipping weights.
10
6
89
3,212
What in the world?!
Jensen Huang has resigned as CEO and President of NVIDIA, effective immediately
1
3
269
Parallel requests on a Mac don't make the work finish sooner. They make the wait fairer. Ollama just merged concurrent generation for MLX. Their own M5 Max numbers, Qwen 3.8 27B, two clients at once: Second client, first token: 13.84s to 9.90s First client, first token: 5.20s to 7.40s Both done: 17.23s to 20.07s Good for two agents sharing one box. Worse if all you care about is total time.
7
21
1,359
Your Mac was never slow at long chats. Your engine kept re-reading them. Qwen 3.8 27B on a 64GB M5 Pro Mac mini, TensorFold: 1.2.6: a follow-up re-reads 24K tokens, 76.8s before the first word 1.2.7: reuses ~34K cached tokens, first word in 0.34 to 1.19s Same box. Same model. Byte identical answers. A lot of "Mac prefill is slow" complaints are really cache misses. xitter.twitterapi.xyz/pratikg/status/2120624…
🚨 JUST IN: TensorFold 1.2.7 makes long Qwen3.8 27B chats near instant 👏 I tested locally on a 64GB M5 Pro Mac mini with Qwen3.8 27B: - Context with earlier reasoning steps dropped (common behaviour in chat apps) - Previous version (1.2.6): follow-up questions would reprocess 24K tokens and take 76.8 s until the answer started streaming - New version (1.2.7): follow-up questions reuse ~34K cached tokens and start streaming in 0.34 to 1.19 s (answers are still byte identical!) - Context including reasoning steps (chat apps that preserve reasoning steps) - Previous version (1.2.6): later questions took 1.35 to 4.04 s until the answer started streaming - New version (1.2.7): later questions start streaming in 0.26 s Nice improvement on TTFT, and decode speed is up a tad as well (same output on the deterministic runs): - Chat without DFlash2: 17.06 --> 17.39 tok/s - Chat with DFlash2: 56.22 --> 57.90 tok/s (3.3x faster than without DFlash2) - Code with DFlash2: 93.79 --> 98.90 tok/s (5.7x faster than without DFlash2) Incredible work @ashxhart and the rest of the community! Long context chats on a 27B model on your desk is already super impressive, having it be near instant and owning the whole stack makes it even nicer 🙌
4
3
1
62
5,766
Yeah let’s ruin that right now
BREAKING: this post will get < 100 impressions
1
222
The most underrated chip in your Mac is not the GPU. LFM3 1.7B on the Apple Neural Engine, LUT6, 1.8GB of weights: 20.5 tok/s at 0.87 W (engine power, not wall). That works out to about 12 Wh per million tokens. An always-on background agent that never touches your GPU. xitter.twitterapi.xyz/BuildWithAJ/status/211…
Hi all, so I'm making @liquidai LFM3 1.7b run on the apple neuranl engine. Mostly so it uses less power, I know the speeds are not comparable. The power numbers are engine only, not wall power. LUT6 is giving some decent numbers 1.8 GB weights 20.5 tok/s decode 0.87 W github.com/AJ-Gonzalez/LoNE
7
10
114
7,958
People keep saying Macs can't prefill. That is an active parameter problem, not a Mac problem. LFM2.5-24B-A2B on a 256GB M5 Ultra, MLX 4-bit: 32K prompt read in 2.6s (12,840 tok/s) 128K prompt to first token in 17.7s 8 requests at once: 639 tok/s total 2B active. For agents that reread huge contexts all day, shop by active params, not total params. xitter.twitterapi.xyz/niklaslenz_ai/status/2…
LFM2.5-24B-A2B reads a 32K-token prompt in 2.6 s on my Mac Studio M5 Ultra 256 GB Mac Studio M5 Ultra: MLX 4-bit, no draft model, copy drafts on, thinking off Decode, code: 226.7 tok/s Decode, prose: 276.4 tok/s Prefill at 32K: 12,840 tok/s First token at 32K: 2.6 s First token at 128K: 17.7 s 8 requests at once: 639.1 tok/s in total Largest context step tested: 131,072 tokens, it fits (prompt filling 95 %) Quant: MLX 4-bit, group size 64, token embedding at 6 bits, 4.53 bpw, 13.6 GB, made by Liquid AI Setup: TensorFold 1.2.5 official release (the recipe's Mac steps build from source), window 131,072 tokens, no draft model Start: the recipe's Mac start command with --parallel 16 and --port 8888 instead of 8080, plus --keep-warm 86400, --host 127.0.0.1 and --no-update-check Speed test: decode median of 2 runs, prefill median of 3 (128K step is 130,048 tokens: median of 4), requests at once: median of 2 rounds, 512 tokens, temperature 0.1, top-k 50, seed 42 Repetition penalty 1.05 from Liquid's model card not sent, server default LFM2.5 is a specialist model for agents on a device, and my tests do not measure that. The Mac was not idle during the tests: my control session, the desktop and a dictation helper ran on it. Recipe page: niklaslenz.com/v2/lfm25-24b-… Recipe and engine by Ash @ashxhart, model and MLX weights by Liquid AI @liquidai.
2
32
3,028
Your 8GB MacBook Air is not too small for a 26B model. turbo-fieldfare runs Gemma 4 26B-A4B in about 2GB of RAM. It keeps a 1.35GB shared core and the KV cache resident, and streams only the experts each token needs from the SSD. 8GB M2 Air: 5.1 to 6.3 tok/s 24GB M5 Pro: 31 to 35 tok/s Custom Swift and Metal, no MLX, no llama.cpp. RAM is a speed setting now, not a ceiling.
11
27
2,624
Stop reading Mac vs DGX Spark benchmarks as hardware fights. They are engine fights. Tom's Hardware, same 256GB M5 Ultra Mac Studio, GLM 5.3 Flash: llama.cpp: 46.3 tok/s decode TensorFold with an MLX build: 94.0 tok/s, still 79.4 at 524K context Same box, double the speed. And on Qwen 3.8 27B with llama.cpp on both, the Mac finished the agent test in just under half the time of one GB10, on 16% less energy. Pick the engine before you pick the box.
21
3
3
91
11,368
Yet another reason to give Zig a try... 😏
Real men manage their own memory
1
8
631
Sebastian Christiansen retweeted
Introducing e-means, an algorithm beating k-means in 10x fewer epochs. With order of magnitude wall-clock speedups, e-means is released in FAISS and needs no hyperparameter tuning beyond k. It is robust to various scales and datasets. Still skeptical ? Just try e-means [1/10]🧵
146
1,191
249
10,037
830,195
The M5 Ultra was never a speed play. It is a memory play. DeepSeek V4.1 Flash with official lossless weights on one 512GB Mac Studio: 65.7 tok/s output with a 128k prompt, mlx-serve defaults, median of 5 runs. No cluster. No requant. One box on a desk. xitter.twitterapi.xyz/ApacheAE/status/212007…
DeepSeek V4.1 Flash 1017 on one Mac Studio M5 Ultra 512 GB, official lossless weights: 65.7 tok/s output with a 128k-token prompt, mlx-serve 26.11.2 defaults. Median of 5 runs, range 62.2–70.0. Other engines and the method below.
8
4
2
94
8,948
Drafter speedups are not a 256 token demo trick. M5 Max, TensorFold, Qwen3.8 27B: 129 tok/s across 162K tokens of long output, against 24 tok/s with drafting off. 30 runs, 2.7K to 8.2K tokens each, three sampling settings. 5x holds when the answers get long. xitter.twitterapi.xyz/defilan/status/2119995…
Last-minute benchmarks on my M5 Max before my talk tomorrow: @ashxhart's TensorFold ran Qwen3.8-27B at 129 tok/s across 162K tokens of long output, 5x the same model with drafting off (24 tok/s). Not a 256-token demo: 30 runs, 2.7K to 8.2K tokens each, three sampling settings. Decode tok/s by workload, from TensorFold's own per-request stats: Agent rewriting a Go file: 231 (up to 359) K8s YAML: 160 Go package with tests: 144 Code review: 104 Prose essay: 69 That's 3x on prose, 6-7x on code and YAML, and 14x when the output copies its input. Sampling barely moved it: 129 / 134 / 125 overall at temp 0, 0.7 and 1.0. Greedy drafted output was byte-identical to undrafted, so the speedup costs no quality. I also checked the outputs. 36/36 K8s objects pass strict schema validation, and the Go file edit builds and passes LLMKube's tests. Weak spots: unit tests written in one shot, and invented numbers in the essay. Check those with any model. In opencode it fixed its own jq errors and shipped a working kubectl plugin in under 2 minutes. Setup: Qwen3.8-27B MLX 4-bit, thinking off, with z-lab's DFlash2 drafter, single stream, 128 GB M5 Max, served by LLMKube's Metal agent. TensorFold 0.3.4.1, because my demo has been pinned since September; 1.2.5 is current. Short templated YAML still hits 227 tok/s; long answers settle lower. Happy to share the script.
3
1
13
1,911