Apple Silicon macOS VM에서 llama.cpp 추론 최대 16배 빠르게 만들기
Apple Silicon and macOS VMs: Faster LLM Inference with llama.cpp
TL;DR Highlight
VM 안 Metal 기능 응답을 바꿨더니 llama.cpp가 최대 16배 빨라졌다
Who Should Read
Apple Silicon Mac의 macOS VM(Lume 등) 안에서 llama.cpp로 로컬 LLM을 돌리는데 속도가 너무 느려 고민인 개발자
Core Mechanics
- VM이 GPU 성능을 낮게 보고했다
- macOS 게스트의 가상 GPU는 Apple family 5 수준, threadgroup 메모리 32KB, SIMD-group matrix 미지원으로 응답했다.
- llama.cpp는 이 응답을 보고 느린 커널을 골랐다.
- 프로세스 단위 shim으로 응답만 바꿨다
- shim(앱과 API 사이에 끼우는 호환 계층)이 Apple family 9 응답과 threadgroup 메모리 64KB로 바꿔 준다.
- 그러면 SIMD-group reduction, matrix, bfloat16 경로가 켜진다.
- TinyLlama 1.1B는 11~16배 빨라졌다
- M1 Ultra에서 같은 stock VM 대비 프롬프트 처리 11.08×, 토큰 생성 16.36×다.
- 베어메탈 대비 프롬프트 처리 98.25%, 생성 72.06%다.
- Gemma 4 12B와 30B 모델에서도 효과가 있었다
- Gemma 4 12B QAT Q4_0은 stock VM 대비 프롬프트 7.20×, 생성 14.54×이고 베어메탈 대비 99.59%, 94.82%다.
- Muse Glimmer 30B Q4_K-M(64GiB 게스트)은 stock VM 대비 프롬프트 7.55×, 생성 8.87×다.
- 일반적인 llama.cpp 속도 향상은 아니다
- 비교 대상은 같은 stock VM이고 베어메탈 Mac에서는 빨라지지 않는다.
Community Reactions
- MLX는 Metal3 응답 때문에 문제가 됐다
- 원문 글에 따르면 ablation 중 MTLGPUFamilyMetal3를 올리자 MLX가 가상 GPU에서 쓸 수 없는 residency set을 요청했다.
- 그래서 배포용 shim은 Apple family 값만 바꾼다.
- 제목이 일반 속도 향상처럼 읽힌다는 의견
- 댓글에서는 이 글이 모든 Apple Silicon의 llama.cpp 가속이 아니라 VM 안의 커널 선택 문제를 고친 것이라는 지적이 나왔다.
- 비교 기준이 stock VM이라 제목이 헷갈렸다는 반응도 있었다.
- 왜 VM이 낮은 프로파일을 보고하는지 궁금하다는 의견
- 댓글에서는 Virtualization.framework가 호스트 GPU의 전체 기능을 왜 보고하지 않는지 글이 설명하지 않는다고 했다.
- 다른 칩 결과와 모델 크기에 대한 아쉬움
- 댓글에서는 M1 Pro나 M3 Pro 결과가 있는지 묻는 질문이 있었다.
- TinyLlama 1.1B만으로는 설득력이 약하다는 반응도 있었다.
How to Apply
- VM 안에서 capability probe부터 돌리기
- 오늘 Lume VM이 있으면 저장소의 libs/lume/metal-capability-shim에서 build.sh와 verify.sh를 실행한다.
- stock 상태에서 Apple family 응답이 5인지 먼저 확인한다.
- 같은 모델로 stock과 unlocked를 번갈아 벤치마크하기
- llama-bench를 -p 512 -n 128 -r 10 옵션으로 두 번 돌려 median을 비교한다.
- 호스트 직접 실행 결과도 같이 재서 베어메탈 대비 비율을 본다.
- 추론 서버에만 LaunchAgent로 shim 주입하기
- 장기 실행 서버는 해당 워크로드 환경에만 DYLD_INSERT_LIBRARIES를 설정한다.
- 로그인 세션은 stock으로 두고, 문제가 생기면 환경변수를 지우고 재시작해 롤백한다.
- macOS 업데이트마다 재검증하기
- 호스트와 게스트 버전 조합을 바꿀 때마다 probe와 벤치마크를 다시 돌린다.
- 결과가 나오면 칩·버전·워크로드를 담아 이슈로 공유한다.
Try It
# 셸(호스트 Mac). 원문 절차 그대로, my-vm과 경로는 바꿔 쓰기
cd libs/lume/metal-capability-shim
./Scripts/build.sh
./Scripts/verify.sh
lume stop my-vm
defaults write com.apple.gpusw.ParavirtualizedGraphics ForceUnrestrictedDeviceFeatureLevel -bool true
lume run my-vm
# 게스트에 dylib과 probe를 복사한 뒤 실행
lume ssh my-vm "DYLD_INSERT_LIBRARIES=/path/to/LumeMetalCapabilities-arm64.dylib LUME_METAL_APPLE_FAMILY_MAX=1009 /path/to/metal-capabilities 1009"
# 이어서 해 볼 것: 같은 환경변수로 벤치마크
lume ssh my-vm "DYLD_INSERT_LIBRARIES=/path/to/LumeMetalCapabilities-arm64.dylib LUME_METAL_APPLE_FAMILY_MAX=1009 llama-bench -m tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf -p 512 -n 128 -r 10 -t 8 -ngl -1 -o json"Terminology
관련 논문
Mercury 3: 규모를 키운 diffusion LLM, 초당 1,000토큰 이상
Diffusion LLM을 40배 키웠더니 속도 4~8배, 품질은 속도 특화 모델 수준
Timestral: Mistral의 시계열 파운데이션 모델
209M 파라미터 시계열 모델이 3대 벤치마크 1위, CPU에서도 돌아간다
DeepSeek V4.1 Flash 1017 (Max) 성능·속도·가격 분석
DeepSeek V4.1 Flash 1017 Max는 지능 지수 45에 211 tok/s, 입력 $0.30
LLM 프록시를 직접 안 돌리면 무슨 일이 벌어지는지 어떻게 아나
자체 LLM 프록시를 세웠더니 키·모델·캐시 미스를 직접 볼 수 있다
DeepSeek V4.1 Flash 1017: 싼 가격에 1M 컨텍스트를 주는 에이전트용 모델
DeepSeek V4.1 Flash 1017은 입력 $0.05/M, 1M 컨텍스트의 에이전트용 모델
DeepSeek-V4.1-Flash-1017 공개: 더 짧게 생각하고 더 빠르게 일하는 에이전트용 모델
DeepSeek V4.1 Flash 마이너 업데이트로 코딩·에이전트 벤치 점수↑, 실행 시간·출력 길이↓
Llmspeed: 로컬 LLM 속도를 하드웨어 구매 전에 체감해 보는 시뮬레이터
GPU·모델을 고르면 로컬 LLM 속도를 미리 체감하게 해 주는 시뮬레이터