Apple Silicon 최신 추론 기술 현황 (2026년 8월 15일)
SOTA Apple Silicon Inference (August 15, 2026)
핵심 요약
Apple Silicon의 추론 최적화 생태계가 파편화되어 성능 저하가 심각하며, 이를 해결하기 위해 커뮤니티 차원의 통합 노력이 필요함.
- 생태계 파편화 — 여러 프레임워크가 최적화 기능을 부분적으로만 지원하여 성능이 저하됨.
- Qwen 모델 문제 — 하이브리드 KV/재귀 상태 구조로 인해 프리픽스 캐싱과 추측 디코딩을 동시에 적용하기 어려움.
- mlx-lm 한계 — 모델 변환 과정에서 MTP 헤드가 제거되어 추측 디코딩 성능이 제대로 나오지 않음.
- 통합 필요성 — 무분별한 포크 생성 대신 기존 오픈소스 프로젝트의 병합과 개선에 집중해야 함.
이 글은 직접 쓴 글이다. 애플 실리콘에서 빠른 추론을 돌려보겠다고 시간을 너무 많이 쏟아부었다. 이 글은 맥에서 로컬 모델을 돌릴 때 최신 상황이 어떤지, 그리고 왜 커뮤니티에서 말하는 만큼 성능이 안 나오는지 궁금한 사람들을 위해 썼다.
TL;DR
지난 2주 동안 애플 실리콘의 추론 최적화 상태를 파고들었는데, 솔직히 소프트웨어 스택이 개판이다. CUDA/NVIDIA에서 최신 Qwen 모델을 돌릴 때 쓰는 온갖 최적화 기술(prefix caching, speculative decoding, paged KV cache, continuous batching, dynamic scheduling, flash attention 등)을 전부 지원하는 프레임워크가 하나도 없다.
CUDA/NVIDIA 쪽은 이런 게 이미 다 성숙해서 사람들이 실제로 쓰는 추론 스택에 다 들어가 있다. 반면 애플 실리콘은 mlx-lm, vllm-metal, 각종 포크 버전, 커스텀 모델 변환 툴 등등에 기능이 파편화되어 있고, 그마저도 스택의 일부만 구현된 경우가 태반이다.
가장 큰 문제는 최신 Qwen 모델들이 하이브리드 KV/recurrent state를 사용한다는 점인데, 이게 prefix caching이랑 speculative decoding을 동시에 쓰기 존나 어렵게 만든다. 설상가상으로 mlx-lm은 모델 변환 과정에서 내장 MTP 헤드를 다 날려버린다. 그래서 speculative decoding을 지원하는 모델을 가져와도 정작 필요한 기능은 다 빠진 채로 변환되는 거다.
내가 테스트해 본 바로는 vllm-metal이 그나마 제대로 된 애플 실리콘 추론 최적화 스택에 가장 가깝다. 기능 하나 빠졌다고 매번 포크 만들지 말고, 이제는 제대로 된 스택 하나를 완성해서 mlx-lm이나 vllm에 업스트림하는 게 맞다고 본다.
긴 버전
지난 2주 동안 이 문제만 파고들었다. 애플 실리콘의 추론 최적화 생태계를 이해하는 데 이렇게까지 오래 걸릴 일인가 싶다. 지금 이 바닥이 얼마나 엉망인지 보여주는 증거겠지. 일단 CUDA용 llama.cpp는 필요한 게 다 들어있고 잘 돌아간다.
레딧의 LocalLLaMA 같은 데 들어가서 "맥에서 이거 어떻게 돌림?" 하고 찾아보면, 세상에 프로젝트 종류만 수천 개고 다들 자기네 게 제일 빠르다고 난리다. 보고 있으면 "도대체 이게 다 뭐야? 왜 이렇게 복잡해? 이걸 다 알아야 한다고?" 소리가 절로 나온다.
처음엔 다들 "LM Studio 쓰면 됨" 하길래 써봤더니, 영 시원찮다. 좀 느리고 버그도 있고 암튼 별로다. 그래서 파고들기 시작하는 거지... 프레임워크 하나하나 다 써보고 테스트도 해보면서 왜 내 맥에서는 남들이 말하는 속도가 안 나오는지 찾아다니는 거다. 내가 딱 이 꼴이었고, 이 글이 이 거대한 똥통을 치우는 데 조금이라도 도움이 됐으면 한다.
추론 최적화에 대한 "배경지식"
이쪽 분야를 잘 모르는 사람들을 위해 설명하자면, 로컬 추론은 크게 '프리필(prefill)'과 '디코드(decode)' 두 단계로 나뉜다.
프리필은 모델이 입력받은 컨텍스트를 처리해서 KV 캐시를 채우는 과정이다. 예를 들어 서버에 10k 토큰짜리 프롬프트를 던지면, 모델이 그 텍스트를 전부 처리해서 대화 내용을 이해한 상태로 만드는 거다.
그다음이 디코드 모드다. 보통 자기회귀(autoregressive) 방식이라 응답이 끝날 때까지 토큰을 하나씩 순차적으로 예측한다.
이 두 단계에는 엄청나게 많은 최적화 기술이 들어간다. prefix caching, paged KV caching, speculative decoding, flash attention, flash decoding, continuous batching, dynamic scheduling 등등. 상황에 따라 이 기술들이 전부 다 중요하다.
다수의 사용자가 쓰는 거대한 추론 서버를 돌리는 상황이라면 당연히 이런 최적화들이 혼자 앉아서 모델이랑 대화하는 것보다 훨씬 중요하겠지. 하지만 내가 말하는 로컬에서 길게 돌아가는 에이전트 환경에서는 '프리픽스 캐싱(prefix caching)'이랑 '스펙큘레이티브 디코딩(speculative decoding)' 이 두 가지가 진짜 핵심이야. 이 두 개 다 안 쓰면 맥에서 로컬 모델 돌릴 때 성능 때문에 무조건 실망하게 될 거다. 프리픽스 캐싱은 프리필(prefill) 단계를, 스펙큘레이티브 디코딩은 디코드(decode) 단계를 도와주거든.

