동식이 블로그

[Android] Gemma3/4 vs ML Kit GenAI

온디바이스 텍스트/문서 요약 모델 비교

[Android] Gemma3/4 vs ML Kit GenAI LiteRT로 직접 모델을 돌리다가 ML Kit GenAI로 갈아탄 이유 시작은 LiteRT였다 온디바이스 AI 텍스트/문서 요약을 구현할 때 처음 선택한 스택은 Google LiteRT-LM + Gemma3-1B였다. 선택 이유는 명확했다. Google이 공식 지원하...

[Android] 온디바이스 LLM으로 긴 문서 요약하기

4000자 균등 분할 Map-Reduce 패턴 적용기

[Android] 온디바이스 LLM으로 긴 문서 요약하기 온디바이스 LLM은 컨텍스트 윈도우가 좁다. 긴 문서를 어떻게 요약할까? 배경 온디바이스 sLLM(소형 언어 모델)을 활용해 텍스트/문서 요약 기능을 개발하던 중 현실적인 한계에 부딪혔다. 모델 컨텍스트 윈도우 제한. Gemma3-1B 기준으로 안전하게 처리할 수 있는 입력 토큰...

[Android] 온디바이스 AI 개발기 - 6편: Play Asset Delivery로 모델 배포하기

1GB 모델을 앱에 어떻게 넣나 — 구글이 AI Gallery로 직접 보여준 방법

[Android] 온디바이스 AI 개발기 - 6편: Play Asset Delivery로 모델 배포하기 1GB짜리 모델 파일, 앱에 번들링할 수는 없다. 그럼 어떻게 배포하나. 이 글은 5편에서 1B 모델의 실제 한계를 정리했다. 이번엔 모델 파일 자체를 어떻게 앱에 제공하는지를 다룬다. gemma3-1b-it-int4.litertlm은...

[Android] 온디바이스 AI 개발기 - 5편: 한계 실험기 (요약 / 분류 / 번역 직접 비교)

1B 모델, 실제로 써보면 어디까지 되나

[Android] 온디바이스 AI 개발기 - 5편: 한계 실험기 (요약 / 분류 / 번역 직접 비교) 설치하고 돌려봤다. 잘 되는 것도 있고, 쓰기 어려운 것도 있다. 이 글은 1~4편에서 왜 온디바이스인지, 어떤 엔진을 쓰는지, 세팅은 어떻게 하는지를 정리했다. 이번엔 실제로 여러 태스크를 돌려보면서 1B 모델의 현실적인 한계를 정리한다...

[Android] 온디바이스 AI 개발기 - 4편: GPU 가속, 어떤 기기에서 되나

libOpenCL.so가 있어야 GPU가 된다 — 지원 기기와 런타임 감지 방법

[Android] 온디바이스 AI 개발기 - 4편: GPU 가속, 어떤 기기에서 되나 Backend.GPU를 지정하면 끝인 줄 알았다. 그런데 기기마다 다르다. 이 글은 3편에서 LiteRT-LM 세팅 코드를 정리했다. GPU 백엔드 초기화 부분에서 fallback 처리가 필요하다고 했는데, 이번엔 왜 그런지, 어떤 기기에서 GPU가 되고...

[Android] 온디바이스 AI 개발기 - 3편: LiteRT-LM 실전 세팅 (Hilt, GPU, 스트리밍)

의존성 주입부터 GPU 백엔드 초기화, 스트리밍 응답 처리까지

[Android] 온디바이스 AI 개발기 - 3편: LiteRT-LM 실전 세팅 (Hilt, GPU, 스트리밍) 설치하고 모델 불러오고 응답 받기까지, 실제로 어떻게 짜는지 이 글은 2편에서 MediaPipe → LiteRT-LM으로 넘어온 이유를 정리했다. 이번엔 실제로 앱에 세팅하는 코드를 정리한다. 의존성 추가 Hilt로 ...

[Android] 온디바이스 AI 개발기 - 2편: MediaPipe에서 LiteRT-LM으로 (삽질기)

구글이 만든 MediaPipe인데 왜 deprecated? 그래서 어디로 갔나

[Android] 온디바이스 AI 개발기 - 2편: MediaPipe에서 LiteRT-LM으로 (삽질기) 구글이 만든 MediaPipe인데 왜 갑자기 deprecated? 그리고 대안은 뭔가 이 글은 1편에서 왜 온디바이스 AI를 쓰는지 정리했다. 이번엔 실제로 엔진을 고르면서 겪은 삽질기다. 처음엔 MediaPipe로 시작했다. 구글이...

[Android] 온디바이스 AI 개발기 - 1편: 왜 온디바이스인가

서버 AI말고 기기 안에서 돌리는 LLM, 왜 쓰는 걸까

[Android] 온디바이스 AI 개발기 - 1편: 왜 온디바이스인가 서버 AI를 두고 굳이 기기 안에서 LLM을 돌리는 이유 시작하게 된 계기 사이드 프로젝트로 앱에 AI 기능을 붙이려고 했다. 처음엔 당연히 Claude API, Gemini API 같은 서버 AI를 쓰려 했다. 그런데 찾아보다 보니 온디바이스 LLM이라는 게 생각보다 ...

[Android] 온디바이스 AI 삽질기 - 6편: LiteRT-LM으로 갈아타는데 Gemma 4가 나왔다

파인튜닝 열심히 했더니 세상이 바뀌어 있었다

[Android] 온디바이스 AI 삽질기 - 6편: LiteRT-LM으로 갈아타는데 Gemma 4가 나왔다 삽질의 끝에서 더 큰 삽질이 기다리고 있었다 MediaPipe로 돌아가긴 했는데 5편에서 .task 변환까지 마쳤다. 기기에서 동작도 했다. 그런데 결과가 영 마음에 안 들었다. TTFT 2~3초. 전체 응답 10초. 스트리밍 없음...

[Android] 온디바이스 AI 삽질기 - 5편: 파인튜닝 모델을 Android에 올리기 (변환 삽질기)

safetensors → tflite → .task → adb push, 중간에 막히는 게 한두 개가 아니다

[Android] 온디바이스 AI 삽질기 - 5편: 파인튜닝 모델을 Android에 올리기 (변환 삽질기) 학습은 끝났다. 이제 기기에 올리기만 하면 된다. — 라고 생각했다. 변환이 왜 필요한가 파인튜닝이 끝나면 모델은 HuggingFace 형식의 .safetensors 파일로 저장된다. 그런데 이걸 Android에서 바로 쓸 수는 없다...