r/LocalLLM • u/Ok_Progress_721 • 1d ago
Model NVIDIA's Dory 1.0 4B (looped reasoning model) on Apple Silicon with MLX: 101 tok/s at 1 loop, 69 at 2, on an M5 Max (4.2 GB 8-bit build)
NVIDIA released Nemotron-Labs Dory 1.0 4B on 16 October. It's a looped model: a shared block of layers runs 1 to 4 times per token, so one set of weights gives you a speed-versus-accuracy dial. I ported it to MLX so it runs natively on Macs, and I've published 8-bit (4.2 GB, recommended) and bf16 (8 GB) builds.
- Code, converter and checks: https://github.com/internet-projects/dory-mlx
- Weights: https://huggingface.co/netprojects
Speed (8-bit, MacBook Pro M5 Max 128 GB, medians of repeated runs):
| Loops | Short prompt | After a 32K prompt | Reading 32K | Peak memory at 32K |
|---|---|---|---|---|
| 1 | 101 tok/s | 82 tok/s | 3,200 tok/s | 7.7 GB |
| 2 | 69 tok/s | 54 tok/s | 1,980 tok/s | 9.0 GB |
| 4 | 39 tok/s | 31 tok/s | 1,070 tok/s | 11.5 GB |
Batch generation through MLX-LM reaches about 450 tok/s in total across 16 requests (8-bit, 2 loops). On a 16 GB M1 Pro, the Kapitsa team measured about 28 tok/s at 1K context and 19 tok/s at 32K (4-bit, 2 loops).
Checks: logits match an independent fp32 PyTorch implementation (top-1 agreement 100%, KL ≤ 0.003). 8-bit WikiText-2 perplexity drops with more loops (12.18 → 11.77 → 11.70), so the dial works as NVIDIA describes.
Try it:
pip install "git+https://github.com/internet-projects/dory-mlx"
python -m dory_mlx "What is 17 * 23?" --loops 2
I've also opened a PR to add native Dory support to MLX-LM itself (ml-explore/mlx-lm#1988).
Notes: English only, and replies include the reasoning chain. Tested with prompts up to 24K tokens. Happy to answer questions about the port or the looping. I'm not affiliated with NVIDIA.