GenAI en el dispositivo para Chrome, Chromebook Plus y Pixel Watch con LiteRT-LM

24 DE SEPTIEMBRE DE 2025
Yu-hui Chen Staff Software Engineer
Ram Iyengar Senior Staff Software Engineer

GenAI en el dispositivo para Chrome, Chromebook Plus y Pixel Watch con LiteRT-LM

La ejecución de modelos de lenguaje grande (LLM) potentes directamente en el dispositivo de un usuario permite el acceso a funciones que pueden mejorar significativamente las experiencias de los productos. Su disponibilidad offline hace que estén disponibles fácilmente en todo momento, mientras que su rentabilidad (sin costos por llamada API) los hace prácticos para tareas de alta frecuencia, como el resumen de textos o la corrección de pruebas.

Sin embargo, la implementación de estos modelos a escala de gigabytes en una amplia variedad de hardware perimetral mientras se alcanzan velocidades de latencia de tiempo hasta el primer token (TTFT) por debajo del segundo y se logra la calidad de salida requerida es un gran desafío técnico. Abordamos estos desafíos en LiteRT-LM.

Hoy, nos complace comenzar a ofrecer a los desarrolladores acceso directo a LiteRT-LM, el marco de inferencia listo para la producción que impulsa algunas de las implementaciones más importantes de Gemini Nano en los productos de Google hasta la fecha. Este motor probado una y otra vez permite el acceso en el dispositivo a Gemini Nano y Gemma en productos como Chrome, Chromebook Plus y Pixel Watch, así como en otros modelos abiertos a través de la API de Inferencia LLM de MediaPipe.

Ya puedes aprovechar las API de alto nivel, como la API de Inferencia LLM de MediaPipe, las API de IA integradas en Chrome y Android AICore para ejecutar LLM en el dispositivo; pero ahora, por primera vez, estamos ofreciendo la interfaz C++ subyacente (en versión preliminar) del motor LiteRT-LM. Este acceso de bajo nivel te permitirá crear canalizaciones de IA personalizadas y de alto rendimiento adaptadas a tus aplicaciones, dándote acceso a la tecnología probada del motor y el rendimiento optimizado en la plataforma de tu elección. Aprovecha nuestras API para comenzar a crear ya aplicaciones impulsadas por LLM y disfrutar del rendimiento optimizado.

Específicamente, LiteRT-LM está impulsando:

  • La IA de la web en Chrome, lo que permite a los desarrolladores web aprovechar las tareas impulsadas por la IA a través de las API de IA integradas. Es la representación más importante de la implementación de mayor alcance de Gemini Nano en todas las plataformas.
  • Las capacidades de la IA en Chromebook Plus para ayudarte a hacer malabares cuando tienes un millón de pestañas abiertas y desmitificar pasajes de texto densos.
  • Las funciones de IA, como las respuestas inteligentes de Pixel Watch.

¿Qué son LiteRT-LM y la pila de Google AI Edge?

LiteRT-LM es un marco de inferencia probado en producción y diseñado para ejecutar modelos de lenguaje grandes, como Gemini Nano y Gemma, con alto rendimiento en una amplia variedad de dispositivos perimetrales. En esencia, LiteRT-LM es un proyecto de código abierto que ofrece una API fácil de integrar y un conjunto de módulos reutilizables. Esto permite a los desarrolladores crear canales LLM personalizados que se adapten con precisión a los requisitos de características de sus productos.

Para comprender dónde encaja LiteRT-LM, es útil observar la pila completa de Google AI Edge, desde el nivel más bajo hasta el más alto de abstracción:

  • LiteRT: El tiempo de ejecución fundamental para ejecutar modelos individuales de ML/IA de manera eficiente en el dispositivo.
  • LiteRT-LM: El marco de canalización LLM basado en C++ que utiliza LiteRT para ejecutar varios modelos y pasos de procesamiento, como la clonación de sesiones, la administración de caché KV, el almacenamiento en caché inmediato y la puntuación y la inferencia de estado para tareas complejas de IA generativa.
  • API de Inferencia de LLM: Las API nativas de alto nivel (Kotlin, Swift, JS) para GenAI, impulsadas por LiteRT-LM bajo la superficie.

Esta estructura en capas te brinda la flexibilidad para trabajar en la capa de abstracción que mejor se adapte a las necesidades de tu proyecto, mientras que LiteRT-LM proporciona el poder y la adaptabilidad centrales para el desarrollador que intenta implementar modelos de lenguaje grandes (LLM) a escala directamente en dispositivos de usuario.

Entre los aspectos más destacados de LiteRT-LM, se incluyen los siguientes:

  • Multiplataforma: Permite la implementación en Android, Linux, macOS, Windows y Raspberry Pi.
  • Aceleración de hardware: Aprovecha el tiempo de ejecución principal de LiteRT para acceder a todo el potencial del hardware del dispositivo, con soporte para la aceleración de CPU, GPU y NPU.
  • Flexibilidad mejorada: El diseño modular y la base de código configurada con código abierto proporcionan la máxima flexibilidad para la personalización del flujo de procesamiento de inferencia y admiten características clave, como la multimodalidad, los modelos de peso abierto y la inferencia de modelos grandes listos para la producción en varias plataformas móviles y aceleradores.

Demostramos esta versatilidad con dos estudios de casos en los que se destaca la implementación a escala, que abarca el navegador Chrome, las Chromebooks y los últimos Pixel Watches, para llegar a cientos de millones de dispositivos.

Potencia múltiples funciones de LLM con Gemini Nano en Chrome y Chromebook Plus

Una demostración de la API de indicaciones con IA integrada que ejecuta Gemini Nano localmente en Chrome

La escala de gigabytes de los LLM modernos presenta un desafío de implementación único. A diferencia de los modelos convencionales de aprendizaje automático, que suelen estar en el orden de los megabytes, el gran tamaño de los LLM hace que sea poco práctico implementar múltiples modelos especializados de parámetros multimillonarios, por ejemplo, uno para resumir y otro para chatear, para potenciar diferentes funciones en el mismo dispositivo perimetral.

Para superar esto, LiteRT-LM se diseñó para permitir que múltiples funciones compartan un solo modelo de base, utilizando LoRA ligeras para la personalización específica de la función. Esto es posible gracias a un patrón arquitectónico claro en el que se separan los recursos pesados y compartidos de los aspectos configurables y con estado de las interacciones del usuario. Esta separación se logra a través de dos clases básicas, el motor y la sesión:

  • Motor (singleton): Sirve como la única instancia que se comparte entre las funciones de la aplicación. Posee y administra todos los recursos costosos y compartidos, como el modelo base y cualquier codificador multimodal. Maneja de forma inteligente la carga y descarga de estos recursos en función del entorno de tiempo de ejecución y sus requisitos.
  • Sesión (interfaz con estado): Es la interfaz con la que interactúan las funciones de la aplicación. Cada sesión representa una conversación o tarea distinta, que administra su propio estado, historia y contexto. Una sesión se puede configurar con pequeños adaptadores específicos de la tarea (pesos LoRA) para personalizar el comportamiento del modelo base.
engine_session
Diagrama de la arquitectura del motor/sistema de sesión de LiteRT-LM. El motor (abajo) sirve como administrador central de recursos y genera dos sesiones distintas (arriba): una para el resumen y otra para la comprensión de imágenes. Ambas sesiones comparten recursos comunes, como el decodificador de texto base y el tokenizador, mientras que la sesión de comprensión de imágenes solicita además el codificador de visión. El motor descarga el codificador de audio de la memoria, ya que ninguna sesión activa lo requiere.

Esta arquitectura está respaldada por optimizaciones clave que permiten realizar un cambio de tareas eficiente y de baja huella1:

  • Cambio de contexto: Cada sesión encapsula su "contexto" completo, que incluye el caché KV de Transformer, los pesos LoRA, etc. Al igual que un sistema operativo, al cambiar entre tareas, LiteRT-LM guarda el estado de la sesión saliente y restaura el de la entrante. Esto garantiza que el LLM compartido siempre tenga el estado correcto para la tarea activa.
  • Clonación de sesiones: Para evitar volver a calcular los prefijos de solicitud compartidos (por ejemplo, para el aprendizaje en contexto), los usuarios pueden clonar una sesión. Así se almacena en caché de manera efectiva el estado de caché KV calculado en un punto específico, lo que permite que varias tareas nuevas se ramifiquen desde ese estado y se ahorre un cálculo significativo.
  • Copia en escritura (CoW) de caché KV: La caché KV puede ser muy grande (desde unos MB hasta varios GB), lo que encarece las copias. Con CoW, una sesión clonada no copia inmediatamente la caché KV, sino que crea una referencia al búfer original. Una copia real solo se realiza cuando una sesión está a punto de sobrescribir datos nuevos que entran en conflicto con el contenido de otra sesión. Este diseño hace que la clonación sea extremadamente rápida (<10 ms) y minimiza la huella de memoria al reutilizar los búferes de cache KV.

En conjunto, estas funciones de arquitectura y optimización son fundamentales para producir con éxito múltiples funciones de LLM en el dispositivo de alto rendimiento en Chrome y Chromebook Plus.

Más allá de la administración de tareas simultáneas, escalar los modelos de ML a través de SKU de dispositivos fragmentados presenta un segundo obstáculo técnico importante. Cada SoC varía en componentes y capacidades (entre CPU, GPU y NPU), lo que exige una optimización personalizada para ejecutar la inferencia del modelo de manera eficiente. LiteRT-LM aprovecha LiteRT como el tiempo de ejecución de nivel inferior para la delegación de backend, lo que le permite escalar de manera eficiente a través de múltiples aceleradores de hardware. Además, LiteRT-LM logra una amplia compatibilidad de plataforma a través de un diseño central que abstrae componentes específicos de la plataforma (como descriptores de archivos y mmap), para proporcionar implementaciones nativas cuando sea necesario.

1Ten en cuenta que algunas de las optimizaciones mencionadas no se incluyen en esta versión preliminar anticipada, pero se lanzarán gradualmente en versiones futuras.

Implementa modelos de lenguaje en dispositivos de bajo procesamiento: Pixel Watch

Una demostración de la función de respuestas inteligentes de Pixel Watch

La implementación de LLM en dispositivos con recursos muy limitados, como el Pixel Watch, presenta un conjunto de desafíos completamente diferente. En estas plataformas, la prioridad pasa de admitir múltiples funciones con un modelo compartido a implementar una única función dedicada con un tamaño binario y una superficie de memoria tan pequeños como sea posible.

Es aquí donde el diseño modular de LiteRT-LM se vuelve esencial. Si bien nuestra arquitectura de motor/sesión tiene la potencia para administrar implementaciones complejas y multitarea, su superficie binaria no es lo suficientemente eficiente para cumplir con los estrictos requisitos de un dispositivo wearable.

En su lugar, el marco permite a los desarrolladores crear un canal personalizado directamente desde sus componentes principales. Para el Pixel Watch, seleccionamos los módulos mínimos requeridos, como el ejecutor, el tokenizador y el muestreador, y ensamblamos una canalización especializada. Este enfoque nos permitió minimizar el tamaño binario y el uso de memoria para satisfacer las limitaciones de recursos del dispositivo, como se muestra en la siguiente figura.

litert_lm_pixel_watch
Flujo de procesamiento de LLM ligero optimizado para Pixel Watch

Este estudio de caso demuestra la flexibilidad de LiteRT-LM. Sus componentes modulares permiten a los desarrolladores crear implementaciones LLM que se adapten con precisión a los requisitos específicos de recursos y características de cualquier dispositivo de destino, desde teléfonos inteligentes potentes hasta wearables limitados.

Cómo comenzar

Da el paso y lleva una IA generativa potente y eficiente en el dispositivo a tus usuarios.

  1. Explora la comunidad LiteRT HuggingFace para descubrir modelos abiertos compatibles, como Gemma y Qwen.
  2. Sumérgete en el repositorio GitHub para acceder a la vista previa de C++ y explorar el código de muestra. Mira el fragmento de ejemplo que se encuentra a continuación.
  3. Para obtener una visión más detallada de los pasos necesarios para crear y ejecutar un modelo de lenguaje grande (LLM) en tu dispositivo utilizando el tiempo de ejecución de LiteRT-LM, lee esta documentación.
  4. Una vez que hayas configurado el entorno, podrás comenzar con el siguiente fragmento de código de ejemplo:
#include "YOUR_INCLUDE_DIRECTORY/engine.h"
 
// ...
 
// 1. Define los recursos del modelo y la configuración del motor.
auto model_assets = ModelAssets::Create(model_path);
CHECK_OK(model_assets);
 
auto engine_settings = EngineSettings::CreateDefault(
    model_assets, litert::lm::Backend::CPU);
 
// 2. Crea el objeto de motor principal.
absl::StatusOr<std::unique_ptr<Engine>> engine = Engine::CreateEngine(engine_settings);
CHECK_OK(engine);
 
// 3. Crea una sesión por cada conversación nueva.
auto session_config = SessionConfig::CreateDefault();
absl::StatusOr<std::unique_ptr<Engine::Session>> session = (*engine)->CreateSession(session_config);
CHECK_OK(session);
 
// 4. Genera contenido usando la API de alto nivel.
absl::StatusOr<Responses> responses = (*session)->GenerateContent(
    {InputText("What is the tallest building in the world?")});
CHECK_OK(responses);
 
// 5. Imprime la respuesta.
std::cout << *responses << std::endl;
C++

Agradecimientos

Nos gustaría agradecer especialmente a nuestros colaboradores clave por el trabajo fundamental que realizaron en este proyecto: 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 y Youchuan Hu.

También agradecemos las importantes contribuciones de los siguientes miembros del equipo: 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 y Yishuang Pang.

Este esfuerzo fue posible gracias a la guía y el apoyo de nuestros líderes: Cormac Brick, Etienne Noël, Juhyun Lee, Lu Wang, Matthias Grundmann y Sachin Kotwani.