모바일에서 Gemma 4 + LiteRT-LM 사용: 나의 llama.cpp 설정보다 훨씬 나은 메모리/성능
요약
본 글은 모바일 환경에서 Gemma 4와 LiteRT-LM을 사용하여 로컬 LLM 구동의 메모리 및 성능 문제를 해결한 경험을 공유합니다. 기존 llama.cpp를 사용한 Gemma 3는 추론 시 4~5GB, 유휴 상태에서도 약 1GB의 높은 메모리를 점유하여 모바일 UX 저하를 초래했습니다. 반면, Gemma 4와 LiteRT-LM 조합은 메모리 점유율을 1.5~2GB로 낮추고, 추론 지연 시간을 크게 단축시켜 원활한 모바일 사용 경험을 제공합니다.
핵심 포인트
- Gemma 3를 llama.cpp로 구동할 경우 높은 메모리 점유율(4~5GB)과 UX 저하 문제가 발생했습니다.
- LiteRT-LM 프레임워크와 Gemma 4 조합은 메모리 점유율을 1.5~2GB 수준으로 낮추고 성능을 크게 개선했습니다.
- GPU/CPU 추론 시 지연 시간은 각각 2~4초(GPU) 및 3~6초(iPhone 13 Pro Max 기준)로 매우 빠릅니다.
- 이 솔루션은 Android와 iOS 모두를 위해 네이티브 모듈 작성이 필요하며, NPU 사용보다는 GPU/CPU 추론에 초점을 맞추었습니다.
안녕하세요 r/LocalLLaMA 여러분 - 저는 에지 AI (Edge AI) 생태계에 깊은 관심을 기울여 왔습니다. 그 이유는 이곳이 엄청난 잠재력을 가진 분야이며, AI가 일상적인 작업에서 더욱 유용해질 것이라고 진심으로 믿기 때문입니다. Gemma 4 출시 전후로 저는 이미 로컬 AI를 실험하고 있었지만, Gemma 3의 더 작은 변체(variants)들을 사용했을 때조차 발생하는 메모리 사용량은 받아들이기 힘든 수준이었습니다. 저는 Samsung의 플래그십 모델을 사용 중인데, UX (User Experience)가 저하되는 것을 느낄 수 있었고, OS (Operating System)가 수시로 앱을 강제 종료하기도 했습니다 (휴대폰이 뜨거워지는 문제는 말할 것도 없고요).
llama.cpp를 통한 Gemma 3 (React Native 브릿지 사용)는 매 추론(inference) 시 약 4~5GB의 점유율을 차지했으며, 모델을 유휴(IDLE) 상태로 두는 것만으로도 메모리를 약 1GB 정도 점유하고 있다가, 모델을 해제해야만 메모리가 정상으로 돌아왔습니다.
해결책을 찾기 위해 애를 먹던 중, AI Edge Gallery를 통해 Gemma 4를 접하게 되었고 두 가지를 발견했습니다:
- CPU와 GPU 사이의 속도 차이가 엄청납니다.
- 모델의 응답과 로딩이 얼마나 빠른지, 제 휴대폰은 매우 원활하게 작동했으며 메모리 급증(jumps)도 거의 눈에 띄지 않았습니다.
이때 LiteRT-LM과 이것이 에지 AI (Edge AI)에 얼마나 최적화되어 있는지에 대해 알게 되었습니다.
물론 몇 가지 특이사항(quirks)이 있긴 했지만, 작동시키는 데 성공했습니다. Android와 iOS 모두를 위해 네이티브 모듈을 직접 작성해야 했습니다 (Swift API를 아직 제공하지 않기 때문에 Objective-C를 통해 작성했습니다!)
NPU (Neural Processing Unit)를 사용하도록 작성하지는 않았지만, GPU와 CPU 추론은 매우 잘 작동합니다. 메모리 점유율(Memory footprint)은 약 1.5GB에서 2GB 사이입니다. 이 방식이 잘 작동하는 가장 오래된 휴대폰은 iPhone 13 Pro Max였습니다.
제가 별로 좋아하지 않는 유일한 점은, 모델이 유휴(IDLE) 상태일 때도 할당이 필요하기 때문에 메모리를 회복하려면 모델을 해제해야 한다는 사실입니다. 실행할 선호 백엔드(preferred backend)를 선택한 후의 시작 비용(startup cost)은 그리 크지 않지만, 사용자들을 위해 더 빨라질 여지가 있습니다.
저는 운동 강도 추적 모바일 앱을 운영하고 있으며, 현재 다음과 같이 활용하고 있습니다:
- 루틴 생성
- 운동 중 운동 동작에 대한 제안을 위한 성능 체크
- 운동 종료 후 후속 조치 및 제안
GPU에서는 추론(Inference) 호출당 24초가 소요되며, CPU에서는 12초가 더 추가됩니다.
다음 단계로 계획하고 있는 작업:
- 운동 동작을 위한 이미지 인식 (Gemma는 이 기능을 구현하기에 까다로운 모델임이 증명되었지만, 좋은 프롬프팅 (Prompting)을 활용한다면 어느 정도 결과물을 얻을 수 있을지도 모릅니다)
- 즉석 운동 루틴 생성
지금까지 이 모델과 프레임워크에 대해 매우 훌륭한 경험을 했으며, 지속적인 업데이트와 더 작은 크기의 모델들도 계속 출시되기를 바랍니다! :)
|설정 (Setup)|기기 (Device)|백엔드 (Backend)|모델 (Model)|메모리 (Memory)|지연 시간 (Latency, 전체 추론)|\n|:-|:-|:-|:-|:-|:-|\n|llama.cpp RN bridge|Samsung S25 Ultra|CPU (어떤 이유에서인지 GPU 작동이 되지 않음)|Gemma 3 1B IT|최대 4–5 GB|~7-10 초|\n|LiteRT-LM|Samsung S25 Ultra|GPU/CPU|Gemma 4 E2B IT|1.5–2 GB|2–4 초 (CPU 사용 시 1+2초 추가)|\n|LiteRT-LM|iPhone 13 Pro Max|CPU (Metal 제약으로 인해 GPU는 테스트하지 않음)|Gemma 4 E2B IT|1.5–2 GB|3–6 초|
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기