TL;DR
네트워크 호출 없이 모바일 기기 내부에서 작동하는 이미지 이해 기능을 개발했습니다. 이 과정에서 거대 모델(teacher)의 정교한 표현력을 작은 모델(student)에게 전수하여 성능은 유지하면서 크기와 연산량을 획기적으로 줄이는 '지식 증류(knowledge distillation)' 기법을 핵심 전략으로 활용했습니다.
구체적으로는 모바일 앱에서 이미지 캡션 생성의 긴 지연을 해결하기 위해 일반적인 자기회귀(autoregressive, AR) 디코딩이 아닌 비자기회귀(non-autoregressive) 디코더로 대체해 200~400ms급 응답 시간을 달성했습니다. 품질은 '실사용 가능 여부'로 평가해야 한다고 보고 LLM(large language model) 기반 수락 비율(accept ratio) 지표를 도입했으며, 다단계 지식 증류로 최종 품질을 서비스 가능한 수준까지 끌어올렸습니다.
- 핵심 성과
- 초저지연: 비자기회귀로 5초 이상 → 200~400ms(12배 향상)
- 온디바이스: 172MB 모델로 실제 서비스 가능 수준 달성
들어가며
앞선 1편에서는 왜 '메신저'에 이미지 이해 기능이 필요했고 왜 이를 '온디바이스'로 풀어야 했는지, 지연·프라이버시·오프라인·배포 제약 등의 문제를 정의했습니다. 그 위에서 번역 파이프라인의 한계를 짚고, 지식 증류로 텍스트 인코더를 다국어(영어/일본어/중국어(번체)/태국어/한국어)로 확장해 온디바이스 이미지 검색을 실사용 가능한 수준으로 끌어올린 과정을 다뤘습니다.
이어서 2편에서는 메신저 UX에서 더 직접적으로 체감할 수 있는 기능인 이미지 캡션(짧고 자연스러운 문 장 생성)을 다룹니다. 기존의 거대 VLM(vision-language model)/자기회귀 방식 캡션 생성은 모바일에서 수초 단위 지연이 발생해 메신저 시나리오에 맞지 않았고, 단순 경량화만으로는 목표(수백 ms)를 달성하기 어려웠습니다.
이에 저희는 디코딩 방식을 비자기회귀으로 전환해 속도를 먼저 확보한 뒤, LLM 기반 수락 비율로 실사용 품질을 정의하고, 데이터 캡션 재생성(re-captioning)과 다단계 지식 증류로 최종 품질을 서비스 가능 수준까지 끌어올리는 학습 패턴을 구축했습니다. 그 과정에서 겪은 시행 착오와 핵심 선택들을 순서대로 풀어보겠습니다.
왜 기존 캡션 생성(자기회귀/거대 VLM)을 사용하는 것이 어려웠나
탈락한 후보 모델들
온디바이스 이미지 캡션 생성(image captioning)을 구현하기 위해 여러 모델을 조사했지만 대부분 모바일 환경에서 작동하는 것 자체가 어려웠습니다. BLIP-2, MobileVLM, PaliGemma, MiniCPM 계열은 모델 크기와 추론 지연 측면에서 현실적이지 않았습니다. 그나마 BLIP-1은 상대적으로 크기가 작고 라이선스가 명확해서 베이스라인으로 채택했지만, 양자화 이후에도 지연 시간이 5초 이상이어서 모바일 사용 시나리오에는 맞지 않았습니다.
최근에는 Pixel 9이나 10과 같은 최신 Android 기기에 Gemini Nano 모델이 탑재되면서 ‘Image Description’이라는 이름으로 캡션 기능을 제공하기 시작했는데요. 별도 외부 모델 없이 OS에서 자체적으로 기능을 제공한다는 것은 반가운 일입니다만 BLIP-1과 마찬가지로 앞서서 정의했던 사용 시나리오에는 적합하지 않아 제외했습니다.
| 모델 | 크기 |
|---|