Local LLM Agent on a GPU-less
AI & HCIClaude(CLI) 연동의 반복 인증과 토큰 소모가 불편해서 로컬 모델로 바꿔봤다가, GPU 없는 하드웨어의 더 근본적인 벽에 부딪혔다
Originally ran OpenClaw on this machine with Claude (CLI) as the model provider, but recurring re-authentication and heavy token usage made it impractical for regular use. Tried swapping in a local model instead — Ollama (local LLM server) + OpenClaw (agent gateway) + Telegram (remote control) — on a 2017 15" MacBook Pro (Intel, Radeon Pro 560 4GB, 16GB RAM) stuck on macOS 13.6.7 with no further OS updates available.
| Item | Spec |
|---|---|
| Model | MacBook Pro 15-inch, 2017 |
| CPU | 2.9GHz Quad-Core Intel Core i7 |
| GPU | Radeon Pro 560 4GB + Intel HD Graphics 630 |
| RAM | 16GB 2133MHz LPDDR3 |
| OS | macOS 13.6.7, update-locked |
What actually happened:
- Every official installer hit a version wall. Homebrew failed on SSL certificate verification, then demanded an Xcode upgrade (13.2 → 15.2) to build from source. Ollama's official macOS app failed to launch at all (
kLSIncompatibleSystemVersionErr, -10825) because it now requires macOS 14+. Worked around it with Ollama's CLI-onlyollama-darwin.tgzbinary instead of the app bundle, and installed Node.js via the official nodejs.org package instead of Homebrew. - No GPU acceleration meant every number was CPU-bound. With the default 32K context window, even a 3B model (llama3.2:3b) took 4 minutes 45 seconds to answer "hi," because OpenClaw sends the full system prompt plus tool definitions (38 tools by default, ~7,000+ tokens) on every request.
- Context tuning cut both ways. Lowering context to 4096 caused a hard "Context overflow" error, since the system prompt + tools already exceeded it. Settled around 8192–12288 after also trimming the tool profile from 38 to 20 tools.
- The real blocker wasn't speed — it was tool-calling reliability. llama3.2:3b repeatedly sent the wrong parameter name to a search tool (
qinstead ofquery), called a non-existent tool ID instead of the file-write tool, and once wrote garbled, meaningless text to a file instead of the requested content. Switching to qwen2.5:7b improved text quality but introduced a different failure: the model announced "I will now write the file" four times in a row without ever emitting an actual tool call.
Stack: Ollama, OpenClaw (Node.js gateway/CLI/TUI), Telegram channel, macOS 13.6.7 (Intel)
===
원래 이 맥북에는 OpenClaw를 Claude(CLI) 모델로 연동해서 쓰고 있었는데, 정기적으로 재인증이 필요하고 토큰 소모도 커서 일상적으로 쓰기엔 불편했다. 대신 로컬 모델을 붙여보기로 했다 — GPU가 없는 2017년형 15인치 맥북 프로(Intel, Radeon Pro 560 4GB, 16GB RAM, 업데이트가 macOS 13.6.7에서 멈춘 상태)에 Ollama(로컬 LLM 서버) + OpenClaw(에이전트 게이트웨이) + Telegram(원격 제어)으로 구성한 로컬 자동화 스택이다.
| 항목 | 사양 |
|---|---|
| 모델 | MacBook Pro 15-inch, 2017 |
| CPU | 2.9GHz Quad-Core Intel Core i7 |
| GPU | Radeon Pro 560 4GB + Intel HD Graphics 630 |
| RAM | 16GB 2133MHz LPDDR3 |
| OS | macOS 13.6.7, 업데이트 불가 |
실제로 겪은 것들:
- 공식 설치 과정마다 버전 벽에 부딪혔다. Homebrew는 SSL 인증서 검증에서 실패한 뒤 Xcode를 13.2에서 15.2로 올리라고 요구했다. Ollama 공식 앱은 macOS 14 이상을 요구하도록 바뀌어서 아예 실행조차 안 됐다(
kLSIncompatibleSystemVersionErr, -10825). 앱 번들 대신 CLI 전용 바이너리(ollama-darwin.tgz)로 우회했고, Node.js도 Homebrew 대신 nodejs.org 공식 패키지로 설치했다. - GPU 가속이 없으니 모든 수치가 CPU 성능 그대로 드러났다. 기본 컨텍스트(32K) 상태에서는 3B급 모델(llama3.2:3b)조차 "hi" 한마디에 답하는 데 4분 45초가 걸렸다. OpenClaw가 매 요청마다 시스템 프롬프트+도구 정의(기본 38개, 약 7,000토큰 이상)를 함께 보내기 때문이다.
- 컨텍스트 조정은 양날의 검이었다. 4096으로 낮추니 이번엔 시스템 프롬프트+도구 정의가 이미 그보다 커서 "Context overflow" 에러가 났다. 도구를 38개에서 20개로 줄이면서 8192~12288 사이에서 타협점을 잡았다.
- 진짜 문제는 속도가 아니라 도구 호출의 신뢰성이었다. llama3.2:3b는 검색 도구를 부를 때 파라미터 이름을
query가 아니라q로 계속 잘못 보냈고, 파일 쓰기 대신 존재하지 않는 스킬 ID를 호출했으며, 한 번은 저장 내용 자체가 의미 없는 글자 나열이었다. qwen2.5:7b로 바꾸니 텍스트 품질은 나아졌지만, 이번엔 "파일을 쓰겠습니다"라는 말만 네 번 반복하고 실제 함수 호출은 한 번도 발생하지 않는 문제가 새로 나타났다.
사용 기술: Ollama, OpenClaw(Node.js 게이트웨이/CLI/TUI), Telegram 채널, macOS 13.6.7 (Intel)
Leave a Comment: