Mac에서 Gemma 4 로컬 서버 구축 후기 — mlx-lm 설치부터 Claude Code 토큰 절약까지
Apple Silicon · MLX · 로컬 LLM · Claude Code 자동화 | 2026-04-08
Apple Silicon Mac에서 Gemma 4를 완전 로컬로 실행하고, 더 나아가 Claude Code의 gemma-worker 에이전트에 연결해 Sonnet 토큰 소비를 줄이는 방법까지 한 번에 정리합니다. 설치 중 겪은 삽질도 그대로 포함했어요.
⚙️ 환경 & 모델 정보
- 머신Mac mini M4 · 16 GB 통합 메모리
- 패키지mlx-lm 0.31.2 · mlx 0.31.1 · Python 3.14 (Homebrew)
- 모델mlx-community/gemma-4-e4b-it-4bit — 5.25 GB
📦 mlx-lm 설치
Homebrew로 설치된 Python 환경에서는 venv(가상환경)를 먼저 만든 뒤 pip으로 설치해야 합니다. 전역 pip 설치는 PEP 668 정책으로 막혀 있어요.
# 1. 가상환경 생성 & 활성화 (최초 1회)
python3 -m venv ~/mlx-env
source ~/mlx-env/bin/activate
# 2. mlx-lm 설치
pip install mlx-lm
Successfully installed mlx-lm-0.31.2 mlx-0.31.1 mlx-metal-0.31.1 ...
💡 다음 터미널 세션부터는
새 터미널을 열 때마다 source ~/mlx-env/bin/activate를 실행해야 mlx_lm 명령어를 쓸 수 있습니다. 아래 쉘스크립트에 포함시켜두면 편해요.
🚀 mlx-lm을 선택한 이유
Mac에서 LLM을 로컬로 돌리는 방법은 여러 가지가 있는데, Apple Silicon 환경에서는 mlx-lm이 가장 효율적인 선택이에요. Ollama나 llama.cpp와 비교했을 때 어떤 점이 다른지 정리해봤습니다.
- Apple Silicon GPU를 100% 활용 — MLX는 Apple이 직접 만든 ML 프레임워크라 Metal GPU 가속이 네이티브로 붙습니다. Ollama보다 처리 속도가 빠른 경우가 많아요.
- 통합 메모리(Unified Memory) 최적화 — CPU·GPU가 메모리를 공유하는 Apple Silicon 구조에 맞게 설계되어 메모리 복사 오버헤드가 없습니다.
- OpenAI API 호환 서버 내장 — mlx_lm.server 한 줄로 OpenAI 형식의 API 서버가 뜨기 때문에, 기존 OpenAI SDK나 curl을 그대로 쓸 수 있어요.
- HuggingFace 모델 바로 사용 — mlx-community에 올라온 수백 개의 양자화 모델을 모델명 하나로 바로 다운로드·실행 가능합니다.
- Python 생태계와 완전 통합 — pip로 설치되고 Python 코드에서 바로 load(), generate()로 호출할 수 있어요.
- 4-bit 양자화(e4b)로 저용량 고성능 — gemma-4-e4b-it-4bit 기준 5.25 GB로 M4 Mac mini 16 GB에서도 여유롭게 실행됩니다.
📊 간단 비교
Ollama: 설치 편의성 최고, 하지만 Metal GPU 활용이 mlx-lm보다 제한적
llama.cpp: 범용성 최고, 하지만 Apple Silicon 최적화는 mlx-lm이 우위
mlx-lm: Apple Silicon 특화 최고 성능 + OpenAI 호환 API + Python 통합
🖥️ 로컬 API 서버 실행
설치가 끝나면 mlx_lm.server로 OpenAI 호환 API 서버를 띄울 수 있어요. 처음 실행 시 HuggingFace에서 모델을 자동으로 다운로드합니다.
mlx_lm.server \
--model mlx-community/gemma-4-e4b-it-4bit \
--port 8080
Fetching 8 files: 100%|████| 8/8 [04:02] ← 최초 1회만 (5.25 GB)
Starting httpd at 127.0.0.1 on port 8080...
💡 두 번째 실행부터는 즉시 로딩
모델이 캐시에 저장되므로 이후 실행은 6~7초 안에 서버가 뜹니다.
서버가 뜨면 바로 curl로 테스트할 수 있어요.
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mlx-community/gemma-4-e4b-it-4bit",
"messages": [{"role": "user", "content": "안녕, 너는 누구니?"}]
}'
📝 mlx_run.sh — 한 번에 실행하기
매번 venv 활성화하고 명령어 치기 번거로워서 쉘스크립트를 만들었어요.
#!/bin/bash
# mlx_run.sh
source ~/mlx-env/bin/activate
mlx_lm.server \
--model mlx-community/gemma-4-e4b-it-4bit \
--port 8080
# 실행 권한 부여 후 실행
chmod 755 mlx_run.sh
./mlx_run.sh
🤖 Claude Code 연동 — Sonnet 토큰 절약
서버가 실행 중이면 Claude Code에서 로컬 Gemma 4를 서브 에이전트로 붙일 수 있어요. 요약·번역·분류처럼 반복적인 텍스트 작업은 Gemma 4에 자동 위임하고, Sonnet은 코드 작성·설계처럼 진짜 실력이 필요한 작업에만 쓰는 구조입니다.
💰 토큰 절약 원리
Claude Sonnet은 입력·출력 토큰 모두 과금되지만 로컬 Gemma 4는 비용이 0이에요. .claude/agents/ 폴더에 gemma-worker 에이전트를 등록하고, CLAUDE.md에 위임 조건을 명시하면 사용자가 따로 요청하지 않아도 Claude가 판단해서 자동으로 Gemma로 라우팅합니다.
💡 총정리
- Homebrew Python → venv 활성화 후 pip install mlx-lm (PEP 668)
- zsh 멀티라인 \ 뒤 공백 없어야 함
- 두 번째 실행부터 캐시 로딩 → 즉시 서버 기동
- M4 Mac mini 16 GB 기준 5.25 GB 모델 · Apple Silicon GPU 가속
- gemma-worker 에이전트 + CLAUDE.md 규칙으로 자동 위임
- 단순 텍스트 작업은 Gemma 4가 처리 → Sonnet 토큰 0 소비
M4 Mac mini의 통합 메모리와 Metal GPU 가속 덕분에 Gemma 4를 Claude Code의 서브 에이전트로 붙여두면, 비용은 아끼면서 Sonnet은 진짜 어려운 작업에만 집중시킬 수 있어요.