Mac Mini M4에서 ollama를 200% 활용하는 최적화 아키텍처
네이티브 API 연동부터 프록시 컨텍스트 제어, 영구 상주(Warm-up) 설정까지
핵심 요약
- ollama 네이티브 API(
/api/chat)를 사용해야 안정적이다 — OpenAI 호환 API는 불안정했다 - 프록시 서버(11435)를 두어
think: false와num_ctx상한을 강제 주입하고, OOM을 방지한다 OLLAMA_KEEP_ALIVE=-1로 모델을 VRAM에 영구 상주시키면 응답 지연이 1초 이내로 단축된다
배경
Mac Mini M4 32GB를 구매한 가장 큰 이유는 AI 에이전트의 LLM을 로컬에서 24시간 비용 없이 구동하기 위해서였다. 하지만 단순 설치만으로는 끝나지 않았다. API 방식 선택, 컨텍스트 창 매핑, VRAM 관리 프록시, 모델 상주 설정 등 튜닝할 요소가 산더미였다.
본문
ollama 프로바이더 기본 설정
{
"models": {
"providers": {
"ollama": {
"baseUrl": "http://127.0.0.1:11435",
"apiKey": "ollama-local",
"api": "ollama",
"models": [{
"id": "qwen3.5:9b",
"contextWindow": 131072,
"maxTokens": 4096,
"reasoning": false
}]
}
}
}
}
설계 포인트:
- api: "ollama": 네이티브 API 사용 필수. OpenAI 호환 API는 파라미터 무시 및 스트리밍 끊김 불안정성이 있었다
- baseUrl 포트 11435: 기본 11434가 아닌 이유는 커스텀 프록시를 거치기 때문
- contextWindow 수동 명시: 생략하면 보수적 기본값이 적용되어 모델 잠재력이 제한된다
- reasoning: false: Thinking 모드는 응답 시간을 2~3배 지연시킨다
커스텀 프록시(ollama-proxy.py)
Gateway (:18789) → ollama-proxy.py (:11435) → ollama (:11434)
think: false강제 주입: 모든 요청을 가로채 불필요한 연산 지연 원천 차단num_ctx상한 제어: 32GB 환경에서 128k 컨텍스트를 꽉 채우면 OOM으로 시스템이 멈춘다. 안전 임계값 초과 시 강제로 값을 낮춘다
영구 상주와 환경 변수 튜닝
OLLAMA_KEEP_ALIVE=-1 # VRAM 영구 상주 (기본값 5분 언로드 방지)
OLLAMA_FLASH_ATTENTION=1 # Apple Silicon 가속 (10~15% 향상)
OLLAMA_KV_CACHE_TYPE=q8_0 # KV 캐시 8비트 양자화 (메모리 절약)
KEEP_ALIVE=-1이 핵심이다. 기본값은 5분 단위 언로드이므로, 30분마다 도는 Heartbeat 시 매번 15~30초 로딩 지연이 발생한다.
부팅 시 자동 Warm-up
#!/bin/bash
sleep 30 # OS 안정화 대기
curl -s -X POST http://localhost:11434/api/generate \
-d '{"model": "qwen3.5:9b", "prompt": "hi", "stream": false}' > /dev/null
curl -s -X POST http://localhost:11434/api/embeddings \
-d '{"model": "nomic-embed-text", "prompt": "warmup"}' > /dev/null
echo "ollama warmup complete: $(date)"
Mac이 켜지면 30초 뒤에 LLM과 임베딩 모델이 VRAM에 자리 잡고 즉각 명령을 대기한다.
시행착오 / 주의사항
초기에 qwen3.5:35b-a3b(MoE, 26.3GB)를 사용했으나 32GB 램에서 여유 메모리가 6GB 미만으로 떨어지자, Gateway와 프록시 등 필수 프로세스가 OOM Kill되었다. 안정성을 위해 qwen3.5:9b(Dense, 9.2GB)로 마이그레이션했다.
| 항목 | 35B (MoE) | 9B (Dense) |
|---|---|---|
| 정확도 | 100% (15/15) | 87% (13/15) |
| VRAM 점유 | 26.3GB | 9.2GB |
| 토큰 속도 | 18.3 tok/s | 13.5 tok/s |
9B의 복잡한 분기 처리 약점은 '1 프롬프트 = 1 동작' 원칙을 엄격히 적용하여 시스템적으로 보완했다.
마무리
이 모든 최적화의 이유는 비용이다. Heartbeat 월 1,080회, 매일 Reflect, 수시 임베딩, 24시간 모니터링 — 클라우드 API로 처리했다면 매월 수십만 원이었을 것이다. 96만 원 Mac Mini M4의 하드웨어 투자는 5~6개월 만에 100% 회수되었다. 클라우드의 지능과 로컬의 무한한 체력을 결합하는 것이 가장 이상적인 하이브리드 AI 에이전트 시스템이다.
댓글
댓글 쓰기