동식이 블로그

[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에서 바로 쓸 수는 없다...

[Android] 온디바이스 AI 삽질기 - 4편: QLoRA 파인튜닝 실전, loss가 안 내려가면 어떡하나

밤에 스크립트 돌려놓고 다음 날 아침에 확인하는 삶

[Android] 온디바이스 AI 삽질기 - 4편: QLoRA 파인튜닝 실전, loss가 안 내려가면 어떡하나 학습 돌려놓고 다음 날 확인했더니 loss가 그대로였다 드디어 학습을 돌린다 환경도 세팅했고 데이터도 준비했다. Phase 1 학습 스크립트를 돌렸다. 1 python train_phase1.py 로그가 흘러나오기 시작했다....

[Android] 온디바이스 AI 삽질기 - 3편: M1 Mac Mini 16GB로 LLM 파인튜닝 환경 세팅

24GB도 아니고 M1 16GB로 1B 모델 파인튜닝 — 되긴 된다

[Android] 온디바이스 AI 삽질기 - 3편: M1 Mac Mini 16GB로 LLM 파인튜닝 환경 세팅 클라우드 GPU 빌리면 되지 않냐고? 일단 집에 있는 걸로 해봤다. 왜 로컬인가 파인튜닝 환경은 크게 두 가지 선택지가 있다. Google Colab / 클라우드 GPU — NVIDIA GPU 환경, 세팅 간단, 비용 발생...