Search

세션4 - on device AI를 활용한 운세 앱

모델: gemma, phi-3
빌드: Mediapipe, gradle
1.
ondevice AI
핸드폰에서 모델을 돌리기 때문에 네트워크가 필요없음
gemini pro API: 7원/회
1만명*3회/일 = 월 600만원+ → Ondevice AI 활용 시 0원
privacy: 서버 로그에 남지 않음
2.
구현에 필요한 것들, mediapipe
mediapipe란? 구글에서 제공
안드로이드 친화적
c++ coding x
3.
mediapipe studio: vision, text, audio
4.
mediapipe에서 LLM inference 모델 사용
경량 모델을 선택해서 모델과 대화를 나눌 수 있음
다운로드를 직접해야 함

모델 테스트

phi-4 mini (microsoft)
3.6GB
standart
gemma 2b, llama 3.2(meta)
lightweight
gemma 3
1.
gemma 2 2B int4모델
normal하게 쓸 수 있음. 1.2GB
호환성 좋음
보급형 기기 구동 가능
2.
gemma 2 2b int8
2.4GB
v2 개선 모델, int8로 똑똑함. 양자화가 더 되어서
용량 부담
3.
phi-4 mini
3.6GB
강력한 지능, 한국어 지원
4.
llama 3.2 1B
1GB
변환(conversion) 필요: mediapipe를 사용해서 모바일에 돌리려면 변환 해야함
.bin 파일 미제공, 번들링 수고 필요
5.
gemma3
1B int4: 529MB
270M int8: 290MB
6.
gemini nano
모델은 아님
용량 0MB, AICore 시스템 서비스
최신 플래그십 pixel9, s24만 지원
7.
테스트 환경을 구축해서 돌려봄
device: pixel9
spec: tensorflow g4, 16gb ram
gemma2b int4
모델 초기화 시간 4077ms
소요시간 15초
한글 적용 잘 안됨
gemma 2b int8
모델 초기화 시간 6806ms
소요시간 33초
할루시네이션
int4보다는 좀 나아짐
gemini nano
소요시간: 20초
최적화가 잘 되어있는 답변
한글 잘 적용 됨. 답변 good
phi-4 mini
모바일에 이식은 되지만 프롬프트에 대한 답변은 오지 않는다…
모델 초기화가 되지 않고 계속 로딩하는 중..
모바일에서 돌아가기에는 오래 걸림. (데스크탑에서도 buffer error 발생)
gemma3 270mb
소요시간 6초
설명이 이상함… 할루시네이션
gemma3 1B int4 (529MB)
소요시간 16초
답변 괜찮음

구현 아키텍처 및 파일 포맷

코틀린 앱 → 미디어파이프 task → gpu delegate → .bin(llm, 가중치), .task(bundle), .tflite(raw, 텐서플로우 전용 확장자)
gemini nano: lm kit genAI → android system(AI core) → gemini nano
1.
디바이스 테스트를 위한 모델 로딩
파일 넣기: adb push gemma3.task …
권한 설정: adb shell chmod 644 ***.task
확인: adb shell ls -lh …

실무 팁

1.
경량 모델일 수록 chat template: 문법 준수 필수
모델 맞춤형 대화 포맷: gemma는 <start_of_turn> 같은 태그를 붙여줘야 누가 말하는지 알아듣습니다.
markdown을 제일 잘 알아듣는다?!
2.
threading: ui 블록 방지
비동기 처리. AI 연산은 무조건 백그라운드(dispatchers.IO)
3.
fallback
AI가 묵묵부답일 때를 대비한 fallback ui
4.
경량 모델일 수록 페르소나가 중요함
system prompt: 너는 한국어 타로 마스터다. 영어로 생각하고 한국어로 번역해서 말해.

한글의 무게(tokenizer)

english: 1배속
한글: 0.7배속. 더 느림
hello world → 2token 으로 압축된다.
안녕하세요 → 5token

확장 가능성

일기장 AI: 내 일기장을 분석해주는 AI
번역기 AI
게임 NPC AI
슬라이드 30장이면 발표시간 40분 정도.