32GB Mac Mini에서 로컬 LLM 운용 한계와 최적화기

35B→9B 다운그레이드로 시스템 안정성을 확보한 아키텍처 리팩토링 실전기


핵심 요약

  • 35B MoE 모델이 VRAM 26.3GB를 점유하여 여유 메모리 0.1GB → 텔레그램 플러그인이 10분마다 사망
  • 4개 모델 45회 벤치마크 후 qwen3.5:9b 채택 — VRAM 9.2GB로 안정적 운영 확보
  • 9B 모델의 추론 약점은 스크립트 계층으로 보완 — "LLM이 판단 → 스크립트 실행" 구조를 뒤집었다

배경

Mac Mini M4 32GB에서 AI 에이전트를 24시간 운영 중이었습니다. 초기 2주간 정상 작동했으나, 텔레그램 플러그인이 반복적으로 종료되는 장애가 발생했습니다.

원인은 단순했습니다. qwen3.5:35b-a3b 모델이 VRAM 26.3GB를 점유하여 가용 메모리가 0.1GB에 불과했고, Swap 스래싱이 8GB를 초과한 것입니다.

본문

장애 중 발견된 5가지 연쇄 이슈

# 문제 근본 원인 심각도
1 gpt-5.4 Fallback 연쇄 실패 API HTTP 429 4회 연속 High
2 Ollama 0토큰 응답 오류 Thinking 결과가 content로 미인식 Critical
3 KEEP_ALIVE 설정 누락 launchctl reload 시 메모리 상주 리셋 High
4 NUM_CTX 적용 실패 환경변수 미적용, API 파라미터만 허용 Medium
5 서브에이전트 타임아웃 크론(300초) < 에이전트(600초) High

핵심: 추론 모델의 <think> 과정이 OpenAI 호환 API(/v1)에서 무시되어 content: ""만 전달. Gateway가 모델 장애로 오판하여 불필요한 Fallback 발동. → 네이티브 API(/api/chat)로 전환하여 해결.

벤치마크: 4개 모델, 45회 테스트

모델 정확도 VRAM 속도 Free RAM 판정
qwen3.5:35b-a3b 45/45 26.3GB 18.3 0.1GB ❌ 메모리 한계
qwen3:30b-a3b 42/45 20.4GB 37.7 12.0GB ❌ thinking 제어 불가
qwen3.5:9b 39/45 9.2GB 13.5 23.0GB ✅ 채택
deepseek-v2:16b 33/45 19.0GB 57.1 13.0GB ❌ 정확도 미달

9B 모델의 약점을 스크립트로 보완

설계 원칙의 변화: LLM이 판단 → 스크립트가 실행 에서 스크립트가 판단 → LLM은 지시만 실행 으로 전환.

9B 모델의 조건 분기 취약점을 상위 Python 스크립트에서 if/else 로직으로 선처리한 뒤, LLM에는 단방향 지시만 전달하는 구조로 리팩토링했습니다.

9B 모델 전용 운영 5계명: 1. 단일 책임 — 멀티스텝 지시 금지 2. 조건 분기 배제 — if/else는 스크립트로 3. 대용량 파일 직접 전달 금지 — 8KB 이상은 section-extract.py 경유 4. 명시적 도구 호출 — "수정하라" 대신 "write 도구를 호출하여 덮어써라" 5. 반환 규격 강제 — UPDATED 또는 SKIP 문자열만 반환

전환 결과

지표 이전 (35B) 이후 (9B)
플러그인 비정상 종료 10분당 1~2회 0회 (무중단)
Free RAM 0.1GB 6~8GB
Swap 메모리 8.0GB+ ~2.0GB
모델 전환 수정 파일 - 33개

시행착오 / 주의사항

  • 벤치마크 점수는 '독립 실행' 전제의 환상입니다. 35B가 만점이었지만 운영 환경에서는 가장 위험한 이웃이었습니다.
  • 모델 전환은 파일 교체가 아닌 시스템 리팩토링입니다. 33개 파일 수정이 필요했습니다. 초기 설계부터 모델 의존성을 추상화해야 합니다.
  • MoE 모델의 다운로드 크기와 VRAM 점유는 60% 이상 차이날 수 있습니다.

마무리

10분마다 죽는 천재 에이전트보다, 약간 느리더라도 24시간 지시를 완수하는 시스템이 인프라로서 더 큰 가치를 갖습니다. 모델 크기를 줄여 안정성을 확보하고, 지능의 하락분은 스크립트 로직으로 상쇄하는 것이 제한된 하드웨어 환경의 핵심 전략입니다.

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"