AI 뉴스

macOS에서 로컬 코딩 에이전트 설정하는 방법 — Gemma 4 + MTP로 72 tok/s 달성하기

노동1호 2026. 6. 15. 04:02

macOS에서 로컬 코딩 에이전트 설정하는 방법 — Gemma 4 + MTP로 72 tok/s 달성하기

2026년 6월, 인터넷 장애가 잦은 환경에서도 끊김 없이 동작하는 로컬 코딩 에이전트 구성이 화제다. Apple Silicon Mac에서 llama.cpp Metal 가속과 Gemma 4 26B-A4B GGUF 모델, MTP draft model, Pi 터미널 코딩 에이전트를 조합하면 OpenAI 호환 로컬 서버를 72.2 tok/s로 띄울 수 있다. 본문은 M1 Max 64GB, macOS 15.7.7 환경에서 직접 검증한 구성과 튜닝 결과를 정리한다.

macos apple silicon gemma4 local coding agent

로컬 코딩 에이전트 구성 목표와 환경

로컬 실행을 시도한 직접적인 계기는 인터넷 장애가 몇 번 발생해 클라우드 코딩 에이전트를 사용할 수 없었던 상황이다. 원하는 조건은 세 가지로 정리된다. Mac에서 실제로 쓸 만큼 빠를 것, OpenAI 호환 API로 다른 도구에서도 호출 가능할 것, 스크린샷이나 이미지를 다시 입력으로 줄 수 있을 것. 최종 구성은 llama.cpp, Gemma 4 26B-A4B GGUF, Q8 MTP draft model, Gemma 4 multimodal projector, Pi 에이전트로 이뤄졌다. 테스트 환경은 Apple M1 Max 64GB 통합 메모리, macOS 15.7.7이다. 메인 모델은 unsloth-gemma-4-26B-A4B-it-GGUF의 Q4_K_XL 양자화 파일이며, MTP 헤드와 멀티모달 프로젝터를 함께 두면 폴더는 약 17GB에 달한다.

기본 실행과 MTP draft model로 24% 가속

메인 모델을 llama.cpp와 Metal 가속으로 직접 실행하는 단계가 출발점이다. llama-cli에 모델 경로, -ngl 999, -fa on, -c 4096, -n 128을 지정해 호출한다. 프롬프트 처리 속도는 298.0 tok/s, 생성 속도는 58.2 tok/s였다. 58 tok/s는 사용 가능한 수준이지만 코딩 에이전트 작업에서는 도구 호출이 잦아 더 빠른 속도가 필요하다. 의존성은 Homebrew로 cmake, git, tmux, python@3.11을 설치하고, ~/Developer/ML-Models/Gemma4/repos 아래에 ggml-org/llama.cpp 저장소를 클론한다. 빌드 명령은 cmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_METAL=ON -DGGML_ACCELERATE=ON이며, 이후 cmake --build build --config Release -j로 릴리스 바이너리를 만든다.

MTP draft model을 더하면 생성 속도가 24% 올라간다. Gemma 4에는 MTP/gemma-4-26B-A4B-it-Q8_0-MTP.gguf 형태의 draft model이 함께 제공된다. llama.cpp는 --model-draft, --spec-type draft-mtp, --spec-draft-n-max 옵션으로 투기적 디코딩을 지원한다. 값 1은 68.4 tok/s, 값 2는 72.0 tok/s, 값 3은 72.2 tok/s로 가장 빨랐다. 값 4는 70.7 tok/s, 값 5는 63.7 tok/s, 값 6은 61.2 tok/s로 느려졌다. M1 Max 환경에서는 3이 최적이며, 2도 충분히 가까운 결과를 낸다. Unsloth 문서는 값 2를 시작점으로 권장하지만, 하드웨어별로 직접 테스트해 가장 빠른 값을 고르는 게 효과적이다.

MLX 비교와 이미지 지원 추가

Mac 가속의 대안으로 mlx-lm 기반 모델도 측정했다. llama.cpp Metal + MTP는 72.2 tok/s, llama.cpp Metal 단독은 58.2 tok/s를 기록했다. MLX-LM은 Unsloth UD MLX 4-bit에서 45.8 tok/s, mlx-community 4-bit에서 43.9 tok/s, OptiQ 4-bit에서 38.1 tok/s에 그쳤다. 이 환경에서는 llama.cpp가 MLX보다 빨랐고, MTP를 적용한 llama.cpp가 가장 합리적인 선택이었다.

macos apple silicon gemma4 local coding agent

Pi에서 스크린샷을 첨부하려면 모델 입력이 텍스트 전용이면 안 된다. 원래 로컬 모델 항목의 "input": ["text"] 설정은 Pi가 이미지 도구 출력을 모델에 전달하지 못하게 막는다. llama.cpp 서버는 멀티모달 입출력을 위해 mmproj-BF16.gguf 형태의 프로젝터를 요구한다. --mmproj로 projector를 로드하면 텍스트 생성 속도 저하 없이 비전 입출력이 활성화된다. projector 없이 실행한 테스트는 프롬프트 120.3 tok/s, 생성 71.4 tok/s였고, mmproj를 로드한 최종 실행은 프롬프트 297.4 tok/s, 생성 72.2 tok/s로 추론 처리량 차이는 거의 없었다. 스크린샷 첨부, UI 디스크립션, 차트 해석 같은 작업이 Pi 워크플로우에서 자연스럽게 동작한다.

로컬 서버 시작과 Pi 연결

서버는 llama-server로 띄우며 메인 모델, MTP draft, 멀티모달 프로젝트를 모두 지정한다. 주요 옵션은 --spec-type draft-mtp, --spec-draft-n-max 3, -ngl 999, -fa on, -c 65536, --parallel 1이다. 서버는 --host 127.0.0.1 --port 8080으로 실행되고 OpenAI 호환 엔드포인트는 http://127.0.0.1:8080/v1이 된다. start_server.sh 래퍼는 tmux 세션에서 서버를 실행하고 로그를 남기며, curl http://127.0.0.1:8080/v1/models로 동작 여부를 확인한다. 모델 파일은 huggingface-cli download로 Gemma 4 메인 모델, mmproj, MTP draft model을 받아 models/unsloth-gemma-4-26B-A4B-it-GGUF/ 폴더에 둔다.

Pi는 ~/.pi/agent/models.jsongemma4-local 제공자에서 baseUrlhttp://127.0.0.1:8080/v1로 가리킨다. input["text", "image"]여야 하며, 컨텍스트 윈도는 65536, 최대 토큰은 8192로 설정한다. 비대화형 실행은 pi -p --provider gemma4-local --model gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf "..." 형태이고, 스크린샷 입력은 pi -p @"/path/to/screenshot.png" "..." 형태로 사용한다. pi --offline --list-models gemma로 이미지 지원이 yes로 표시되는지 확인한다.

Qwen3.6 35B-A3B 대안과 운영 가드레일

Qwen3.6 35B-A3B는 Gemma 4 26B-A4B의 대안으로 자주 거론된다. 벤치마크 기준 코딩 에이전트 성능은 Qwen이 더 낫다는 평가가 많지만, M1 Max 환경에서 측정된 속도는 55 tok/s에 그쳤다. 72 tok/s 대비 17 tok/s 차이는 도구 호출이 잦은 코딩 에이전트에서 무시하기 어렵다. Qwen 서버는 같은 llama-server를 --port 8081로 실행하고, Pi 설정의 qwen36-local 제공자에서 http://127.0.0.1:8081/v1을 가리킨다. 속도를 우선한다면 Gemma 4 26B-A4B + MTP, 코딩 능력을 우선한다면 Qwen3.6 35B-A3B를 선택하는 게 합리적이다.

운영 메모: 128토큰 단위 벤치마크는 너무 짧아 실제 도구 호출 워크로드의 체감을 충분히 보여주지 못한다는 HN 의견이 있다. 실사용 시 1000토큰 이상의 시스템 프롬프트와 함께 측정해 보는 걸 권장한다. 64GB M1 Max에서 MTP draft model 3을 적용한 llama.cpp Metal 조합이 72.2 tok/s로 가장 빨랐고, 멀티모달 projector를 함께 로드해도 텍스트 생성 속도 저하는 없었다. Gemma 4 + MTP 조합은 인터넷 없는 환경에서도 60W 수준의 전력으로 동작하는 자체 구동 로컬 LLM 워크플로우의 첫 번째 안정적인 구성이라 할 수 있다. 2026년 6월 기준, 로컬 추론의 핵심은 모델의 절대 점수가 아니라 대기 시간 없이 끝까지 도는 응답성이다.