Slaying the Gemma Beast: How We Fixed Local AI and Shipped Search

개요

Gemma 4 모델이 로컬 환경에서 RTX 5090 GPU를 사용하여 웹사이트 검색 기능을 개발하고 GitHub에 푸시하여 실제 서비스에 적용한 사례를 설명합니다.

주요 내용

* 초기 문제점: Agentic Gap
* Gemma 4는 코드 작성 계획은 훌륭했으나 실제 기능 구현에 실패하는 "agentic gap" 문제를 보였으며, 이는 생각하는 데 사용되는 숨겨진 토큰(chain-of-thought tokens)이 생성 예산(num_predict)을 초과했기 때문입니다.
* 근본 원인 진단 및 해결
* Gemma 4는 기본적으로 보이지 않는 생각 토큰을 먼저 생성한 후 보이는 출력을 생성하는 추론 모드를 사용하며, 이로 인해 코드 생성을 위한 토큰 예산이 부족했습니다.
* 이 문제를 해결하기 위해 Ollama에서 llama.cpp로 추론 스택을 전환하고, --reasoning-budget 플래그를 사용하여 생각 토큰 수를 제한했습니다.
* llama.cpp 설정 및 추론 환경 구축
* llama.cpp 서버를 --ctx-size 32768 (32K 컨텍스트 창), -n 32768 (32K 최대 출력 토큰), --reasoning-budget 4096 (4K 생각 토큰 제한), --reasoning-format deepseek (생각 토큰 API 노출), --parallel 1 (VRAM 부족 방지) 등의 설정을 적용하여 실행했습니다.
* Gemma 4의 기능 개발 과정
* 총 3번의 시도 끝에 Gemma 4는 GitHub 인증 오류 수정, OOM(Out Of Memory) 문제 해결, 워크스페이스 사전 준비 등을 통해 검색 기능 개발을 완료했습니다.
* 클라이언트 측 Fuse.js 검색과 사전 생성된 JSON 인덱스 구조로 구현되었으며, Gemma 4는 인증 오류 발생 시 스스로 수정하여 푸시까지 완료했습니다.
* 성능 측정 및 비교
* 로컬 RTX 5090 환경에서 Gemma 4는 약 177-181 tok/s의 피크 생성 속도와 28ms의 Time To First Token(TTFT)을 기록했으며, 이는 클라우드 모델보다 훨씬 빠른 응답 속도입니다.
* Opus 4.6 모델은 단일 시도에서 더 높은 코드 품질을 보였지만, Gemma 4는 인프라 설정 개선 후 뛰어난 성능을 발휘했습니다. Claude를 통한 코드 리뷰 및 폴리싱 작업으로 Gemma 4의 구현은 접근성, 애니메이션, 성능 최적화 등에서 상당한 개선을 이루었습니다.
* 로컬 AI 모델의 시사점
* 로컬 AI 모델도 올바른 구성과 환경 설정을 통해 실제 프로덕션 기능을 구축할 수 있습니다.
* 모델 자체의 능력보다 환경 설정(컨텍스트 창, 추론 예산, VRAM 관리 등)이 기능 구현의 병목 현상을 일으키는 경우가 많습니다.
* 로컬 모델(Gemma 4)과 클라우드 모델(Claude)을 결합하는 하이브리드 워크플로우는 각 모델의 강점을 활용하여 비용 효율적이고 효과적인 개발이 가능합니다.
* llama.cpp는 정밀한 제어가 필요한 프로덕션 환경에 적합하며, Ollama는 시작하기에 좋습니다.

시사점

로컬 AI 모델이 더 이상 실험적인 단계를 넘어, 적절한 인프라 구성과 워크플로우 설계만 갖춰진다면 실제 서비스에 적용 가능한 기능을 직접 개발하고 배포할 수 있는 잠재력을 보여주었습니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions