8GB 안드로이드 폰에서 Gemma 4 E2B가 놀랍도록 잘 돌아가서 개인 음성 메모 앱을 만들었습니다.
Gemma 4 E2B runs surprisingly well on my 8GB Android phone, so I built a private voice notes app around it.
핵심 요약
8GB 램 안드로이드 폰에서 Gemma 4 E2B와 Whisper를 활용해 로컬 음성 메모 앱을 개발한 사례.
- 로컬 LLM 성능 — 2.4GB 모델인 Gemma 4 E2B가 8GB 램 환경에서 구조화된 JSON 출력을 안정적으로 생성함.
- 음성 메모 앱 — Whisper Small로 음성을 텍스트로 변환하고 Gemma로 분류 및 태깅을 수행하는 오프라인 앱 구현.
- 검색 최적화 — 쿼리 확장과 RRF(Reciprocal Rank Fusion)를 사용해 로컬 환경에서 효율적인 검색 시스템 구축.
- 기술 스택 — 안드로이드 환경에서 Kotlin, Compose, LiteRT-LM을 사용하여 클라우드 없이 로컬에서 모든 작업 처리.
OnePlus CE 5(8GB RAM)에서 몇 달 동안 Gemma 4 E2B를 로컬로 돌리고 있습니다. 모델 크기에 비해 대화 품질은 괜찮습니다. 놀라웠던 건 JSON 출력입니다. 짧은 입력에 구조화된 프롬프트를 주면 깔끔하게 파싱 가능한 JSON을 돌려줍니다. 2.4GB 모델이 폰에서 이 정도 성능을 낼 줄은 몰랐습니다.
음성 메모에 대해 생각하게 됐습니다. 몇 초 동안 주절거리고 "내일 3시에 치과 예약하고, 오는 길에 우유도 사"라고 하면, Gemma가 이걸 개별 항목으로 나누고 각각 태그(알림, 구매)를 달고 시간을 해결할 수 있습니다.
안드로이드 앱을 만들었습니다. Whisper Small(244MB)을 Sherpa-ONNX로 돌려 음성을 변환하고, Gemma 4 E2B(2.4GB)를 LiteRT-LM으로 돌려 분류와 태깅을 처리합니다. 둘 다 폰에서 돌아가며 클라우드나 계정은 필요 없습니다.
CE 5에서 10~15초짜리 음성 메모를 처리하는 데 총 12~15초 정도 걸립니다. Whisper가 약 5초, Gemma가 분류하는 데 약 8~10초 걸리고, 나머지는 모델 로드와 Room 데이터베이스 쓰기, UI 작업 시간입니다.
검색할 때(예: "지난주에 치과에 대해 뭐라고 했지?") 쿼리 확장을 수행하여 사용자의 질문을 키워드와 가상의 예시 항목으로 재작성합니다. 여러 FTS 레인을 Reciprocal Rank Fusion(RRF)으로 병합한 다음, 15초 타임아웃을 설정하고 Gemma 리랭커를 선택적으로 실행합니다. 완료되지 않으면 RRF 순서로 폴백합니다.
다들 폰에서 로컬 LLM으로 뭘 하고 있는지 궁금하네요. 로컬 기기에서 시도해 볼 만한 다른 좋은 모델이 있을까요?
혹시 직접 기기에서 테스트해 보고 피드백을 공유해 주실 분이 있다면 환영합니다. 분류가 실제 메모에서 잘 작동하는지, 첫 모델 실행 시 이상한 점은 없는지 주로 알고 싶습니다.


