作者 / 资深软件工程师 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 的以下优势:
离线可用性:Wi-Fi 或蜂窝数据不可用时,您的应用也能完全正常运行。
成本优化:无需云服务费用,即可实现免费或免费增值应用。
低延迟响应:某些功能需要比服务器调用更快的执行速度。
隐私保护:数据无需离开设备或全程端到端加密,仍能享受智能处理。
Gemma 1B 用途极为广泛,您甚至可以针对自己的领域和用例进行微调。以下是我们推荐的几个 Gemma 1B 使用案例:
数据描述:将您的应用数据转化为吸引人的、可分享的描述,例如睡眠数据:->"您睡了 7 个小时,睡得很好,但在凌晨 2 点至 4 点之间醒了 5 次"。
游戏内对话:根据当前游戏状态创建 NPC 对话内容。
智能回复:在发送消息时根据对话内容智能地为用户生成回复建议。
文档问答:使用 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 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态!