Google AI Edge 赋能 | 实现 Gemma 3 在移动设备和 Web 上运行

作者 / 资深软件工程师 Marissa Ikonomidis、软件工程师 T.J. Alumbaugh、高级产品经理 Mark Sherwood 和首席工程师 Cormac Brick

Gemma 3 1B 是 Gemma 开放权重模型系列中的新模型,真正开辟了在移动设备和 Web 上分发应用内小语言模型 (SLM) 的可能性。在生产环境中部署 SLM 时,模型需要足够小,以便快速下载,运行速度要足够快以保持用户注意力,并支持广泛的终端用户设备。

Gemma 3 1B 的大小仅为 529MB,通过 Google AI Edge 的 LLM 推理,在预填充时能够以高达 2,585 token/秒的速度运行,一秒内即可处理一页内容。在您的应用中集成 Gemma 3 1B,便可使用自然语言来驱动您的应用,或者根据应用内数据或上下文生成内容,这些功能均可完全定制和微调。

在本文中,我们将通过一些在应用中使用 Gemma 3 的案例,帮助您了解如何在 Android 上开始使用 Gemma,我们还会深入介绍一些性能指标,并解释这一切是如何实现的。

△ 使用 Gemma 3 1B 在 Android 上将应用数据转化为个性化内容

我可以在应用中

使用 Gemma 3 做什么?

借助完全部署在设备上的 Gemma 3 1B 模型,您可以利用 AI Edge 的以下优势:

  1. 离线可用性:Wi-Fi 或蜂窝数据不可用时,您的应用也能完全正常运行。

  2. 成本优化:无需云服务费用,即可实现免费或免费增值应用。

  3. 低延迟响应:某些功能需要比服务器调用更快的执行速度。

  4. 隐私保护:数据无需离开设备或全程端到端加密,仍能享受智能处理。

Gemma 1B 用途极为广泛,您甚至可以针对自己的领域和用例进行微调。以下是我们推荐的几个 Gemma 1B 使用案例:

  1. 数据描述:将您的应用数据转化为吸引人的、可分享的描述,例如睡眠数据:->"您睡了 7 个小时,睡得很好,但在凌晨 2 点至 4 点之间醒了 5 次"。

  2. 游戏内对话:根据当前游戏状态创建 NPC 对话内容。

  3. 智能回复:在发送消息时根据对话内容智能地为用户生成回复建议。

  4. 文档问答:使用 Gemma 3 以及我们新的 AI Edge RAG SDK 来提取长篇文档并回答用户问题。

🔗 进行微调

https://colab.sandbox.google.com/github/google-ai-edge/mediapipe-samples/blob/main/codelabs/litert_inference/Gemma3_1b_fine_tune.ipynb

🔗 AI Edge RAG SDK

https://github.com/google-ai-edge/ai-edge-apis/tree/main/local_agents/rag

开始构建

第 1 步:加载演示版应用

从 GitHub 下载 Google AI Edge 的预构建演示应用,并将其部署到本地 Android 设备。为确保 Gemma 3 1B 发挥最佳性能,我们建议使用内存至少超过 4GB 的设备。

$ wget https://github.com/google-ai-edge/mediapipe-samples/releases/download/v0.1.3/llm_inference_v0.1.3-debug.apk$ adb install llm_inference_v0.1.3-debug.apk

您也可以按照我们的说明从源代码开始构建应用。

🔗 预构建演示应用

https://github.com/google-ai-edge/mediapipe-samples/releases/download/v0.1.3/llm_inference_v0.1.3-debug.apk

🔗 说明

https://github.com/google-ai-edge/mediapipe-samples/blob/main/examples/llm_inference/android/README.md

第 2 步:选择 CPU 或 GPU

Gemma 3 模型文件具备极大的部署灵活性,在设备的 CPU 或移动 GPU 上均可以流畅运行。您可以在首次启动应用时选择使用 CPU 或 GPU 运行 Gemma 3,也可以通过返回模型选择对话框来切换模型和后端。

第 3 步:从 Hugging Face 下载模型

在演示应用的模型选择界面上,选择您的模型。应用将引导您前往 Hugging Face 登录并接受 Gemma 使用条款。系统将直接从 LiteRT HuggingFace 社区组织下载 Gemma 3 1B (经过 int4 量化),然后对其进行一次优化以便在您的设备上运行 (只需要几秒钟)。

🔗 LiteRT HuggingFace 社区组织

https://huggingface.co/litert-community

第 4 步:运行模型

现在是时候让 Gemma 3 大显身手了!Gemma 3 由 Google AI Edge 的 LLM 推理 API 提供支持,旨在实现高效的设备端处理。

🔗 LLM 推理 API

https://developers.googleblog.com/en/large-language-models-on-device-with-mediapipe-and-tensorflow-lite/

您可以通过聊天与模型进行交互,也可以为其分配其他文本处理任务。例如以下指令:

  • 从博文 (如本文) 或文章中复制几段内容。

  • 切换到 LLM 演示版应用。

  • 将复制的文本粘贴到输入框中。

  • 输入 "为此内容创建社交媒体帖子。确保简短亲切,50 个单词以内",然后按回车键。

第 5 步:自定义 Gemma 3 (可选)

Gemma 开放权重模型系列的优点之一是由建模社区制作的微调版本。参照此 Colab,了解如何使用自己的数据打造专属 Gemma 3 1B 版本,对其进行量化,并在您自己的应用中使其在移动设备 (CPU 和 GPU) 上运行!

🔗 建模社区

https://huggingface.co/litert-community

🔗 Colab

https://colab.sandbox.google.com/github/google-ai-edge/mediapipe-samples/blob/main/codelabs/litert_inference/Gemma3_1b_fine_tune.ipynb

性能

△ 使用 Gemma 3 1B 在浏览器中创建本地社交媒体内容

这里的演示和测量针对 Gemma 3 1B 模型,其 int4 参数已通过量化感知训练 (QAT) 完成量化,从而显著节省存储空间并提高解码吞吐量。用于基准测试的 Gemma 3 模型支持多个预填充长度,包括 32、128、512 和 1,024,并使用 2,048 的上下文长度。

△ 该测量是在 cpufreq 调节器设置为 "性能" 的 Android Samsung Galaxy S24 Ultra 上进行的。观察到的性能可能因手机硬件和当前活动状态而有所差异。

△ 该测量是在 MacBook Pro 2023 (Apple M3 Pro 芯片) 上进行的。观察到的性能可能因计算机硬件和当前活动状态而有所差异。

工作原理

上述性能效果是通过大量的优化努力实现的。这些优化经专门设计,适用于开放权重模型,包括 Gemma。以下是一些关键特性,可显著提升性能并实现全新可复用功能。

量化:我们使用 4-bit 整数逐通道方案对 Gemma 模型应用了量化感知训练,以保持最佳性能、模型质量和大小。除了权重量化之外,我们还在执行期间将激活值动态量化为 int8,以充分利用 CPU 能力。

更新 KV 缓存布局:KV 缓存用于基于 Transformer 的模型中,以存储先前步骤中的键值对,以便用这些键值对生成后续 token。由于对 KV 缓存的读写频繁发生,因此这些操作的高效性非常重要。引入 KV 缓存布局可以减少额外的转置和重塑,从而优化这些操作。这种优化可将 Gemma 模型的 CPU 和 GPU 延迟分别改善 25% 和 20%。此外还添加了一个额外的操作,以更高效地在 GPU 上原地更新 KV 缓存。

减少加载时间:为了充分利用 CPU 和 GPU 处理能力,我们使用了专门的张量布局。生成这些经优化的权重布局可能需要时间、电量和大量内存。在首次模型加载期间,系统将权重以优化格式缓存在磁盘上,而后续加载期间,系统会从缓存中读取权重。如果进一步优化张量布局,现有缓存将自动失效,新格式将在下一次模型加载期间存储到磁盘上。

GPU 权重共享:LLM 推理过程有两个阶段:预填充和解码。这些阶段通常为其各自的模型使用独立的资源。为了大幅减少 LLM 的内存占用,两个阶段可以共享相同的权重。虽然这项技术并非全新,但这是首次在 LiteRT Runtime 和 GPU Delegate 中以易于复用的方式实现。对于支持此功能的操作,GPU Delegate 会检查权重是否已存在于 GPU 内存中,并且可以复用。未来,其他模型将能够轻松利用这一功能。

未来计划

在 Gemma 3 的开发过程中,我们专注于提供卓越的性能,同时为开放权重模型构建可复用的基础设施。2025 年,我们计划利用这项工作成果来支持更广泛的第三方模型。我们打算通过持续的性能优化和进一步降低内存占用,让大家可以更轻松地在更广泛的设备上使用模型。您可以在 GitHub 上设置 ai_edge_torch 的通知来了解最新开发进展,敬请关注即将推出的更多功能!

🔗 ai_edge_torch

https://github.com/google-ai-edge/ai-edge-torch

欢迎您持续关注 "Android 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值