사내에 "AI 에이전트 붙여보자"는 얘기가 나오면 인프라 담당자 입장에서 제일 먼저 걸리는 건 성능이 아니다. 데이터가 밖으로 나간다는 것, 그리고 토큰 요금이 예측 불가능하다는 것이다. 특히 에이전트는 한 번의 사용자 요청에 툴 콜 10~20번을 돌리기 때문에 챗봇 대비 토큰 소모가 자릿수 단위로 다르다. 그래서 "로컬에서 돌리면 안 되나"는 얘기가 계속 나오고, 매번 "작은 모델은 툴 콜을 제대로 못 한다"에서 막혔다.
2026년 8월 10일 Meta Superintelligence Labs가 공개한 Muse Glimmer는 딱 이 지점을 노린 모델이다. 30B 파라미터, Apache 2.0 라이선스, 그리고 명시적으로 "always-on local agent workflows"에 최적화했다고 밝혔다. 개인적으로 흥미로웠던 건 모델 자체보다 메모리 예산을 어떻게 쪼갰는지를 블로그에서 대놓고 설명한 부분이다. 인프라 하는 사람이 읽으면 바로 계산기 두드리게 된다.
1. 왜 지금 이 모델이 화제인가
기존 로컬 모델 도입 시나리오는 대부분 이렇게 깨졌다.
- 7B급을 올린다 → 툴 스키마를 못 지킨다. JSON 필드명을 지 마음대로 바꾼다.
- 70B급을 올린다 → 소비자용 GPU 한 장에 안 들어간다. A100 두 장 얘기가 나오고 프로젝트가 죽는다.
- 중간 크기를 올린다 → 툴 콜 하나 실패하면 그냥 멈춘다. 재시도 로직을 스캐폴드에서 다 짜야 한다.
Muse Glimmer가 주장하는 차별점은 세 가지다. 첫째, 30B를 약 4비트로 양자화해 언어 모델 부분을 20GB 미만으로 줄였다는 것. 원문 기준 full precision이면 55GB가 넘는데, 이걸 압축해서 24GB 또는 32GB 메모리 안에 KV 캐시 + 이미지용 perception encoder + speculative decoding용 drafter까지 같이 올린다는 설계다. 둘째, DFlash 기반 경량 drafter로 speculative decoding을 기본 탑재했다는 것. 셋째, Failure Recovery를 학습 목표에 명시적으로 넣었다는 것 — 툴 콜이 실패하거나 예상 밖 결과를 반환하면 멈추지 말고 진단 후 재시도하도록 훈련했다고 한다.
세 번째가 실무자 입장에선 제일 크다. 로컬 에이전트를 돌려본 사람은 알겠지만, 실패의 90%는 "모델이 멍청해서"가 아니라 "툴이 404를 뱉었는데 모델이 그걸 못 읽고 그대로 종료해서"다.
2. 메모리 예산이라는 핵심 원리
로컬 LLM을 처음 올려보는 사람들이 가장 많이 하는 실수가 "모델 파일 크기 = 필요 VRAM"이라고 생각하는 것이다. 아니다. 실제로는 이렇게 나눠 먹는다.
[24GB VRAM 카드 기준 대략적인 배분 — 원문 설명 기반]
모델 가중치 (4bit 양자화) ~17-20GB
KV 캐시 (컨텍스트 길이 비례) 가변
perception encoder (이미지) 가변
DFlash drafter (양자화 버전) 가변
────────────────────────────
합계가 24GB / 32GB 안에 들어와야 함
원문에서 "K-Quant-17GB 모델"이라는 표현을 쓴 걸 보면, 실제 배포되는 양자화 변형 중 하나가 17GB 수준인 듯하다. 24GB 카드에서 17GB를 쓰면 나머지 7GB로 KV 캐시와 encoder, drafter를 다 감당해야 한다는 뜻이다. 컨텍스트를 길게 잡으면 여기서 터진다. 에이전트 워크로드는 툴 응답이 계속 쌓이기 때문에 컨텍스트가 금방 길어지는데, 이게 로컬 배포의 진짜 병목이다.
speculative decoding은 왜 필요한가
일반 생성은 토큰을 하나씩 뽑는다. 매 토큰마다 20GB짜리 가중치를 VRAM에서 읽어와야 하니, 소비자 GPU에서는 연산이 아니라 메모리 대역폭이 병목이 된다. 즉 GPU 코어는 놀고 있는데 데이터 읽느라 느린 상태다.
speculative decoding은 여기에 작은 drafter 모델을 붙인다. 비유하자면 이렇다. 선배가 문서를 검토하는데, 후배가 미리 다음 문단을 예상해서 초안을 통째로 써 온다. 선배는 그 초안을 한 번에 훑어보고 맞는 부분까지는 그대로 통과시키고, 틀린 지점부터 직접 고쳐 쓴다. 후배가 대충이라도 잘 맞히면 선배가 문장을 하나씩 쓰는 것보다 훨씬 빠르다. 중요한 건 최종 결과물의 품질은 선배가 직접 쓴 것과 동일하다는 점이다. 원문도 "producing identical output quality"라고 명시한다.
원문은 MacBook M4-Max, M5-Max, RTX-5090에서 속도를 측정했다고만 밝히고 있고 구체적인 tok/s 수치는 블로그 본문에 나오지 않는다. 실제 수치는 릴리스된 리포트와 각자 하드웨어에서 직접 재봐야 한다.
3. 실무 관점: 도입 전에 계산해야 할 것들
먼저 하드웨어부터 확인
뭘 하든 이것부터 찍고 시작한다.
$ nvidia-smi --query-gpu=name,memory.total,memory.used --format=csv
name, memory.total [MiB], memory.used [MiB]
NVIDIA GeForce RTX 4090, 24564 MiB, 412 MiB
# macOS (Apple Silicon)는 통합 메모리라 다르게 본다
$ system_profiler SPHardwareDataType | grep -E "Chip|Memory"
Chip: Apple M4 Max
Memory: 36 GB
맥은 통합 메모리라서 숫자만 보면 여유로워 보이지만, 기본적으로 GPU가 쓸 수 있는 상한이 따로 걸려 있다. 32GB 맥에서 20GB짜리 모델을 올리려다 실패하는 경우가 여기서 나온다. Metal 계열은 iogpu.wired_limit_mb 같은 sysctl로 상한을 조정할 수 있는데, 시스템 안정성에 영향을 주므로 남는 메모리를 다 밀어넣지는 말자.
Ollama로 최소 검증
원문에 따르면 Ollama, LM Studio, Unsloth, llama.cpp, ExecuTorch, MLX, vLLM, SGLang 등에서 지원 예정이다("in the coming days"로 표현되어 있으니, 실제 태그명과 지원 여부는 각 프로젝트 문서를 확인해야 한다). 로컬 검증 흐름 자체는 이런 형태가 된다.
# 1) 모델 pull (태그명은 공식 문서 확인 필요)
$ ollama pull muse-glimmer:30b-q4
# 2) 툴 콜이 실제로 스키마를 지키는지 확인
$ curl -s http://localhost:11434/api/chat -d '{
"model": "muse-glimmer:30b-q4",
"messages": [{"role":"user","content":"서울 날씨 알려줘"}],
"tools": [{"type":"function","function":{
"name":"get_weather",
"parameters":{"type":"object",
"properties":{"city":{"type":"string"}},
"required":["city"]}}}],
"stream": false
}' | jq '.message.tool_calls'
[
{
"function": {
"name": "get_weather",
"arguments": { "city": "Seoul" }
}
}
]
여기서 tool_calls가 null로 오고 대신 content에 {"name": "get_weather", ...} 같은 문자열이 박혀 나오면, 모델이 아니라 템플릿 문제일 확률이 높다. 툴 콜 포맷은 채팅 템플릿에 강하게 묶여 있어서, 잘못된 템플릿으로 돌리면 모델이 아무리 잘 훈련돼 있어도 파싱이 깨진다. 커스텀 Modelfile을 쓸 때 특히 자주 밟는다.
흔한 함정 1: OOM은 로딩이 아니라 대화 도중에 터진다
제일 헷갈리는 포인트다. 모델은 멀쩡히 올라갔는데, 에이전트가 툴을 5~6번 호출하고 나면 죽는다. KV 캐시가 컨텍스트 길이만큼 계속 자라기 때문이다.
llama_kv_cache_init: failed to allocate buffer for kv cache
ggml_backend_cuda_buffer_type_alloc_buffer: allocating 4096.00 MiB on device 0: cudaMalloc failed: out of memory
llama_new_context_with_model: failed to create context with model
# 또는 vLLM 쪽
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 2.00 GiB.
GPU 0 has a total capacity of 23.99 GiB of which 1.12 GiB is free.
대응은 세 가지다. (1) --ctx-size를 실제 필요한 만큼만 잡는다. 무작정 128k 잡지 말고 에이전트 트레이스 로그로 실측한 최대 길이 × 1.5 정도. (2) KV 캐시 자체를 양자화한다(llama.cpp의 --cache-type-k q8_0 등). (3) 이미지를 안 쓸 거면 perception encoder를 안 올리는 구성이 가능한지 확인한다 — 이건 배포 포맷마다 다르니 문서 확인이 필요하다.
흔한 함정 2: "always-on"의 진짜 비용
원문이 강조하는 always-on 로컬 에이전트를 진짜로 상시 띄워두면, 노트북 배터리와 발열이 먼저 항의한다. 개발자 맥북에 상시 데몬으로 올리는 구성은 실제로 해보면 팬이 계속 돈다. 현실적인 절충안은 이렇다.
- 사무실 구석에 24GB급 GPU 워크스테이션 한 대를 두고 팀 공용 로컬 엔드포인트로 쓴다. "온디바이스"의 프라이버시 이점(외부 전송 없음)은 유지되고, 개인 장비 부담은 사라진다.
- 다만 이 순간 동시성 문제가 생긴다. 개인용 로컬 추론 스택(Ollama, LM Studio)은 동시 요청 처리가 약하다. 사람이 3명 이상 붙으면 vLLM이나 SGLang으로 갈아타야 한다. 원문도 "serve it at scale with vLLM and SGLang"이라고 구분해서 언급한다.
흔한 함정 3: 벤치마크와 우리 워크로드는 다른 세계다
원문은 Gemma4-31B, Qwen3.6-27B와 비교해 동급에서 강하다고 하고, DeepSearch QA / MCP-Atlas / 𝜏-Bench / SWE-Bench를 언급한다. 그런데 우리 회사 내부 API 30개짜리 스키마에서 잘 도는지는 저 벤치마크가 답해주지 않는다.
도입 결정 전에 반드시 자체 평가셋을 만들어야 한다. 실제 툴 스키마 그대로, 대표 시나리오 20~30개, 각각 3회씩 돌려서 툴 이름 정확도 / 파라미터 스키마 유효성 / 실패 후 복구율 세 가지만 재도 판단은 충분히 선다. 특히 세 번째는 일부러 툴이 500을 뱉게 만들어놓고 모델이 재시도하는지 보는 식으로 테스트하면 된다. Muse Glimmer가 Failure Recovery를 학습했다고 주장하니, 검증할 값어치가 있는 지점이다.
대안은 여전히 유효하다
모든 걸 로컬로 옮길 필요는 없다. 실무에서 잘 먹히는 구성은 라우팅이다. 개인정보·사내 코드가 섞이는 요청은 로컬 30B로, 고난도 추론이나 대규모 리팩터링은 클라우드 프런티어 모델로 보낸다. 원문이 언급한 "Controllable Effort"(추론 강도 조절)도 같은 맥락에서 쓸 수 있다 — 단순 분류성 작업은 낮은 effort로 빠르게, 계획 수립은 높은 effort로.
4. 정리
한 줄 요약: Muse Glimmer는 "30B를 4비트로 눌러서 24GB 카드 한 장에 에이전트 스택 전체를 넣는다"는 엔지니어링 결과물이고, 로컬 에이전트가 드디어 현실적 검토 대상이 됐다는 신호다.
지금 당장 붙여볼 만한 경우:
- 외부 전송이 컴플라이언스상 막혀 있는데 에이전트가 필요한 조직
- 에이전트 툴 콜 때문에 클라우드 토큰 비용이 예산을 밟고 있는 팀
- 오프라인/폐쇄망 환경에서 코딩 보조나 문서 처리를 돌려야 하는 경우
- Apache 2.0이 필요한 상용 제품 내장 시나리오
아직 기다려도 되는 경우: 동시 사용자가 많은 서비스에 붙일 계획이라면 GPU 대수 계산부터 다시 해야 한다. 24GB 한 장에 한 인스턴스라는 제약은 동시성 관점에선 꽤 비싸다. 그리고 llama.cpp / MLX / ExecuTorch 통합이 원문 기준 "coming days" 단계라, 각 스택의 실제 지원 상태와 태그명은 공식 문서로 확인하고 움직이는 게 안전하다.
개인적으론 4비트 압축이 에이전틱 태스크에서 "minimal to no degradation"이라는 주장을 가장 먼저 검증해보고 싶다. 일반 벤치에선 멀쩡한데 긴 툴 콜 체인에서 스키마가 미묘하게 흔들리는 건 양자화 모델의 오래된 지병이라, 여기가 진짜 승부처다.
참고 자료
'Tech_News' 카테고리의 다른 글
| Restate 단일 바이너리 vs Temporal 클러스터: 2AM에 뭘 붙잡고 있을지로 고르는 Durable Execution (0) | 2026.08.11 |
|---|---|
| RL 에이전트가 사내 Artifactory를 메시지 보드로 쓴 사건 — 인프라 엔지니어가 지금 점검할 것들 (0) | 2026.08.10 |
| 트래픽 99%가 봇이었다: 150만 페이지 사이트에서 1년간 스크래퍼와 싸운 이야기 (0) | 2026.08.10 |
| 셀프호스티드 러너까지 멈춘 GitHub Actions 장애, 우리 파이프라인의 SPOF를 다시 본다 (0) | 2026.08.08 |
| Discovery Loop: '실험 루프 자동화'를 인프라 엔지니어 시선으로 뜯어보기 (0) | 2026.08.07 |
