Chrome、Chromebook Plus 和 Pixel Watch 中采用 LiteRT-LM 的设备端生成式 AI

2025年9月24日
Yu-hui Chen Staff Software Engineer
Ram Iyengar Senior Staff Software Engineer

Chrome、Chromebook Plus 和 Pixel Watch 中采用 LiteRT-LM 的设备端生成式 AI

直接在用户的设备上运行强大的大语言模型 (LLM),可以打造出大幅提升产品体验的功能。这些模型在离线时也可用,因此用户可以随时使用,而优越的成本效益(并非按每次 API 调用收费)使其适用于文本总结或校对等高频任务。

然而,在广泛的边缘硬件上部署这些千兆字节级模型,同时实现亚秒级的首 Token 时间 (TTFT) 延迟速度和所需的输出质量是一项重大的技术挑战。我们已经在 LiteRT-LM 中解决这些问题。

今天,我们很高兴能对开发者开放 LiteRT-LM 的直接访问权限。LiteRT-LM 是一种可用于生产环境的推理框架,为迄今为止 Gemini Nano 在 Google 产品中的一些最广泛部署提供支持。这款经过实战考验的引擎可通过 MediaPipe LLM 推理 API,在 Chrome、Chromebook Plus 和 Pixel Watch 等产品以及其他开源模型中实现设备端 Gemini Nano 和 Gemma 部署。

您已经可以利用 MediaPipe LLM 推理 APIChrome 内置 AI APIAndroid AICore 等高阶 API 在设备端运行 LLM。但现在,我们首次提供 LiteRT-LM 引擎的底层 C++ 界面(预览版)。这种低级别访问使您能为自己的应用构建定制的高性能 AI 流水线,在您选择的平台上释放该引擎成熟的技术和优化的性能。立即利用我们的 API 开始构建 LLM 驱动的应用,体验这种优化的性能吧。

具体来说,LiteRT-LM 正在为以下功能提供支持:

  • Chrome 中的 Web AI,使 Web 开发者能够通过内置的 AI API 来利用 AI 驱动的任务。这代表 Gemini Nano 跨平台最广泛的部署,十分关键。
  • Chromebook Plus 上的 AI 功能,可帮助您处理一百万个标签页,并解读密集文本段落。
  • AI 功能,如 Pixel Watch 中的智能回复。

什么是 LiteRT-LM 和 Google AI Edge 堆栈?

LiteRT-LM 是一个经过生产环境测试的推理框架,专为运行大语言模型(如 Gemini Nano、Gemma)而设计,可在各种边缘设备上高性能运行。LiteRT-LM 的核心是一个完全开源的项目,该项目提供一个易于集成的 API 和一组可重用的模块。这使开发者能够根据其产品功能要求构建精确定制 LLM 流水线。

要了解 LiteRT-LM 的适用范围,请查看完整的 Google AI Edge 堆栈,包括从最低层到最高层的抽象:

  • LiteRT在设备端高效运行单个 ML/AI 模型的基础运行时。
  • LiteRT-LM基于 C++ 的 LLM 流水线框架,使用 LiteRT 运行多个模型和处理步骤,如会话克隆、KV 缓存管理、提示缓存/评分、状态推理,这些共同用于复杂的生成式 AI 任务。
  • LLM 推理 API生成式 AI 的高级原生 API(Kotlin、Swift、JS),由 LiteRT-LM 提供支持。

这种分层结构使您可以灵活选择在最适合项目需求的抽象层上工作,而 LiteRT-LM 为试图直接在用户设备上大规模部署大语言模型 (LLM) 的开发者提供了核心能力和适应性。

LiteRT-LM 的主要亮点包括:

  • 跨平台:支持跨 Android、Linux、macOS、Windows 和 Raspberry Pi 进行部署。
  • 硬件加速:利用我们的核心 LiteRT 运行时,充分发挥设备端硬件的潜力,支持 CPU、GPU 和 NPU 加速。
  • 更大的灵活性:其模块化设计和开源代码库为推理流水线定制提供了最大的灵活性,并支持各种移动平台和加速器上的多模态、开放权重模型和可用于生产环境的大模型推理等关键功能。

我们将通过两个案例研究展示这种多功能性,这两个案例研究重点介绍 LiteRT-LM 的大规模部署能力。该框架可部署至数亿台设备,包括 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 权重等。与操作系统类似,在切换不同任务时,LiteRT-LM 会保存传出会话的状态并恢复传入会话。这可确保共享 LLM 始终获取活动任务的正确状态。
  • 会话克隆:为避免重新计算共享提示前缀(例如,用于上下文学习),用户可以克隆会话。这能有效地在特定时候缓存计算的 KV 缓存状态,允许多个新任务从该状态发展出分支,并免去大量计算工作。
  • 写时复制 (CoW) KV 缓存:KV 缓存可能非常大(MB 级到 GB 级),这让复制成本很高。使用 CoW 后,克隆的会话不会立即复制 KV 缓存,而是创建对原始缓冲区的引用。只有当会话即将重与其他会话内容冲突的新数据时,才会实际执行复制。这种设计使克隆速度极快(<10 毫秒),并通过重用 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 的模块化设计变得至关重要。虽然我们的引擎/会话架构功能强大,可用于管理复杂的多任务部署,但其二进制文件占用空间过大,不足以满足可穿戴设备的严格要求。

相反,该框架可让开发者直接从其核心组件构建自定义流水线。对于 Pixel Watch,我们选择了最低要求的模块(例如执行器、分词器和采样器),并搭建了一个专门的流水线。这种方法使我们能够最大限度地减少二进制文件大小和内存用量,满足设备的资源限制,如下图所示。

litert_lm_pixel_watch
针对 Pixel Watch 优化的轻量化 LLM 流水线

本案例研究展示了 LiteRT-LM 的灵活性。其模块化组件使开发者能够创建精准定制的 LLM 部署,满足任何目标设备(从功能强大的智能手机到资源有限的可穿戴设备)的特定资源和功能要求。

开始构建

开始使用并为您的用户提供强大、高效的设备端生成式 AI。

  1. 探索 LiteRT HuggingFace 社区,发现 Gemma 和 Qwen 等兼容的开源模型。
  2. 深入探索我们的 GitHub repo,获取 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。