Apple Silicon 로컬 LLM의 핵심 질문은 “똑똑한 모델”이 아니라 컨텍스트·배치·양자화·동시 세션이 통합 메모리 안에서 버티는 조합입니다. Mac mini M4에서 llama.cpp와 Ollama를 동시에 다루는 2026년용 치트시트입니다.

생성+검색이면 로컬 RAG 청크·임베딩 배치 매트릭스로 인덱서와 채팅 RAM 예산을 먼저 맞추세요. 개요는 LlmMac 홈, 야간 벤치용 머신은 구매 페이지(로그인 없이 플랜 확인 가능).

하드웨어 경계

Mac mini M4의 통합 메모리는 GPU·CPU·NE가 한 풀을 공유합니다. 컨텍스트·KV·배치는 따로가 아니라 한 예산이며, 긴 프롬프트·넓은 배치·병렬 채팅은 활성 토큰만큼 메모리 컨트롤러 부담을 키웁니다. 체감 병목은 TFLOPS보다 가중치·KV 스트리밍에 가깝습니다. ctx를 8k→32k로 늘리면 KV 상주와 Metal 듀티가 바뀌고, Activity Monitor 압력이 오른 채 토큰이 나오면 이미 무릎점입니다—플래시 어텐션 전에 양자·num_ctx·동시 세션부터 줄이세요.

미니는 단일 사용자 추론엔 보통 충분하지만 팬 소음은 경고입니다. 10분 연속 구동으로 수락하고, 1분 벤치 스샷만 믿지 마세요.

GGUF / 양자화 선택

GGUF는 llama.cpp 표준 교환 포맷이고 Ollama도 호환 가중치를 씁니다. 다국어·코드 기본값은 Q4_K_M 또는 Q5_K_M; 메모리가 빡빡하면 IQ 계열이 유리하지만 JSON·표에서 먼저 깨지므로 평가 세트로 검증하세요. MoE는 라우팅 스파이크가 남을 수 있고, 오래된 GGUF+새 템플릿 조합은 “어제 됐는데” 버그를 만듭니다. 리비전·양자·템플릿을 런북에 고정하세요.

# llama.cpp 예시 뼈대(경로·플래그는 빌드에 맞게 조정) ./llama-cli -m ./models/model.Q4_K_M.gguf -c 8192 -b 512 -ngl 99

동시성과 배치 크기

llama.cpp: -c·-b·-ngl로 컨텍스트·배치·Metal 오프로드를 직접 잡습니다. 배치↑는 프리페치↑·피크 RAM↑, 너무 작으면 GPU 미달 사용입니다. ctx 고정 후 {128…1024} 스윕해 RSS가 여유선(24GB+데스크톱이면 8~12GB+ 헤드룸 권장) 아래인 최대치를 고르세요.

Ollama: Modelfilenum_ctx·num_batch·(지원 시) num_gpu, OLLAMA_NUM_PARALLEL로 동시성을 묶습니다. 슬롯마다 KV가 곱해지니 과구독 대신 클라이언트 큐가 안전합니다. 임베딩·인덱싱은 앞선 RAG 글처럼 채팅과 일정을 분리하세요.

관심사 llama.cpp (CLI / 서버) Ollama (데몬 + API) M4 관점 메모
컨텍스트 윈도 -c / --ctx-size; YaRN 맵 지원 시 프롬프트 분할 Modelfile의 PARAMETER num_ctx 또는 풀 기본값 ctx↑ ≈ KV 선형↑; 디스크 GGUF보다 통합 메모리 압력이 본전
프리페치 / 마이크로배치 -b / --batch-size (및 가능 시 -ub) PARAMETER num_batch; 모델 기본값에 캡될 수 있음 TTFT 개선까지 올렸다가 RSS 스파이크 직전에 스톱
GPU 오프로드 Metal로 -ngl 레이어 수 자동; 일부 빌드에서 num_gpu 힌트 부분 오프로드는 병목 이동; E2E 토큰/s로만 판단
동시 채팅 / API RAM이 허용할 때만 다중 프로세스·포트 분리 OLLAMA_NUM_PARALLEL, 클라이언트 측 큐 세션=KV 중복; 과구독보다 큐
대역폭 프록시 토큰/s vs Activity Monitor 메모리; 플래시 어텐션 빌드는 KV 트래픽 완화 신호는 동일; 플래그는 적고 버전 의존 디코드 정지+GPU 공허 구간 → 대역폭·배치 의심

로컬 추론 가동 체크리스트

  • 매니페스트: GGUF명·양자·SHA-256·템플릿·llama.cpp/Ollama 버전.
  • 10분 소크: 콜드·첫 요청·동시 클라이언트 가정, RSS·스왑 로그.
  • 정책: 환경별 num_ctx 상한 + 클라이언트 프롬프트 토큰 캡.
  • 배치·폴백: 선정 -b/num_batch+p95; 압력 60초+ 지속 시 양자↓·ctx↓ 자동.

안정성 FAQ

수 분 뒤 처리량 붕괴? 열·메모리 압축·백그라운드 인덱싱 의심. 병렬↓, Spotlight/Time Machine/Xcode 부하 확인.

Ollama 업데이트 후 지연만? 데몬+blob 동시 변경. 버전 핀; 필요 시 내부 미러.

배치는 항상 크게? 무릎 이후 이득 작고 OOM↑. 배치 상한+거대 시스템 프롬프트는 클라이언트 청킹.

Metal 끄기? 짧은 디버그만. CPU는 용량 추정에 부적합.

팀 공유 한 대? “5×32k ctx”는 비용이 가파름. 큐 또는 두 번째 노드.

요약: ctx·배치·양자·병렬은 한 대역폭 예산의 레버입니다. 정상 상태를 재고 매니페스트를 박제하고, 인덱싱과 채팅 일정을 분리하세요.