Dory-Beam-4B GGUF
GGUF builds of Dory-Beam-4B and
Dory-Beam-4B-Accurate, for running locally with
llama.cpp. Dory-Beam-4B is NVIDIA's looped Dory1.0-4B, distilled from Reflection's Beam-1.0-501B-A23B, with
Beam's reasoning-effort setting. Pass reasoning_effort = low, medium or high, and it thinks 1.9–4× less
than base Dory. The Accurate variant ties base Dory on every benchmark with 1.8× fewer tokens. See the model repos
for the method and full results.
Real time on an Apple M4 Max with the command below: base Dory (NVIDIA's Q5_K_M) and Dory-Beam-4B at low, default and high effort, on the same MATH-500 problem. Per-token speed is the same for all four, but Dory-Beam finishes in 13–19 s against 53 s, because it writes 2.9–4.2× fewer tokens.
| File | Size | Notes |
|---|---|---|
dory-beam-4b-q5_k_m.gguf |
3.42 GiB | Dory-Beam-4B v2, with reasoning_effort. Same per-tensor policy as NVIDIA's reference Q5_K_M: embeddings and output kept in BF16 |
dory-beam-4b-q8_0.gguf |
3.94 GiB | Dory-Beam-4B v2, standard Q8_0 |
dory-beam-4b-accurate-q5_k_m.gguf |
3.42 GiB | Dory-Beam-4B-Accurate, same policy as above |
dory-beam-4b-accurate-q8_0.gguf |
3.94 GiB | Dory-Beam-4B-Accurate, standard Q8_0 |
Checksums are in SHA256SUMS. The first release's files (v1, without the effort setting) are under the v1 tag.
Run it
Dory needs NVIDIA's llama.cpp fork (ggml-org/llama.cpp#30306)
until it lands upstream. Use revision 3834b4ae1ee6f63b8bf314a07dfb9c45407975b9 of the fork's dory-support
branch or newer. On Apple Silicon it is about 6× faster than the revision pinned in NVIDIA's model card, because a
fix there keeps every layer on the GPU (2 graph splits per token instead of 675). Build it with
NVIDIA's instructions, fetching
that revision instead. Then start the server:
./build/bin/llama-server -m dory-beam-4b-q5_k_m.gguf --alias dory-beam \
--host 127.0.0.1 --port 8080 -ngl 999 -c 16384 -np 1 -b 512 -ub 512 \
-t 1 --threads-batch 1 -fa on -ctk f16 -ctv f16 --no-context-shift \
--jinja --reasoning on --temp 1.0 --top-p 0.95 --top-k 0 --min-p 0 --repeat-penalty 1 \
--override-kv "dory.num_loops=int:2,dory.recurrent_kv_cache_mode=str:per_loop"
Open http://127.0.0.1:8080 for a chat UI, or use the OpenAI-compatible API at /v1. To set the effort per request,
pass it as a chat template argument:
curl http://127.0.0.1:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
"messages": [{"role": "user", "content": "How many positive divisors does 2024 have? Put your final answer within \\boxed{}."}],
"chat_template_kwargs": {"reasoning_effort": "low"}}'
Or set a server-wide default with --chat-template-kwargs '{"reasoning_effort":"low"}', which also covers the chat
UI. Without it, the model uses its default effort.
Always set dory.num_loops explicitly: 2 is the recommended default. The files store 4 as the default, matching
NVIDIA's reference GGUF. One CPU thread and flash attention on were the fastest settings.
Speed
Decode speed on an Apple M4 Max (Metal, median of 3 runs, 16k context):
| 1 loop | 2 loops | 4 loops | |
|---|---|---|---|
| Q5_K_M | 66.8 tok/s | 45.5 tok/s | 27.5 tok/s |
| Q8_0 | 66.6 tok/s | 45.4 tok/s | 27.6 tok/s |
| NVIDIA's base Dory Q5_K_M (same settings) | 64.3 tok/s | 44.0 tok/s | 26.1 tok/s |
These were measured on v1. The architecture is unchanged, and a v2 Q5_K_M check ran at 47.7 tok/s at 2 loops.
Per token, Dory-Beam is as fast as base Dory; its advantage is writing fewer tokens. On MATH-500 it averages
about 1.5k tokens at the default effort and 1.0k at low, roughly 30 and 20 seconds at 2 loops on this machine.
Validation
First 10 MATH-500 problems, Q5_K_M, 2 loops, temperature 1.0, graded on the text after </think>:
| Model and effort | Correct | Mean tokens |
|---|---|---|
Dory-Beam-4B, low |
10/10 | 680 |
| Dory-Beam-4B, default | 10/10 | 923 |
Dory-Beam-4B, high |
10/10 | 1,065 |
| Dory-Beam-4B-Accurate | 10/10 | 1,199 |
- Effort setting: the embedded chat template is byte-identical to the model repo's. llama-server's
/apply-templateconfirms the effort tag reaches only the last user turn, and no tag is added by default. - Perplexity (an excerpt of Alice's Adventures in Wonderland, 3,072 tokens scored, 2 loops): BF16 10.36 ± 0.43, Q5_K_M 10.71 ± 0.45.
- Tensors: all 507 tensor names and shapes match NVIDIA's reference GGUF. Q5_K_M uses the reference per-tensor types: 252 Q5_K, 36 Q6_K and 219 BF16.
Conversion. The original pinned converter does not accept the published checkpoint's config, so
conversion/dory.py came from the fork's commit 57b70d02f084d7640d17260a179ef73616d9a438, NVIDIA's fix for
published checkpoints. The converter at the recommended revision is byte-identical.
License
OpenMDW-1.1, inherited from Dory1.0-4B; a copy is in LICENSE.
Base model © NVIDIA.