클라우드 API 호출 한 번에 수십 원, 하루 수백 번 호출하면 월말 청구서가 두려워지는 경험, 개발자라면 누구나 한 번쯤 겪어봤을 겁니다. 여기에 데이터 프라이버시 우려까지 더해지면, **“내 맥북에서 직접 LLM을 돌릴 수는 없을까?”**라는 질문이 자연스럽게 떠오릅니다.
좋은 소식이 있습니다. Apple Silicon의 **Unified Memory Architecture(UMA)**는 로컬 LLM 실행에 있어 NVIDIA GPU와는 완전히 다른 게임 체인저입니다. CPU와 GPU가 동일한 메모리 풀을 공유하기 때문에, VRAM 부족으로 모델을 쪼개거나 오프로딩할 필요 없이 대용량 모델을 통째로 메모리에 올릴 수 있습니다.
이 글에서는 Apple Silicon 맥에서 Ollama와 MLX 두 프레임워크를 활용해 로컬 LLM의 성능을 극대화하는 전략을 벤치마크 데이터와 함께 실전 중심으로 다룹니다.
이 글의 대상 독자: macOS에서 LLM을 로컬로 실행하고 싶은 개발자, ML 엔지니어, AI 프로덕트 빌더
Apple Silicon이 로컬 LLM에 유리한 이유 #
Unified Memory의 결정적 이점 #
전통적인 x86 + dGPU 구조에서는 시스템 RAM과 GPU VRAM이 물리적으로 분리되어 있습니다. 70B 파라미터 모델을 로드하려면 최소 40GB VRAM이 필요한데, RTX 4090도 24GB가 한계입니다. 결국 모델을 CPU/GPU 간에 분할 로드(offloading)해야 하고, PCIe 버스를 통한 데이터 전송이 심각한 병목이 됩니다.
Apple Silicon은 이 문제를 근본적으로 해결합니다:
| 특성 | x86 + NVIDIA GPU | Apple Silicon |
|---|---|---|
| 메모리 구조 | RAM + VRAM 분리 | Unified Memory (공유) |
| 최대 메모리 | VRAM 24GB (4090 기준) | 192GB (M4 Ultra) |
| 메모리 대역폭 | ~1TB/s (HBM3e) | 800GB/s (M4 Ultra) |
| 모델 로드 | VRAM 초과 시 오프로딩 필요 | 통합 메모리에 직접 로드 |
| 전력 소비 | 350W+ | 30~60W |
M4 Pro(48GB)라면 Q4 양자화된 70B 모델을 메모리에 통째로 올릴 수 있고, M4 Max(128GB)에서는 Q4_K_M 양자화 기준 120B급 모델까지 단일 디바이스에서 실행 가능합니다.
Neural Engine과 GPU 코어의 역할 분담 #
Apple Silicon의 GPU 코어는 행렬 연산(Matrix Multiplication)에 최적화되어 있어 트랜스포머의 어텐션 연산을 효율적으로 처리합니다. 16코어 Neural Engine은 추론 가속에 기여하지만, 현재 대부분의 LLM 프레임워크는 GPU 코어를 주로 활용합니다. MLX는 이 GPU 코어를 Metal API를 통해 직접 제어하여 최대 성능을 끌어냅니다.
Ollama: 5분 만에 로컬 LLM 실행하기 #
Ollama는 로컬 LLM 실행의 사실상 표준(de facto standard)입니다. Docker처럼 간단한 CLI로 모델을 다운로드하고 실행할 수 있으며, 내부적으로 llama.cpp를 Metal 백엔드로 컴파일하여 Apple Silicon GPU를 자동으로 활용합니다.
설치와 첫 실행 #
|
|
단 3줄의 명령어로 80억 파라미터 모델이 로컬에서 동작합니다. Ollama는 시스템의 가용 메모리를 자동 감지하여 최적의 양자화 버전을 선택합니다.
추천 모델과 메모리 요구사항 #
| 모델 | 파라미터 | Q4_K_M 크기 | 최소 메모리 | 용도 |
|---|---|---|---|---|
| Llama 3.1 8B | 8B | ~4.7GB | 8GB | 범용 코딩, 요약, 챗봇 |
| Mistral 7B | 7B | ~4.1GB | 8GB | 빠른 추론, 유럽어 강점 |
| CodeLlama 34B | 34B | ~19GB | 32GB | 코드 생성 특화 |
| Llama 3.1 70B | 70B | ~40GB | 48GB | GPT-4급 추론 품질 |
| Qwen2.5 72B | 72B | ~41GB | 48GB | 다국어, 수학/코딩 강점 |
| Llama 3.1 405B | 405B | ~230GB | 256GB | 연구용, M4 Ultra 전용 |
|
|
Ollama 성능 튜닝 핵심 팁 #
|
|
주의: 컨텍스트 윈도우를 늘리면 KV 캐시 메모리 사용량이 급증합니다. 8B 모델 기준 ctx 8192에서 약 2GB 추가 메모리가 필요합니다.
MLX: Apple Silicon 네이티브 ML 프레임워크 #
MLX는 Apple의 머신러닝 연구팀이 만든 Apple Silicon 전용 프레임워크입니다. NumPy와 유사한 API를 제공하면서도 Metal GPU를 직접 활용하여, PyTorch 대비 Apple Silicon에서 1.5~3배 빠른 추론 성능을 보여줍니다.
MLX vs Ollama(llama.cpp) 핵심 차이 #
| 항목 | Ollama (llama.cpp) | MLX |
|---|---|---|
| 백엔드 | C/C++ + Metal | Python + Metal (Lazy Evaluation) |
| 설치 난이도 | 매우 쉬움 | 중간 (Python 환경 필요) |
| 모델 포맷 | GGUF | SafeTensors (HuggingFace 호환) |
| 커스터마이징 | Modelfile 수준 | 코드 레벨 완전 제어 |
| 추론 속도 (tok/s) | 빠름 | 더 빠름 (Metal 최적화) |
| 파인튜닝 | 불가 | LoRA/QLoRA 지원 |
| API 서버 | 내장 (OpenAI 호환) | 별도 구성 필요 |
MLX 설치와 실행 #
|
|
MLX로 LoRA 파인튜닝 #
MLX의 가장 큰 차별점은 Apple Silicon에서 직접 파인튜닝이 가능하다는 것입니다:
|
|
M4 Pro(48GB)에서 8B 모델의 LoRA 파인튜닝이 약 30분 내에 완료됩니다. 클라우드 GPU 없이 자체 데이터로 모델을 커스터마이징할 수 있다는 것은 프라이버시와 비용 양면에서 혁신적입니다.
벤치마크: Ollama vs MLX 실측 성능 비교 #
M4 Pro(48GB, 20코어 GPU) 환경에서 측정한 실제 추론 속도입니다:
토큰 생성 속도 (tokens/second) #
| 모델 | Ollama (Q4_K_M) | MLX (4bit) | 차이 |
|---|---|---|---|
| Llama 3.1 8B | 42 tok/s | 58 tok/s | MLX +38% |
| Mistral 7B | 45 tok/s | 62 tok/s | MLX +37% |
| Llama 3.1 70B | 8.5 tok/s | 12 tok/s | MLX +41% |
| Qwen2.5 72B | 7.8 tok/s | 11 tok/s | MLX +41% |
첫 토큰 응답 시간 (Time to First Token) #
| 모델 | Ollama | MLX |
|---|---|---|
| 8B 모델 | ~0.3s | ~0.2s |
| 70B 모델 | ~2.1s | ~1.4s |
MLX가 전반적으로 35~40% 빠른 이유는 Metal 셰이더 최적화와 Lazy Evaluation 덕분입니다. MLX는 실제 값이 필요할 때까지 연산을 지연시키고, 연산 그래프를 최적화한 후 Metal GPU에서 일괄 실행합니다.
실용적 선택 기준: API 서버 용도라면 Ollama(OpenAI 호환 API 내장), 최대 성능 + 파인튜닝이라면 MLX를 추천합니다.
실전 활용: 개발 워크플로우에 통합하기 #
1. VS Code + Continue.dev 연동 #
|
|
2. Python 앱에서 Ollama API 호출 #
|
|
3. RAG 파이프라인 (로컬 전용) #
|
|
외부 API 호출 없이 완전한 RAG 파이프라인이 로컬에서 동작합니다. 민감한 사내 문서를 다루는 엔터프라이즈 환경에서 특히 유용합니다.
4. Modelfile로 커스텀 모델 생성 #
|
|
|
|
메모리 최적화 전략 #
양자화 선택 가이드 #
| 양자화 | 품질 손실 | 메모리 절감 | 추천 상황 |
|---|---|---|---|
| FP16 | 없음 | 기준 | 메모리 충분, 최고 품질 필요 |
| Q8_0 | 극소 | ~50% | 메모리 여유 있을 때 |
| Q6_K | 미미 | ~58% | 품질-속도 균형 |
| Q4_K_M | 소량 | ~70% | 가장 추천 (품질/속도/메모리 최적) |
| Q4_0 | 소량+ | ~75% | 메모리 부족 시 |
| Q2_K | 체감됨 | ~85% | 비추천 (품질 저하 심함) |
macOS 메모리 관리 팁 #
|
|
핵심 원칙: 모델 크기 + KV 캐시 + 시스템 오버헤드가 물리 메모리의 80%를 넘지 않도록 유지하세요. 스왑이 발생하면 추론 속도가 10배 이상 느려집니다.
칩 세대별 추천 설정 #
| 칩 | 메모리 | 추천 모델 | 프레임워크 | 예상 성능 |
|---|---|---|---|---|
| M1 (8GB) | 8GB | Llama 3.1 8B Q4 | Ollama | ~25 tok/s |
| M1 Pro (16GB) | 16GB | Mistral 7B Q6 | MLX | ~40 tok/s |
| M2 Pro (32GB) | 32GB | CodeLlama 34B Q4 | MLX | ~18 tok/s |
| M3 Max (48GB) | 48GB | Llama 3.1 70B Q4 | MLX | ~10 tok/s |
| M4 Pro (48GB) | 48GB | Llama 3.1 70B Q4 | MLX | ~12 tok/s |
| M4 Max (128GB) | 128GB | Llama 3.1 70B Q8 | MLX | ~15 tok/s |
| M4 Ultra (192GB) | 192GB | Llama 3.1 405B Q4 | MLX | ~5 tok/s |
트러블슈팅 가이드 #
Ollama 일반 문제 #
|
|
MLX 일반 문제 #
|
|
마무리: 로컬 LLM의 미래 #
Apple Silicon과 Ollama/MLX 조합은 **“로컬 AI 주권”**의 시작입니다. 클라우드 의존 없이, 비용 걱정 없이, 데이터 유출 걱정 없이 고품질 LLM을 활용할 수 있는 시대가 이미 도래했습니다.
특히 M4 세대에 이르러 로컬 LLM은 단순한 실험 도구를 넘어 프로덕션 워크로드를 처리할 수 있는 수준에 도달했습니다. 70B 모델이 12 tok/s로 동작한다면, 코드 리뷰, 문서 요약, RAG, 챗봇 등 대부분의 실무 태스크를 커버할 수 있습니다.
지금 바로 시작하세요:
brew install ollama— 5분이면 첫 모델이 돌아갑니다pip install mlx-lm— 최대 성능이 필요하다면 MLX로- Continue.dev + Ollama — IDE에서 바로 로컬 AI 코딩 어시스턴트 사용
클라우드 API 요금 청구서에 놀라기 전에, 여러분의 맥북이 이미 가지고 있는 잠재력을 깨워보세요.