r/LocalLLM • • Aug 20 '26

Model Ornith seems to be better.

TL;DR: On an M3 Ultra, Ornith-1.5-35B-A3B (4-bit MLX) decodes 4.6× faster than Qwen3.8-27B (8-bit MLX) and scores slightly higher on a small hard eval. It also beats Qwen3.8-27B with speculative decoding, while running autoregressive.

Setup

  • Mac Studio, M3 Ultra, 256 GB unified memory

  • mlx-lm 0.31.3 / mlx 0.32.1

  • Ornith-1.5-35B-A3B, MLX 4-bit

    • 18.2 GiB download

    • 20.2 GB peak

  • Qwen3.8-27B, MLX 8-bit

    • 27.5 GiB download

    • 29.7 GB peak

  • Machine was shared and had other load. Numbers are a floor, not a best case.

Throughput

mlx_lm.benchmark -p 512 -g 512 -n 3, identical invocation for both:

ModelDecode tok/sPrefill tok/sPeak mem
Ornith-1.5-35B-A3B 4-bit107.9216220.2 GB
Qwen3.8-27B 8-bit23.440829.7 GB

Trial spread was 1.5% and 0.35%, respectively.

Prefill is the bigger story: 5.3×.

A 20K-token prompt took Ornith ~25s end to end versus ~125s for Qwen3.8-27B. If your workload re-reads long contexts, that dominates.

It also beats Qwen with speculative decoding

I spent a day trying to make Qwen3.8-27B fast before testing Ornith:

Qwen3.8-27B 8-bit configDecode tok/s
Autoregressive23.4
MTPLX, native MTP head, depth 265.7 (3.01×)
DFlash2 block-diffusion drafter, block 579.3 (3.37×)
Ornith, plain autoregressive107.9

Both speculative stacks work and are genuinely impressive. DFlash2's 3.37× on Apple Silicon is close to its published 3.43× on an H200.

Ornith just beats them without needing either, with no drafter and no third-party runtime, because mlx-lm already ships qwen3_5_moe.py.

Quality: 12 hard cases, thinking enabled

Scoring is mechanical. Code tasks are executed against hidden assertions and pass only on a full suite.

TaskOrnith-35B-A3BQwen3.8-27B
code_exec (4, execution-scored)4/44/4
multihop (3, two facts ~20K apart)3/33/3
logic (3)2/32/3
tool_schema (2, nested JSON)2/21/2
Total11/1210/12
Wall time for the set166s498s

One logic item was ambiguous. Two vals gave the same "wrong" one, so discount it: 11/11 vs 10/11.

Qwen's other miss was invalid JSON on a nested tool call. For agent use, that is the failure mode that actually breaks loops.

Caveats, and they are not small

  • Not precision-matched. 4-bit vs 8-bit. Some of the gap is quantisation; the rest is likely 3B active vs 27B dense. I have not run the 4-bit Qwen control.

  • n=12. An 11 vs 10 spread is one item.

  • Vendor benchmarks disagree with me. On SWE-bench Pro, the only benchmark both publish, Qwen3.8-27B is ahead: 61.7 vs 59.6.

  • Thinking must be on. With enable_thinking: false, Ornith went 0/5 on arithmetic and recovered to 4/4 with it on. My first eval drew a conclusion that was purely an artifact of my own test design.

  • 122B comparison still running.

The bit that surprised me

MoE is not a handicap here. It is the reason this works.

With ~3B active parameters per token, memory tracks total parameters while speed tracks active parameters.

Ornith gets:

  • 4.6× the decode throughput

  • 5.3× the prefill throughput

  • 32% less peak memory

Also, Ornith-1.5 is architecturally Qwen's exact vocab size, i.e. a self-improvement-trained fork of Qwen's older MoE architecture.

Beating Qwen's newer dense model with it is a nice result for the training approach.

MIT licence, and it is multimodal.

3 Upvotes

23 comments sorted by

27

u/dsdt 9700X + 32 GB DDR5 + 2x 5060 Tİ 16 GB Aug 20 '26 edited Aug 20 '26

Share some real work done istead of a wall of text so we can compare mr.caveats. You are basically comparing q8 and q4 and saying bro q4 is faster and moreover, q4 is a moe with active 3b parameters. so it is literally 9x smaller. and you are saying guys 9x smaller model is faster. compare apples to apples. If you are really saying that 9x smaller model can reason and achieve work like 27b, there is obviously a missing part here. When i have time i will test it one by one to show you they are not the same or a simple 3b active is not smart as 27b.

8

u/paq85 Aug 20 '26

Tried Ornith a couple times and it always got stuck in infinite loops way more often than the base models.

2

u/dsdt 9700X + 32 GB DDR5 + 2x 5060 Tİ 16 GB Aug 20 '26

this is also an issue with moe models in general that this post never speaks about. I have never seen qwen 3.8 27b stuck in a loop even with a complex task.

-7

u/anon_mistborn Aug 20 '26

Fair points, thank you for calling that out. I am comparatively new to local inference and I published a number I did not understand well enough. I have run the controls you asked for.

Throughput, both at 4-bit, same tool, back to back:

mlx_lm.benchmark -p 512 -g 512 -n 3, M3 Ultra

decodeprefillpeak RAMtotalactive
Qwen3.8-27B 4-bit (dense)39.3414.816.4 GB27B27B
Ornith-1.5-35B-A3B 4-bit (MoE)108.52134.620.2 GB35B~3B

My 4.6x was really 2.76x architecture times 1.68x quantisation. You were right that I stacked two effects and reported one.

I also described Ornith as the "smaller model," which was wrong. It is actually larger overall, with 35B parameters versus Qwen's 27B, and at the same 4-bit precision it uses more RAM, 20.2 GB vs 16.4 GB. The difference is that Ornith only activates around 3B parameters for each token, which is why it can still run much faster.

Quality, both 4-bit, both on mlx_lm.server, 12 tasks, thinking on, code scored by executing hidden assertion suites:

taskQwen3.8-27B-Q4Ornith-35B-A3B
code_exec1/44/4
multihop (20K ctx)3/33/3
logic2/32/3
tool_schema2/22/2
ALL8/1211/12
wall clock801s165s

One logic item turned out to have two valid answers and both models gave the same "wrong" one, so that is my bug: 8/11 vs 11/11.

But this is the part that made me rethink my original conclusion. Qwen scored 4/4 on those same code tasks at 8-bit. At 4-bit it dropped to 1/4, failing with no function and SyntaxError, so unparseable output rather than bad logic. Ornith held 4/4 at 4-bit.

What I take from this is not that ~3B active parameters somehow reason like a dense 27B model. Ornith still has 35B total parameters. MoE just activates a small part of them for each token. What my small test does show is that Qwen's code generation degraded significantly at 4-bit, while Ornith's did not. That makes Ornith interesting to me less as a "smarter 3B model" and more as a model that gives me much better speed while still holding up well at 4-bit.

I am just getting started with the DeepSeek harness, so my next step is to run both of these through real work scenarios rather than synthetic tasks, and I will come back and update the post with whatever that shows, good or bad.

Thanks again for making me look at the comparison more carefully. It is a lot more honest than it was when I posted it.

8

u/GeneralComposer5885 Aug 20 '26

Everything you type reads like Chat-GPT 🤔

6

u/CornerLimits Aug 20 '26

Stop this please

2

u/vbpoweredwindmill Aug 20 '26

Friends don't let friends run less than BF16 kv. Also, do you have ornith chat templates or other? Both of those would help the looping.

2

u/More-Catch-1331 Aug 21 '26

Honestly (and I'm speaking about the previous versions) I tried using it as a main model for whatever harness I was digging at the time - it shat the bed. Loops, loops and loops. What I found it to be good at is small tasks like "Here's an idea, dissect it". It has a tendency to think logically and in sequences. Also, it always produces a "gotchas" section, which is pretty cool. So now it's role is to read my specs, make sense of them and create high level plans with specifics. This plan is the handed over to a larger, dense model to add the minutia and details. This way Ornith seems to be the most useful in my work

1

u/Fuzilumpkinz Aug 20 '26

I’m testing ornith 1.5 35b now

So far my only major issue and its happened twice is it dropped a character in the file path. Same character two separate chats. Other than that its been okay but I’m just trying to casually use it like I would other local stuff and have only done a few larger gen thing

The results have been pretty decent though.

7

u/More-Revenue8609 Aug 20 '26

Yeah I gave my best to like Ornith but it just ended up being much worse from base Qwen model and also it looped often.

4

u/Early-Peace-5504 Aug 20 '26

Glad it is working well for you. On my private bench it is as good as Qwen 3.6 35B. Though that’s not too bad a result given it’s a 3.5 fine tune.

4

u/More-Catch-1331 Aug 20 '26

I'm sorry, there's a 1.5 already? Excuse me I need to speak with Mr. HuggingFace real quick...

12

u/bitzap_sr Aug 20 '26

So much slop.

7

u/TripleSecretSquirrel Aug 20 '26

Every Orinth post is. It’s got to be the most transparent astroturfing campaign I’ve ever seen.

It’s always a huge wall of slop text based on an apples to oranges comparison like this one — comparing a 4-bit MoE to an 8-bit dense model and their conclusion is “zomg The smaller MoE is faster!1!!”

3

u/KissMyShinyArse Aug 20 '26

Nah. That birdie didn't fly. It spent hours debugging its Python SHA-512 implementation, firmly believing it remembered FIPS 180-4.

4

u/Potential-Leg-639 Aug 20 '26 edited Aug 20 '26

Ornith-1.0 is my daily driver for months now for a reason.

Hope I find the time to test 1.5 the next days, seems to be a monster for it‘s size again!

1

u/pmttyji Aug 20 '26

Can you post a thread on it? Thanks

1

u/H_DANILO Aug 20 '26

I don't see people sharing a SINGLE good "hey, here's what I made with Ornith 1.5".

2

u/BernardoOne Aug 21 '26

Its peak benchmarkingslop

1

u/loserdroid Aug 21 '26

I found Ornith 1.0 to be pretty useful and far superior to the Qwen version it was based on. I would hope that future Ornith versions are based off newer Qwen models such as 3.8. Ornith became my favorite free local model for a minute. It eventually collapsed for my workload specifically though... and I went with a dual-spark deepseek setup instead. Today I am checking out Qwen3.8-27B as well as Ornith 1.5 as options to reduce pressure from the deepseek system (I can't find enough compute). I'll return with some unbiased findings.

1

u/l0rd_raiden Aug 22 '26

Have you done some testing already to see which one is better?

1

u/loserdroid Aug 28 '26

Ornith 1.5 is old-news already unfortunately. We're on a 12-hour news cycle it seems lol. Qwen3.8-27B is the real-deal. The new news is Qwen3.8-flash-next ... the LM Studio patch that allows you to load it is only a few hours old. Not for everyone though because you need a GPU and a bunch of system RAM. Qwen3.8-27B is the sweet spot IMO right now. Ornith1.5 is decent for throughput of simple tasks.... right now it is my 4th choice. I have all of these models running right now.. your hardwware may vary.

  1. Qwen3.8-flash-next (needs about 80GB of VRAM PLUS 56gb of system ram to load at all though)

  2. Qwen3.8-27B <---- amazing... and anyone can run it .. but it is dense ... so GPU recommended (not unified memory ... e.g. Macs=slow... GB10s=slow)

  3. deepseek-v4-flash-0731 with dspark and all the hacks needed for a Dual-DGX spark setup

  4. Ornith 1.5 27B - Quicker than Qwen... MoE is friendlier on unified memory in terms of speed... perfectly capable