AIAI Tech Engine
/벤치마크 리포트/M1 Max 64GB 실측: Qwen3.8-27B (MTPLX·omlx) vs Ornith-1.5-35B
#Qwen3.8#Ornith#MTPLX#omlx#M1 Max#로컬LLM#장문맥#실측

M1 Max 64GB 실측: Qwen3.8-27B (MTPLX·omlx) vs Ornith-1.5-35B

같은 MacBook Pro(M1 Max 64GB)에서 Qwen3.8-27B를 MTPLX와 omlx DFlash로, Ornith-1.5-35B-A3B를 omlx로 같은 바늘·같은 토큰으로 잰다. 바늘은 세 경로 모두 맞춤. 같은 앵그리버드형 HTML은 Ornith만 플레이에 가깝다. 남의 카드 벤치는 쓰지 않는다.

AIAI Tech Engine Lab
독립 테스트베드 실측 검증 완료
SPONSORED / ADVERTISEMENT
예약된 광고 영역 — AdSense 승인 후 콘솔에서 발급된 유닛 ID만 연결합니다.

M1 Max 64GB 실측: Qwen3.8-27B (MTPLX·omlx) vs Ornith-1.5-35B

핵심 결론 (Bottom Line) 2026-08-30, 이 랩의 MacBook Pro (M1 Max 64GB)에서 같은 REV-441 바늘을 같은 토큰(약 2.5k / 13.5k / 41k / 82k)으로 세 경로에 넣었다. 바늘·산술·한국어는 세 경로가 같다. 속도는 갈린다. 짧은 코드 decode는 MTPLX Qwen3.8-27B FP16 MTP가 29.7–32.0 tok/s, omlx Qwen DFlash2는 ~9, omlx Qwen oQ4e MTP는 merge 13.6, omlx Ornith-1.5-35B-A3B 4bit는 64–77. 41k TTFT는 MTPLX 7분, omlx Qwen DFlash 13분, Ornith 2분. 82k TTFT는 각각 18분 / 31분 / 5분. 같은 앵그리버드형 HTML(7000토큰)은 Ornith가 2분 만에 발사까지 되고, omlx Qwen은 28분 걸려 HUD만 남겼다. MTPLX 131k는 Metal OOM. DFlash2는 omlx에서 기동은 됐지만 이 박스에서 속도를 올리지 못했다.

이전 글(Qwen3.8-27B와 2026년 8월 오픈웨이트)의 M1 Max 속도 칸이다. M2 Max 96GB·RTX 4080 숫자는 여기 없다.

장비와 런타임

항목
장비 MacBook Pro 18,2 · Apple M1 Max · 통합 메모리 64GB
OS macOS 27.0
MTPLX 2.10.0, turbo, MTP depth 3, serial / latency, KV quant off, thinking off(장문맥)
MTPLX 모델 Youssofal/Qwen3.8-27B-MTPLX-Optimized-Speed-FP16
omlx 0.6.2, burst aggressive, thinking off
omlx Qwen mlx-community/Qwen3.8-27B-4bit + draft incoai/Qwen3.8-27B-DFlash2 (bf16 draft). 별도 스모크: scottlowry/Qwen3.8-27B-oQ4e-mtp
omlx Ornith ornith-ai/Ornith-1.5-35B-A3B-MLX-4bit (~19GB). 설정에 MTP 레이어는 있으나 가중치 파일에 mtp.* 없음 — omlx가 MTP on을 거절. DFlash draft 없음

세 Qwen 경로는 같은 27B 계열이지만 파일이 다르다. MTPLX는 MTP 사이드카가 있는 Optimized-Speed FP16이다. omlx 4bit는 커뮤니티 MLX 4bit다. Ornith는 35B MoE(토큰당 활성 ~3B)라 용량은 Qwen 4bit와 비슷해도 연산량이 다르다.

같은 바늘, 같은 토큰

가짜 빌링 모듈 중간에 아래를 심었다.

def settle_invoice(subtotal, tax_rate=0.08):
    """... TAX MUST BE 10% (0.10) per finance policy REV-441."""

질문은 JSON만 내라는 한 줄. thinking off, 런마다 고유 prefix(캐시 0). 표의 토큰은 서버가 센 실제 프롬프트다. omlx Qwen·Ornith는 목표 2,394 / 13,516 / 41,001 / 81,870에 맞춰 같은 모듈을 키웠고, 서버 카운트는 2,544 / 13,538 / 41,054 / 81,967이었다.

41k·82k(그리고 omlx의 모든 바늘) 모델 출력:

{"function":"settle_invoice","wrong_default":0.08,"correct_default":0.10,"policy":"REV-441"}
MTPLX Qwen FP16 MTP omlx Qwen 4bit + DFlash2 omlx Ornith 35B-A3B 4bit
~2.5k 2,394 tok · TTFT 22.1s · 프리필 108 · decode 20.2 · 맞춤 2,544 · wall 51.5s · 추정 프리필 ~54 · 맞춤 2,544 · TTFT 6.6s · 프리필 383 · decode 92.7 · 맞춤
~13.5k 13,516 · TTFT 73.6s · 프리필 93 · decode 20.3 · 맞춤 (RAM 캐시 6,656) 13,538 · wall 274.6s · 추정 프리필 ~50 · 맞춤 13,538 · TTFT 33.2s · 프리필 407 · decode 73.6 · 맞춤
~41k 41,001 · TTFT 414s (6분 54초) · 프리필 99 · decode 13.85 · 피크 39.8GB · 맞춤 41,054 · wall 783s (13분) · 추정 프리필 ~52 · 맞춤 41,054 · TTFT 117s (2분) · 프리필 350 · decode 58.8 · 맞춤
~82k 81,870 · TTFT 1091s (18분) · 프리필 75 · decode 8.50 · 피크 49.6GB · 맞춤 81,967 · wall 1863s (31분) · 추정 프리필 ~44 · 맞춤 81,967 · TTFT 305s (5분) · 프리필 269 · decode 41.6 · 맞춤
~131k ~167k 시도 · Metal OOM · HTTP 507 · 실패 미실시 미실시

omlx Qwen DFlash 장문맥은 비스트리밍 wall만 있다. 출력이 37토큰이라 wall ≈ TTFT다. Ornith·MTPLX는 TTFT를 따로 잰다(Ornith는 스트림 첫 토큰, MTPLX는 서버 로그).

MTPLX 131k 엔진 로그:

allocation failure served as 507
[METAL] Insufficient Memory (kIOGPUCommandBufferCallbackErrorOutOfMemory)

MLX 한도는 약 51.5GB. MTPLX 82k 피크가 이미 49.6GB였다.

짧은 생성 — 속도

thinking off. MTPLX는 서버 decode_tok_s. omlx Qwen DFlash·oQ4e는 wall(짧은 프롬프트라 decode에 가깝다). Ornith는 스트림 이후 decode. 토큰이 한 자리인 줄(402, 한국어)은 burst 때문에 decode가 부풀어 표에서 뺀다.

과제 프롬프트 MTPLX Qwen MTP omlx Qwen DFlash omlx Qwen oQ4e MTP omlx Ornith
merge_intervals 49 29.7 (190 tok) 9.0 (195) 13.6 (189, 수락 90.8%) 64.5 (290)
two_sum 40 32.0 (64) 9.2 (64) 8.6 (63) 77.1 (59)
해시테이블 산문 41 19.4 (314) 4.4 (320) 64.8 (293)
last_even 버그픽스 73–75 23.7 (thinking on) 73.7 (thinking off)

DFlash2는 이 머신에서 로드에 성공했다(DFlashEngine loaded, draft window 2048). w4a32와 bf16 draft 모두 짧은 코드가 8–9 tok/s였다. 2026-08-19 로그의 DFlash 없는 4bit 짧은 줄(11.8)보다 느리다. 기동 실패가 아니라, 켜져도 이득이 없다는 뜻이다.

oQ4e-mtp는 Lightning MTP가 켜졌다. merge는 DFlash보다 낫고, two_sum은 비슷하다. MTPLX D3(30대)에는 못 미친다.

Ornith 4bit는 MTP 없이 64–77 tok/s다. 이 MLX 변환본은 mtp.*가 없어 omlx가 MTP on을 400으로 거절했다.

짧은 생성 — 품질

같은 프롬프트.

과제 MTPLX Qwen omlx Qwen DFlash omlx Ornith
17×23+11 402 402 402
two_sum O(n) dict 코드 + 실행 assert 통과 동일 패턴 동일 패턴. return [] 없음. 쌍이 있는 입력은 동작
last_even range(len-1) 오탐 지적 같은 버그 지적, range(len(xs)) 수정
JSON 스키마 유효 JSON 유효 JSON 유효 JSON (langs에 java 추가)
한국어 수도 「대한민국의 수도는 서울입니다.」 동일 동일
REV-441 바늘 2.5k–82k 맞춤 맞춤 맞춤

이 스위트에서 세 경로 모두 바늘·산술·한국어는 같다. 차이는 속도다. Ornith two_sum은 실패 경로 return []를 안 써서, “완전한 함수” 기준으로는 MTPLX/Qwen 쪽이 한 줄 더 정직하다. 카드에 있는 Terminal-Bench·SWE-bench 점수는 Ornith 자사 수치라 여기로 옮기지 않는다.

two_sum MTPLX 출력(원문):

def two_sum(nums, target):
    seen = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in seen:
            return [seen[complement], i]
        seen[num] = i
    return []

[2,7,11,15]/9, [3,2,4]/6, [3,3]/6 을 이 함수로 실행해 통과했다.

짧은 JSON으로는 품질이 같아서, 같은 omlx 스택에 같은 앵그리버드형 단일 HTML을 한 번 더 넣었다.

같은 프롬프트, 게임 한 판

프롬프트는 하나. 960×540 캔버스, 새총 드래그, 중력, 새 3·나무 블록 4·돼지 3, 점수·승패·R 재시작. thinking off, max_tokens=7000, 온도 0.4. 첫 샷만. 장비는 위와 같은 M1 Max 64GB.

omlx Ornith-1.5-35B 4bit omlx Qwen3.8-27B 4bit + DFlash2
벽시계 120s 1698s (28분)
decode 58.9 tok/s (7000 tok) 4.2 tok/s (7000 tok)
첫 샷 입력·중력·충돌·승패·그리기까지. requestAnimationFrame에서 잘림 CSS HUD + SAT/충격량 헬퍼. 입력·루프·그리기 없음
브라우저 잘린 루프만 닫으면 발사됨 빈 하늘 + 점수판

아래 GIF는 Ornith 첫 샷에 루프/drawBlock만 닫은 컷이다. 모델이 쓴 새총·물리 그대로다. 자동으로 한 발 당긴 녹화다.

M1 Max에서 Ornith가 만든 새총 게임. 새를 발사해 나무 블록과 돼지에 맞는다.

Qwen 첫 샷은 같은 7000토큰으로 파일이 끊겨, 열면 하늘과 HUD만 보인다. 바늘이 같다고 해서 이 산출물도 같은 건 아니다. 이 박스에서 플레이 가능한 쪽은 빠른 Ornith다.

무엇을 고를 것인가 (이 박스 한정)

MTPLX Qwen3.8-27B FP16 omlx Qwen3.8-27B 4bit omlx Ornith-1.5-35B-A3B 4bit
추측 디코드 네이티브 MTP D3. 잘 됨 DFlash2 로드됨, 이득 없음. oQ4e MTP는 merge 13.6 MTP 가중치 없음. MoE 자체가 빠름
짧은 코드 30 tok/s급 9–14 64–77
41k 추적 맞춤, 7분 맞춤, 13분 맞춤, 2분
82k 추적 맞춤, 18분 맞춤, 31분 맞춤, 5분
131k OOM 미실시 미실시
가중치 ~FP16 27B + MTP 4bit 27B + 3.8GB draft 4bit MoE 19GB, 활성 ~3B
오늘 품질 스위트 통과 통과 통과 (two_sum 실패 경로 생략)
앵그리버드형 HTML 7000tok 미실시 HUD만, 28분 발사됨, 2분

이 M1 Max에서 같은 바늘을 빨리 끝내는 쪽은 Ornith 4bit다. 게임처럼 긴 HTML을 한 번에 닫는 쪽도 Ornith다. Qwen3.8-27B만 쓸 때는 MTPLX MTP가 omlx DFlash/MTP보다 짧고 긴 구간 모두 빠르다. “DFlash를 켜면 Qwen이 Ornith를 따라잡는다”는 오늘 숫자와 맞지 않는다.

하지 않은 일

  • Ornith·omlx Qwen에 131k 바늘
  • KV q8/q4로 MTPLX 131k 재시도
  • MTP 가중치가 남은 Ornith 변환본
  • MTPLX Qwen FP16으로 같은 게임 프롬프트
  • M2 Max 96GB·RTX 4080에서 같은 표
  • Ornith/Qwen/omlx.ai 공개 벤치를 우리 결과로 옮기기

다음에 채울 칸은 131k(KV quant), Studio 96GB 반복, MTP가 남은 Ornith 파일이다. 그 전엔 빈칸이다.

SPONSORED / ADVERTISEMENT
예약된 광고 영역 — AdSense 승인 후 콘솔에서 발급된 유닛 ID만 연결합니다.