LiteRT-LM이 탑재된 Chrome, Chromebook Plus, Pixel Watch의 온디바이스 생성형 AI

2025년 9월 24일
Yu-hui Chen Staff Software Engineer
Ram Iyengar Senior Staff Software Engineer

LiteRT-LM이 탑재된 Chrome, Chromebook Plus, Pixel Watch의 온디바이스 생성형 AI

사용자의 기기에서 직접 강력한 LLM(대규모 언어 모델)을 실행하면 제품 경험을 크게 향상시킬 수 있는 기능을 사용할 수 있습니다. 오프라인으로도 제공되므로 언제든지 쉽게 사용할 수 있으며, 비용 효율성(API 호출당 비용 없음)이 뛰어나서 텍스트 요약이나 교정 같은 실행 빈도가 높은 작업에 실용적입니다.

하지만 이러한 기가바이트 규모의 모델을 광범위한 에지 하드웨어에 배포하는 동시에 1초 미만의 TTFT(Time-to-First-Token) 지연 시간 및 요구되는 출력 품질 달성은 주요한 기술적 과제입니다. LiteRT-LM에서 바로 이러한 문제를 해결했습니다.

오늘, LiteRT-LM에 개발자가 직접 액세스할 수 있도록 하는 서비스를 제공하게 되어 기쁩니다. LiteRT-LM은 지금까지 Google 제품 전반에서 가장 광범위한 Gemini Nano 배포를 지원해온 프로덕션급 추론 프레임워크입니다. 검증 완료된 이 엔진은 Chrome, Chromebook Plus, Pixel Watch와 같은 제품에서 온디바이스 Gemini Nano 및 Gemma를 구동할 뿐만 아니라 MediaPipe LLM Inference API를 통해 다른 개방형 모델도 실행할 수 있도록 지원합니다.

이미 MediaPipe LLM Inference API, Chrome 기본 제공 AI API, Android AICore와 같은 상위 수준 API를 활용하여 LLM을 온디바이스로 실행할 수 있지만, 이제는 최초로 LiteRT-LM 엔진의 기본 C++ 인터페이스를 (미리보기로) 제공합니다. 이 하위 수준 액세스를 통해 자체 애플리케이션에 적합하게 맞춤 설정한 고성능 AI 파이프라인을 만들어, 선택한 플랫폼에서 엔진의 검증된 기술과 최적화된 성능을 활용할 수 있습니다. 오늘 바로 Google의 API를 활용하여 LLM 기반 애플리케이션 개발을 시작하고 최적화된 성능을 경험해 보세요.

특히 LiteRT-LM은 다음을 구동합니다.

  • Chrome의 웹 AI: 웹 개발자가 기본 제공 AI API를 통해 AI 기반 작업을 활용할 수 있도록 지원합니다. 이는 결정적으로 플랫폼 전반에 걸친 Gemini Nano의 가장 광범위한 배포를 나타냅니다.
  • Chromebook Plus에서 AI 기능: 사용자가 백만 개의 탭을 다루고 밀도가 높은 복잡한 텍스트를 이해하기 쉽도록 풀어줍니다.
  • Pixel Watch의 스마트 답장 같은 AI 기능.

LiteRT-LM과 Google AI Edge 스택이란?

LiteRT-LM은 Gemini Nano와 Gemma 같은 대규모 언어 모델을 실행하기 위해 설계되어 프로덕션 환경에서 테스트를 거친 추론 프레임워크로, 다양한 에지 기기에서 우수한 성능을 제공합니다. 본질적으로 LiteRT-LM은 통합하기 쉬운 API와 재사용 가능한 모듈 세트를 제공하는 완전 오픈소스 프로젝트입니다. 개발자는 LiteRT-LM을 사용하여 제품의 기능 요구 사항에 대해 정확하게 맞춤화된 사용자 설정 LLM 파이프라인을 구축할 수 있습니다.

LiteRT-LM이 어디에 적합한지 파악하려면 추상화의 최저 수준부터 최상 수준까지, 전체 Google AI Edge 스택을 살펴보면 도움이 됩니다.

  • LiteRT: 개별 ML/AI 모델을 온디바이스에서 효율적으로 실행하기 위한 기본 런타임입니다.
  • LiteRT-LM: LiteRT를 사용하여 여러 모델 및 처리 단계를 함께 실행하는 C++ 기반 LLM 파이프라인 프레임워크로, 복잡한 생성형 AI 작업을 위해 세션 복제, kv 캐시 관리, 프롬프트 캐싱/채점, 상태 저장 추론과 같은 과정을 통합해 복잡한 생성형 AI 작업을 수행합니다.
  • LLM Inference API: 생성형 AI용 상위 수준 네이티브 API(Kotlin, Swift, JS)로, LiteRT-LM을 기반으로 합니다.

이렇게 계층화된 구조는 프로젝트의 요구 사항에 가장 적합한 추상화 레이어에서 작업할 수 있는 유연성을 제공하는 한편, LiteRT-LM은 사용자 기기에 LLM(대규모 언어 모델)을 직접 대규모로 배포하려는 개발자에게 핵심 성능과 적응성을 제공합니다.

LiteRT-LM의 주요 특징은 다음과 같습니다.

  • 크로스 플랫폼: Android, Linux, macOS, Windows, Raspberry Pi에 배포할 수 있습니다.
  • 하드웨어 가속: 핵심 LiteRT 런타임을 활용하여 온디바이스 하드웨어의 잠재력을 최대한 발휘하며, CPU, GPU 및 NPU의 가속도 지원합니다.
  • 향상된 유연성: 모듈식 설계와 오픈소스 코드베이스는 추론 파이프라인 맞춤 설정에 최대한의 유연성을 제공하고 다양한 모바일 플랫폼과 가속기에서 멀티모달, 개방형 가중치 모델, 프로덕션에 즉시 사용 가능한 대규모 모델 추론과 같은 주요 기능을 지원합니다.

저희는 Chrome 브라우저, Chromebook, 최신 Pixel Watch 등에서 수억 대의 기기에 달하는 대규모 배포를 강조하는 두 가지 우수사례를 통해 이러한 다재다능함을 입증합니다.

Chrome 및 Chromebook Plus에서 Gemini Nano로 여러 LLM 기능 강화

Chrome에서 로컬로 Gemini Nano를 실행하는 기본 제공 AI Prompt API 데모

기가바이트 규모의 첨단 LLM에는 고유한 배포 과제가 따라옵니다. 일반적으로 메가바이트 단위인 기존 머신러닝 모델과 달리, LLM은 규모가 워낙 크기 때문에 동일한 에지 기기에서 여러 기능을 제공하기 위해 매개변수가 수십억 개인 여러 특화된 모델(예: 요약용 모델과 채팅용 모델)을 따로 배포한다는 것은 비현실적입니다.

이 문제를 극복하고자, LiteRT-LM은 여러 기능이 하나의 기반 모델을 공유할 수 있도록 설계되었으며 기능별 맞춤 설정을 위해 가벼운 LoRA를 사용합니다. 이는 무거운 공유 리소스를 사용자 상호작용의 구성 가능한 상태 저장 요소로부터 분리하는 명확한 아키텍처 패턴 덕분에 가능합니다. 이러한 분리는 엔진세션이라는 두 가지 핵심 클래스를 통해 이루어집니다.

  • 엔진(싱글톤): 애플리케이션 기능에서 공유되는 단일 인스턴스 역할을 합니다. 엔진은 기본 모델 및 모든 멀티모달 인코더와 같은 모든 고비용 공유 리소스를 소유하고 관리합니다. 런타임 환경 및 요구 사항에 따라 이러한 리소스의 로딩과 언로딩을 지능적으로 처리합니다.
  • 세션(상태 저장 인터페이스): 애플리케이션 기능이 상호작용하는 인터페이스입니다. 각 세션은 고유한 대화 또는 작업을 나타내며, 자체적인 상태, 기록, 컨텍스트를 관리합니다. 세션은 기본 모델의 동작을 맞춤 설정하기 위해 작업별로 특화된 작은 어댑터(LoRA 가중치)로 구성할 수 있습니다.
engine_session
LiteRT-LM 엔진/세션 시스템 아키텍처 다이어그램: 엔진(하단)은 중앙 리소스 관리자 역할을 하며 두 개의 고유한 세션(상단), 즉 요약용 세션과 이미지 이해용 세션을 생성합니다. 두 세션 모두 기본 텍스트 디코더 및 토크나이저와 같은 공통 리소스를 공유하지만, 이미지 이해 세션은 비전 인코더를 추가로 요청합니다. 활성 세션에는 오디오 인코더가 필요하지 않으므로 오디오 인코더는 엔진에 의해 메모리에서 오프로드됩니다.

이 아키텍처는 효율적이고 리소스 사용량이 적은 작업 전환을 가능하게 하는 주요 최적화 기법에 의해 지원됩니다.1

  • 컨텍스트 전환:세션은 Transformer의 KV 캐시, LoRA 가중치 등을 포함하여 전체 '컨텍스트'를 캡슐화합니다. OS와 마찬가지로, 작업 간 전환할 때 LiteRT-LM은 나가는 세션의 상태를 저장하고 들어오는 세션을 복원합니다. 이를 통해 공유 LLM이 항상 활성 작업에 대해 올바른 상태를 유지하도록 보장합니다.
  • 세션 복제: (예를 들어 컨텍스트 내 학습용으로) 공유 프롬프트 접두사를 다시 컴퓨팅하지 않도록 하기 위해서 사용자는 세션을 복제할 수 있습니다. 이렇게 하면 특정 시점의 계산된 KV 캐시 상태가 효과적으로 캐시되어 여러 새로운 작업이 해당 상태에서 분기할 수 있고 상당한 연산을 절약할 수 있습니다.
  • CoW(Copy-on-Write) KV 캐시: KV 캐시는 크기가 매우 클 수 있어서 (MB에서 GB 수준) 이를 복사하는 데 비용이 많이 듭니다. CoW를 사용하면 복제된 세션은 KV 캐시를 즉시 복사하지 않고 원래 버퍼에 대한 참조를 생성합니다. 실제 복사는 세션이 다른 세션의 콘텐츠와 충돌하는 새 데이터를 덮어쓰려고 할 때만 수행됩니다. 이러한 설계 덕분에 복제 속도가 극히 빨라지고 (10ms 미만) kv 캐시 버퍼를 재사용하여 메모리 사용량을 최소화할 수 있습니다.

이러한 아키텍처 기능과 최적화 기능은 Chrome과 Chromebook Plus에서 여러 고성능 온디바이스 LLM 기능을 성공적으로 생산화하는 데 핵심적인 역할을 합니다.

동시 작업 관리 외에도, 파편화된 기기 SKU 전반에서 ML 모델을 확장하는 것은 두 번째 주요한 기술적 장애물입니다. 각 SoC는 (CPU, GPU, NPU 전반에서) 구성 요소와 성능이 모두 다르므로, 모델 추론을 성능 기준에 맞춰 실행하기 위해서는 맞춤형 최적화가 필요합니다. LiteRT-LM은 LiteRT를 백엔드 위임을 위한 하위 수준의 런타임으로 활용하여 여러 하드웨어 가속기에서 확장성을 효율적으로 제공합니다. 더욱이, LiteRT-LM은 플랫폼별 구성요소(예: 파일 설명자 및 mmap)를 추상화하는 핵심 설계를 통해 폭넓은 플랫폼 호환성을 달성하며, 필요한 경우 네이티브 구현을 제공합니다.

1여기서 언급된 일부 최적화는 이 초기 미리보기에 포함되지 않지만 향후 버전에서 단계적으로 출시될 예정입니다.

컴퓨팅 성능이 낮은 기기에 언어 모델 배포: Pixel Watch

Pixel Watch의 스마트 답장 기능 데모

Pixel Watch와 같이 리소스가 극도로 제한된 기기에 LLM을 배포하는 것은 완전히 다른 차원의 도전 과제를 안겨줍니다. 이러한 플랫폼에서는 하나의 공유 모델로 여러 기능을 지원하는 것보다 가능한 한 가장 작은 바이너리 크기와 메모리 공간을 유지하면서 단일한 특정 기능 전용 모델을 배포하는 것으로 우선순위가 바뀝니다.

바로 이 부분이 LiteRT-LM의 모듈식 설계가 필수적인 지점입니다. Google의 엔진/세션 아키텍처는 복잡한 다중 작업 배포를 관리하는 데 강력하지만, 바이너리 크기는 웨어러블 기기의 엄격한 요구 사항을 충족하기에 충분하지 않습니다.

대신, 개발자는 이 프레임워크를 통해 핵심 구성요소에서 직접 맞춤 설정 파이프라인을 만들 수 있습니다. Pixel Watch의 경우 실행기, 토크나이저, 샘플러와 같은 최소한의 필수 모듈을 선택하고 전문 파이프라인을 구성했습니다. 이러한 접근 방식을 통해 아래 그림과 같이 기기의 리소스 제약 사항을 충족하도록 바이너리 크기와 메모리 사용량을 최소화할 수 있었습니다.

litert_lm_pixel_watch
Pixel Watch에 최적화된 경량 LLM 파이프라인

이 우수사례는 LiteRT-LM의 유연성을 보여줍니다. 개발자는 LiteRT-LM의 모듈식 구성요소를 통해 고성능 스마트폰부터 제약이 있는 웨어러블 기기까지 모든 대상 기기의 특정 리소스 및 기능 요구 사항에 맞게 정확하게 맞춤화된 LLM 배포를 만들 수 있습니다.

시작하기

지금 바로 시작해 사용자에게 강력하고 효율적인 온디바이스 생성형 AI를 제공하세요.

  1. LiteRT HuggingFace 커뮤니티를 살펴보고 Gemma 및 Qwen과 같은 호환 가능한 개방형 모델을 찾아보세요.
  2. GitHub 리포지토리를 살펴보고 C++ 미리보기에 액세스하여 샘플 코드를 확인해 보세요. 아래 스니펫 예시를 참조하세요.
  3. LiteRT-LM 런타임을 사용하여 기기에서 LLM(대규모 언어 모델)을 구축하고 실행하는 데 필요한 단계를 자세히 살펴보려면 설명서를 읽어보세요.
  4. 환경을 설정하면 다음 샘플 코드 스니펫으로 시작할 수 있습니다.
#include "YOUR_INCLUDE_DIRECTORY/engine.h"
 
// ...
 
// 1. Define model assets and engine settings.
auto model_assets = ModelAssets::Create(model_path);
CHECK_OK(model_assets);
 
auto engine_settings = EngineSettings::CreateDefault(
    model_assets, litert::lm::Backend::CPU);
 
// 2. Create the main Engine object.
absl::StatusOr<std::unique_ptr<Engine>> engine = Engine::CreateEngine(engine_settings);
CHECK_OK(engine);
 
// 3. Create a Session for a new conversation.
auto session_config = SessionConfig::CreateDefault();
absl::StatusOr<std::unique_ptr<Engine::Session>> session = (*engine)->CreateSession(session_config);
CHECK_OK(session);
 
// 4. Generate content using the high-level API.
absl::StatusOr<Responses> responses = (*session)->GenerateContent(
    {InputText("What is the tallest building in the world?")});
CHECK_OK(responses);
 
// 5. Print the response.
std::cout << *responses << std::endl;
C++

감사의 말

이 프로젝트의 기초 작업에 도움을 주신 주요 참여자 Advait Jain, Austin Sullivan, Clark Duvall, Haoliang Zhang, Ho Ko, Howard Yang, Marissa Ikonomidis, Mohammadreza Heydary, Ronghui Zhu, Tyler Mullen, Umberto Ravaioli, Weiyi Wang, Xu Chen, Youchuan Hu 님께 특별한 감사를 전하고 싶습니다.

또한 Agi Sferro, Chi Yo Tsai, David Massoud, Dillon Sharlet, Frank Barchard, Grant Jensen, Ivan Grishchenko, Jae Yoo, Jim Pollock, Majid Dadashi, Quentin Khan, Raman Sarokin, Ricky Liang, Tenghui Zhu, Terry (Woncheol) Heo, Yi-Chun Kuo, Yishuang Pang 등 팀원들의 큰 기여에도 감사드립니다.

Cormac Brick, Etienne Noël, Juhyun Lee, Lu Wang, Matthias Grundmann, Sachin Kotwani 등 저희 지도부의 지도와 지원에 힘입어 이 프로젝트를 성공리에 수행할 수 있었습니다.