Skip to content

LOCAL_LLM_HYBRID_ROUTING

playground edited this page May 27, 2026 · 4 revisions

Mac Studio 로컬 LLM + Claude Opus 하이브리드 라우팅 전략 — 논의 자료

⚠️ 이 문서는 논의·검토용 자료입니다. 현재 설계 결정에 반영된 내용이 아니며, 7개 설계 deliverable의 불변식을 바꾸지 않습니다. 모델 선택(claude-opus-4-7 vs claude-sonnet-4-6)은 SYSTEM_DESIGN §15에서 미결로 남아 있으며, 이 문서는 로컬 LLM을 세 번째 후보로 추가 검토하는 메모입니다.

작성일: 2026-05-27 / 모델 조사 기준: 2026-05-27

현재 orchestrator는 Anthropic Claude SDK를 통해 claude-opus-4-7 또는 claude-sonnet-4-6을 호출한다 (SYSTEM_DESIGN §15, OSS_INTEGRATION §3.3). "Mac Studio 장비가 확보되어 있다면 로컬 LLM을 도입해 비용·지연·오프라인 가용성을 개선할 수 있는가"를 검토한 메모. HuggingFace Open LLM Leaderboard, LMSYS Chatbot Arena, 각 기관 기술 보고서를 기반으로 후보군을 정리했다.


1. Mac Studio 하드웨어 역량

Apple Silicon의 통합 메모리(Unified Memory) 는 CPU와 GPU/Neural Engine이 동일 메모리를 공유하므로, LLM 추론 시 VRAM 병목 없이 전체 RAM을 모델 가중치에 활용할 수 있다. 이것이 동급 가격대 Windows 워크스테이션(RTX 4090, 24 GB VRAM) 대비 로컬 LLM 운영에서 가장 큰 이점이다.

장비 통합 메모리 메모리 대역폭 실용 LLM 크기 상한
Mac Studio M4 Max (128 GB) 128 GB ~546 GB/s 70B Q4~Q6 / MoE 122B active-10B
Mac Studio M4 Ultra (192 GB) 192 GB ~800 GB/s 70B Q8 / MoE 397B active-17B (Q3)
Mac Studio M3 Ultra (192 GB) 192 GB 800 GB/s 동상

런타임 환경 (2026 기준):

프레임워크 특징 권장 용도
Ollama 0.19+ MLX 백엔드 도입, OpenAI 호환 API, Metal 가속 운영 환경 기본
llama.cpp server Metal 백엔드, GGUF 표준, 저수준 튜닝 가능 고성능 튜닝
mlx-lm Apple 자체 프레임워크, 최저 레이턴시 실험·프로토타이핑
MLC-LLM TVM 커널, 긴 컨텍스트(64K~128K) 처리 유리 긴 컨텍스트 필요 시

MoE(Mixture of Experts) 모델 이해: MoE 모델의 메모리 점유는 총 파라미터(total) 기준이지만, 실제 연산(decode 속도)은 활성 파라미터(active per token) 기준이다. 예를 들어 Qwen3.6-35B-A3B는 Q4 기준 ~20 GB를 점유하지만 decode 속도는 3B dense 모델 수준으로 빠르다. 이 특성이 MoE를 로컬 배포에서 매력적으로 만드는 핵심 이유다.


2. 로컬 LLM 후보 목록

2-A. 7B–14B 범위 — 빠른 추론, 단순·루틴 판단 전용

모델 기관 Q4 파일 크기 주요 벤치마크 한국어 도구 호출 특징
Qwen3-8B Alibaba ~5 GB MMLU-Pro ~73.8 est ✅ 119개 언어 thinking mode 지원, Apache 2.0
Qwen3-14B Alibaba ~10 GB Qwen2.5-32B 동급 ✅ 119개 언어 14B 크기로 32B급 성능, Apache 2.0
Phi-4 14B Microsoft ~8.5 GB MMLU 84.8, MATH 80.4% ⚠️ 제한적 수학·과학 특화, 영어 중심
Phi-4-reasoning-plus 14B Microsoft ~8.5 GB MATH 80%+ (GPT-4o-mini 초과) ⚠️ 제한적 R1 스타일 CoT 파인튜닝, MIT
DeepSeek-R1-Distill-Qwen-14B DeepSeek ~8.5 GB MATH-500 ~93%+ 중간 ⚠️ 별도 처리 R1 671B 증류, 추론 특화, MIT
DeepSeek-R1-0528-Qwen3-8B DeepSeek ~5 GB AIME 2024 Qwen3-8B 대비 +10% 중간 ⚠️ 최신 R1 증류, 수학·코딩 강점

이 범위의 포지션: Claude API 가용 상황에서도 latency 우선 단순 분류 작업(zone 진입 의도 파악, 태블릿 인텐트 단순 분기)에 투입 가능. 응답 시간 ≤1초.


2-B. 24B–35B 범위 — 중간 균형: 품질과 속도의 교차점

모델 기관 아키텍처 Q4 파일 크기 주요 벤치마크 한국어 도구 호출 특징
Mistral Small 3.2 24B Mistral AI Dense ~14 GB MMLU 80.5, HumanEval+ 92.9%, Arena Hard v2 43.1 중간 ✅✅ agentic 파이프라인 함수 호출 특화, Apache 2.0
Gemma 3 27B Google Dense ~16 GB IFEval 90.4%, MATH 89.0%, HumanEval 87.8%, MMLU-Pro 67.5, LMArena ELO 1338 ✅ 멀티링구얼 멀티모달(텍스트+이미지), 70B·405B 초과 ELO, Apache 2.0
Qwen3-32B Alibaba Dense ~20 GB Qwen2.5-72B 동급, MMLU-Pro 65.54 ✅ 119개 언어 thinking mode, 32B로 72B급 성능, Apache 2.0
Qwen3-30B-A3B Alibaba MoE (30B/3B active) ~19 GB decode 속도 3B 수준, Apache 2.0
Qwen3.6-35B-A3B Alibaba MoE (35B/3B active) ~20 GB SWE-bench Verified 73.4%, AIME 2026 92.6%, GPQA Diamond 86.0% ✅✅ agentic 코딩 특화 설계, decode ~44 tok/s (M4 Max), Apache 2.0
Gemma 4 26B-A4B Google MoE (26B/3.8B active) ~15 GB 멀티모달, 256K 컨텍스트, Apache 2.0

⭐ Qwen3.6-35B-A3B 주목 이유: Gated DeltaNet 선형 어텐션 + 256 전문가 아키텍처로 ~20 GB 파일에서 AIME 2026 92.6%라는 70B 초과 추론 성능을 달성한다. MoE 구조상 decode 속도가 3B dense 수준이라 응답 속도와 품질이 동시에 우수한 희귀한 사례.


2-C. 70B–72B 범위 — 로컬 실행 가능한 최고 품질 Dense 모델

모델 기관 Q4 파일 크기 주요 벤치마크 한국어 도구 호출 특징
Llama 3.3 70B Instruct Meta ~40 GB MMLU 86.0% (GPT-4o 85.9% 초과), IFEval 92.1% (405B 88.6% 초과), 함수 호출 84.8% ✅ (번역본 약학 1위) ✅✅ instruction following 최강, 커뮤니티 라이선스
Qwen2.5-72B-Instruct Alibaba ~48 GB MMLU 85+, MATH 80+, MMLU-redux에서 405B 초과 ✅✅ (원문 약학 1위) 한국어 원문 오픈소스 1위, Apache 2.0
DeepSeek-R1-Distill-Llama-70B DeepSeek ~43 GB MATH-500 94.5%, AIME 2024 86.7% (R1 671B 79.8% 초과!), LiveCodeBench 57.5% 중간 ⚠️ 별도 처리 증류 모델이 teacher 초과한 사례, 추론·수학 최강, MIT
Qwen3 72B Alibaba ~45 GB 72B 최상위 전반 벤치마크 ✅✅ thinking mode, 최신 세대, Apache 2.0

192GB 장비에서 속도 (70B Q4 기준): ~12–20 tok/s (M4 Ultra)


2-D. 109B–123B 범위 — 192GB Ultra에서 MoE 활용

모델 기관 아키텍처 Q4 파일 크기 주요 벤치마크 한국어 도구 호출 특징
Llama 4 Scout Meta MoE (109B/17B active, 16전문가) ~58 GB MMLU-Pro 74.3%, GPQA Diamond 57.2%, LMArena ELO 1417 (GPT-4o·Gemini 초과) 10M 토큰 컨텍스트 (업계 최장), 멀티모달, Llama 4 커뮤니티 라이선스
Qwen3.5-122B-A10B Alibaba MoE (122B/10B active) ~74 GB MMLU-Pro 86.1%, GPQA Diamond 85.5%, SWE-bench Verified 72.4%, BFCL-V4 도구 호출 72.2% (GPT-5 mini 55.5% 압도) ✅✅✅ 도구 호출 벤치마크 오픈소스 1위, 192GB에서 ~35 tok/s, Apache 2.0

⭐ Qwen3.5-122B-A10B 주목 이유: BFCL-V4(Berkeley Function Calling Leaderboard v4) 도구 호출 72.2%는 GPT-5 mini(55.5%)를 30% 이상 압도한다. MCP tool dispatch가 핵심인 이 프로젝트에서 가장 유력한 단일 로컬 모델 후보다. 192GB에서 active 10B 연산 기준으로 ~35 tok/s 확보.


2-E. 192GB 경계선 MoE — 최대 활용 후보

모델 기관 아키텍처 파일 크기 주요 벤치마크 비고
DeepSeek V4-Flash DeepSeek MoE (284B/13B active) ~158 GB (Q4) V4-Pro 수준 코딩·추론, 1M 컨텍스트 192GB에서 Q4 실행 가능, MIT
Qwen3.5-397B-A17B Alibaba MoE (397B/17B active) ~214 GB (Q4) / ~192 GB (Q3) GPQA Diamond 88.4, AIME 2026 91.3, LiveCodeBench 83.6 Q3 Unsloth UD-Q3_K_XL으로 192GB 경계선 적재 가능. ~5.5 tok/s (Q3) — 실시간 용도 한계

주의: Qwen3.5-397B-A17B Q3는 원본 대비 정확도 손실이 Q4 대비 크다. Unsloth가 원본 대비 1점 이내를 보장하지만, 도구 호출 신뢰성을 실환경에서 검증해야 한다.


2-F. 현재 로컬 불가 — 참고용 Frontier 모델

모델 기관 LMArena ELO 로컬 조건 비고
Kimi K2.6 Moonshot AI 1456 350 GB+ RAM 필요 오픈소스 ELO 최상위 (2026-05 기준)
Kimi K2.5 Thinking Moonshot AI 1445 240 GB+ (ultra quant)
GLM-5.1 Z.AI 1469 API 전용 오픈 웨이트 미공개
DeepSeek R1-0528 (671B full) DeepSeek H200×4 이상 증류 버전(8B~70B)이 현실적 대안

3. 한국어 성능 비교

이 프로젝트는 한국어 operator UI와 한국어 zone 플레이북이 핵심이다.

순위 모델 한국어 특화 수준 근거
1 Qwen 시리즈 (2.5/3/3.5) 최상 한국어 약학 시험 원문 기준 오픈소스 1위 (Qwen2.5-72B 76.6점), 119개 언어 명시 학습
2 Llama 3.x 시리즈 높음 한국어 약학 시험 영어 번역본 기준 오픈소스 1위 (79.3점), IFEval 92.1%
3 Gemma 3/4 시리즈 높음 멀티링구얼 학습, 커뮤니티 평가 양호, 구체적 벤치마크 미공개
4 Mistral Small 3.x 중간 다국어 지원이나 한국어 특화 벤치마크 없음
5 Phi-4 계열 제한적 영어·수학 특화 설계
6 DeepSeek R1 Distill 중간 추론 특화, 한국어 instruction following은 보통

4. 에이전틱(Agentic) 워크플로 적합성 순위

MCP tool dispatch, JSON 구조화 출력, 다단계 계획 수립 기준 정렬.

순위 모델 도구 호출 지표 이유
1 Qwen3.5-122B-A10B BFCL-V4 72.2% 오픈소스 도구 호출 벤치마크 압도적 1위
2 Qwen3.6-35B-A3B SWE-bench 73.4% agentic 코딩 특화 아키텍처, 20GB 초고효율
3 Mistral Small 3.2 24B HumanEval+ 92.9% 함수 호출 포맷 정제, agentic 파이프라인 검증됨
4 Llama 3.3 70B 함수 호출 84.8%, IFEval 92.1% instruction following 최고 수준, 폭넓은 커뮤니티 지원
5 Qwen3-32B / Qwen3 72B 한국어 + 도구 호출 균형

**주의: DeepSeek R1 계열(증류 포함)**은 수학·추론 벤치마크는 탁월하지만, 긴 Chain-of-Thought 추론 체인으로 레이턴시가 높고 structured JSON 출력에 별도 파싱 처리가 필요하다. 실시간 MCP 도구 호출용으로는 적합하지 않다.


5. 하이브리드 라우팅 전략

Claude Opus API와 로컬 LLM을 태스크 특성에 따라 동적으로 선택한다.

도입 목적:

목적 설명
비용 절감 낮은 복잡도 요청의 60–80%를 로컬로 처리 → API 호출 비용 대폭 절감
지연 단축 로컬 모델은 TTFT(Time To First Token) 0.3–0.5초, Claude API 1–3초
오프라인 가용성 네트워크 장애 시 고복잡도 분기도 로컬 LLM으로 degraded 처리

5.1 라우팅 결정 기준

1차 기준: complexity — 낮은 복잡도는 API 가용 여부와 무관하게 항상 로컬로 처리한다. API는 복잡도가 높을 때만 투입되며, API 가용 여부는 그 안에서 fallback 조건으로만 작동한다.

complexity 점수 기본 경로 설명
0 (단순) LOCAL_FAST 단일 zone 단순 동작, 루틴 판단
1–2 (중간) LOCAL_BEST 조건 복합이나 API 투입 수준 아님
3+ (복잡) Claude API → fallback 다중 tool chain, 이상 상황: API 우선, 불가 시 LOCAL_BEST

2차 기준 (복잡도 3+ 한정): safety_level + API 가용 여부

safety_level API 가용 선택 모델
high YES OPUS
high NO LOCAL_BEST (degraded)
medium / low YES SONNET
medium / low NO LOCAL_BEST (degraded)

5.2 모델 선택 로직 (의사 코드)

# orchestrator/router.py  (illustrative spec)
from enum import Enum

class ModelTier(Enum):
    LOCAL_FAST = "local_fast"  # Qwen3.6-35B-A3B  — 단순 루틴 판단
    LOCAL_BEST = "local_best"  # Qwen3.5-122B-A10B — 로컬 최고 품질 / API fallback
    SONNET     = "sonnet"      # claude-sonnet-4-6
    OPUS       = "opus"        # claude-opus-4-7

def select_model(event: ZoneEvent, ctx: SessionContext) -> ModelTier:
    complexity = estimate_complexity(event, ctx)

    # 낮은 복잡도 → 항상 로컬 (API 상태 무관)
    if complexity == 0:
        return ModelTier.LOCAL_FAST
    if complexity <= 2:
        return ModelTier.LOCAL_BEST

    # 높은 복잡도 → Claude API, 불가 시 LOCAL_BEST로 degraded 처리
    zone = ctx.zone_registry[event.zone_id]
    target = ModelTier.OPUS if zone.safety_level == "high" else ModelTier.SONNET

    return target if ctx.api_reachable else ModelTier.LOCAL_BEST

def estimate_complexity(event: ZoneEvent, ctx: SessionContext) -> int:
    score = 0
    score += len(event.overlapping_zones)         # 교차 zone 수
    score += len(ctx.pending_tool_calls)           # 미완료 tool call 수
    score += (1 if ctx.active_sessions > 3 else 0) # 동시 세션 과부하
    return score

5.3 라우팅 흐름도

MQTT vision/zone/enter
        │
        ▼
  estimate_complexity()
        │
  ┌─────┼──────────────┐
  0    1–2            3+
  │     │              │
LOCAL  LOCAL      API 가용?
FAST   BEST     ┌────┴────┐
               YES       NO
                │         │
         safety_level?  LOCAL
         ┌──────┴──────┐  BEST
        HIGH         MED/LOW  (degraded)
         │              │
        OPUS          SONNET

        │ (어느 경로든)
        ▼
  [가드레일 공통 경로 — 모델 티어 무관]
  JSON schema 검증 → capability whitelist
  → zone polygon clamp → velocity clamp
        │
        ▼
  MCP tool dispatch
  (mcp-robot-adapter / mcp-ha-bridge / mcp-tablet-gateway)

⚠️ 가드레일 4단계는 모델 티어와 무관하게 항상 실행된다. LOCAL 모델 출력이 가드레일을 통과하지 못하면 명령은 폐기되고 Prometheus 카운터가 증가하며, HA 룰 기반 fallback이 활성화된다.

5.4 라우팅 메트릭 추적

# illustrative: 라우팅 결과 기록
router_decision_counter.labels(
    tier=selected_tier.value,          # local_fast / local_best / sonnet / opus
    zone_safety=zone.safety_level,     # low / medium / high
    complexity_band=complexity_band,   # simple(0) / medium(1-2) / high(3+)
    degraded=str(not ctx.api_reachable and complexity >= 3),
).inc()

6. Claude SDK 연동 방식

현재 orchestrator는 anthropic SDK를 직접 사용한다. 로컬 LLM 연동 시 두 가지 경로가 있다.

경로 A: OpenAI 호환 래퍼 (권장)

Ollama가 /v1/chat/completions를 노출하므로 openai SDK로 동일하게 호출한다. LangGraph 그래프 노드에서 provider를 추상화하면 설정값 변경만으로 Claude API ↔ 로컬 LLM을 전환할 수 있다.

# illustrative: provider 추상화 (LangGraph 노드)
def make_llm_client(tier: ModelTier):
    match tier:
        case ModelTier.LOCAL_FAST:
            from openai import AsyncOpenAI
            return AsyncOpenAI(base_url="http://localhost:11434/v1", api_key="ollama"), \
                   "qwen3.6:35b-a3b"
        case ModelTier.LOCAL_BEST:
            from openai import AsyncOpenAI
            return AsyncOpenAI(base_url="http://localhost:11434/v1", api_key="ollama"), \
                   "qwen3.5:122b-a10b"
        case ModelTier.SONNET:
            import anthropic
            return anthropic.AsyncAnthropic(), "claude-sonnet-4-6"
        case ModelTier.OPUS:
            import anthropic
            return anthropic.AsyncAnthropic(), "claude-opus-4-7"

경로 B: LiteLLM 통합 레이어

litellm.completion("ollama/qwen3.5:122b-a10b", ...) 형태로 단일 인터페이스 유지. 프레임워크 종속성이 늘어나는 단점이 있으나, 로깅·비용 추적·fallback 로직을 한 곳에서 관리할 수 있다.


7. 프롬프트 캐싱 고려사항

현재 설계는 시스템 프롬프트 + zone 플레이북이 안정적이므로 Anthropic 프롬프트 캐싱을 사용한다 (SYSTEM_DESIGN §15). 로컬 LLM 경로에서 주의할 점:

  • 로컬 LLM에는 Anthropic 프롬프트 캐싱이 없다. 시스템 프롬프트 토큰이 매 호출마다 처리된다. 프롬프트를 간결하게 유지하는 것이 중요하다.
  • Ollama의 keep_alive 옵션으로 KV cache를 메모리에 보존하면 연속 호출 시 일부 재사용 효과를 얻을 수 있다.
  • Claude API 경로에서는 기존과 동일하게 cache_control: ephemeral 블록을 시스템 프롬프트 끝에 붙인다.

8. 미결 이슈와의 연관

SYSTEM_DESIGN §15에서 Opus vs Sonnet 결정이 미결로 남아 있다. 이 문서에서 제안하는 하이브리드 라우팅은 그 결정을 "태스크 특성에 따라 네 티어 중 하나" 로 재프레이밍한다. §15에 다음 항목을 추가해야 한다:

  • 로컬 LLM 가드레일 거부율 허용 임계값 합의 (초기 제안: 5% 이상 시 자동으로 상위 tier 재시도)
  • COMPLEXITY_THRESHOLD 초기값 확정 (현재: high ≥ 3, low ≥ 1)
  • LOCAL_FAST vs LOCAL_BEST 분기 기준 확정
  • Mac Studio 장비 운영 주체 및 네트워크 배치 (온사이트 상시 가동 전제)
  • 라이선스 검토: Llama 4 Scout은 커뮤니티 라이선스로 월간 활성 사용자 수 제한이 있을 수 있음

9. 결론 및 권고

항목 권고
하드웨어 Mac Studio M4 Ultra (192 GB) — Qwen3.5-122B Q4 (~74 GB) + Qwen3.6-35B Q4 (~20 GB) 동시 적재 가능
LOCAL_FAST (루틴 판단) Qwen3.6-35B-A3B Q4_K_M — agentic 특화 MoE, decode 44 tok/s, 20 GB
LOCAL_BEST (복잡 로컬) Qwen3.5-122B-A10B Q4_K_M — 도구 호출 오픈소스 1위, 35 tok/s, 74 GB
한국어 최우선 Qwen2.5-72B-Instruct 또는 Qwen3 72B — 한국어 원문 벤치마크 1위 계열
추론·수학 보조 DeepSeek-R1-Distill-Llama-70B — MATH-500 94.5%, 단 JSON 출력 별도 처리 필요
192GB 풀 활용 실험 Qwen3.5-397B-A17B Q3 — frontier급 성능, 5.5 tok/s 수용 시나리오 한정
실행 프레임워크 Ollama 0.19+ (MLX 백엔드, Metal 가속, OpenAI 호환 API)
Claude Opus 동등성 불가 — 로컬 모델은 복합 추론·고안전 판단에서 여전히 격차. 가드레일 4단계로 보완
즉시 적용 여부 미결 — §15 결정 후 propagation 필요

Clone this wiki locally