로컬 LLM 가속: Headroom으로 Agent 컨텍스트 95% 절감 (2026)
Mac mini에서 Ollama, DeepSeek, Llama 3 코딩 Agent에 monorepo grep이나 200 MB 로그 tail을 맡기면 UI가 멈추고 tok/s가 떨어집니다. 8B–14B 로컬에서는 도구 출력 팽창이 모델 지능보다 치명적입니다—압축되지 않은 바이트마다 통합 메모리 버스를 ~20–40 tok/s로 점유합니다.
Headroom은 OSS 컨텍스트 압축 레이어(Apache 2.0)로 LLM 진입 전 도구·로그·파일 읽기를 보통 60–95% 줄입니다. CCR로 원문을 요청 시 복원합니다. 로컬 우선 워크플로용이며, 클라우드 비용 절감은 Hermes Trajectory Compressor를 참고하세요.
큰 도구 출력에서 로컬 Agent가 멈추는 이유
로컬 추론 지연은 컨텍스트 길이와 메모리 대역폭에 좌우되며, '똑똑함'만으로 결정되지 않습니다.
| 증상 | 일반 원인 | 관찰 |
|---|---|---|
| 도구 1회 후 30–120초 '생각' | stdout 5만–20만 token | 진행 막힘; GPU 100% |
| 세션 중 답변 품질 하락 | KV cache 가득; 옛 dump 잔류 | 최신 지시 무시 |
| 앱이 얼어붙은 느낌 | 8–16GB Mac mini swap | 팬 풀가동; 메모리 압력 빨강 |
| 실패 grep 반복 | 에러 줄이 노이즈에 묻힘 | 동일 도구 루프 |
인용 정의: 로컬 LLM 도구 지연 = 도구 반환 후 다음 토큰까지의 실시간—비압축 컨텍스트 prefill이 지배하며 도구 실행 시간이 아닙니다.
Apple Silicon에서 OpenClaw/MLX도 쓰면 8GB 메모리 예산과 병행하세요.
Headroom 아키텍처: prefill 전 압축
Agent (Cursor, OpenClaw, custom)
│ tool results · file reads · logs
▼
┌──────────────────────────────┐
│ Headroom (local) │
│ CacheAligner → ContentRouter │
│ ├─ SmartCrusher (JSON) │
│ ├─ CodeCompressor (AST) │
│ └─ Kompress-base (text) │
│ CCR store (reversible) │
└──────────────────────────────┘
│ compressed messages + headroom_retrieve
▼
Ollama / llama.cpp / MLX API
README 벤치(python -m headroom.evals suite 재현):
| 워크로드 | 압축 전 | 압축 후 | 절감 |
|---|---|---|---|
| Code search (100 results) | 17,765 | 1,408 | 92% |
| SRE incident debugging | 65,694 | 5,118 | 92% |
| GitHub issue triage | 54,174 | 14,761 | 73% |
CCR: 원문은 디스크 보관; headroom_retrieve로 전체 파일 복원—영구 삭제 없는 공격적 압축.
결정 매트릭스: Mac mini Agent
| 방식 | token 절감 | 가역 | 최적 |
|---|---|---|---|
head -n 50 수동 절단 | 높음 | 아니오 | 임시 |
Hermes compression.* | 중간 | 부분 | Hermes Agent |
| Headroom proxy | 60–95% | 예(CCR) | OpenAI 호환 로컬 |
| Headroom MCP | 동일 엔진 | 예 | MCP/OpenClaw |
| 작은 quant만 | 도구 팽창 0% | N/A | 거대 로그에 부적합 |
Mac mini OpenClaw: Headroom은 OpenClaw wrap·ContextEngine 플러그인 지원.
If X, do Y: 7B에서 cat 후 prefill 10초 초과면 GPU/클라우드 전에 Headroom 활성화.
시나리오 A — Ollama + Headroom proxy (코드 변경 없음)
Agent OpenAI base URL을 Headroom에; Headroom이 Ollama로 전달.
스택: Mac mini M2/M3/M4, qwen2.5-coder:7b 또는 deepseek-r1:8b, proxy 8787.
기대: 커뮤니티: 7B에서 45–90초 → 8–15초 (저장소별 상이).
시나리오 B — 홈서버 OpenClaw + Headroom MCP
MCP headroom_compress 등. 병렬 상한과 궁합—16GB에서 2 동시 작업 가능.
7단계: Mac mini Headroom + Ollama
1단계 — Headroom 설치 (Python 3.10+)
brew install python@3.12
pip install "headroom-ai[proxy,mcp]"
headroom --version
2단계 — Ollama 코딩 모델
ollama pull qwen2.5-coder:7b-instruct-q4_K_M
ollama serve # default :11434
3단계 — Ollama 향 proxy
export OLLAMA_HOST=http://127.0.0.1:11434
headroom proxy --port 8787 --backend ollama
(proxy 가이드 참고.)
4단계 — Agent를 localhost:8787로
OpenAI 호환 예:
export OPENAI_API_BASE=http://127.0.0.1:8787/v1
export OPENAI_API_KEY=ollama # placeholder for local
base URL: http://127.0.0.1:8787/v1.
5단계 — 베이스라인 vs 압축
동일 프롬프트 2회:
- 직접 Ollama —
TODO전부 - Headroom 경유
headroom_stats 기록.
6단계 — 디버그 시 retrieve
스택 누락 시 headroom_retrieve로 ERROR 구간 복원.
7단계 — LaunchAgent (선택)
메모리 가이드로 Node 힙 제한. 순서: Ollama → Headroom → Agent.
문제 해결
증상: Headroom 후에도 느림
패턴: 바이너리/protobuf 압축률 낮음.
해결: JSON/텍스트 포맷 먼저; CodeCompressor; 병렬 읽기 감소.
증상: 실패 테스트 줄 소실
패턴: FAIL 행 삭제.
해결: headroom_retrieve; SmartCrusher; rg --json ERROR.
증상: proxy 연결되나 404
패턴: 백엔드 env/Ollama 미실행.
해결: curl tags; 올바른 --backend로 재시작.
권장 경로
| 구성 | 권장 |
|---|---|
| Cursor + Ollama | proxy 8787 + 7B |
| OpenClaw 게이트웨이 | MCP + 16GB 병렬 1–2 |
| Hermes 8B | Headroom + 8B 튜닝 |
| MLX | Headroom + MLX 하이브리드 |