拥有自己的 AI:学习如何微调 Gemma 3 270M 并在设备上运行

2025年10月8日
Ian Ballantyne Senior Developer Relations Engineer Google DeepMind
Jason Mayes Web AI Lead

Gemma 是一组最先进的轻量级开源模型,基于支撑我们 Gemini 模型的同一技术构建而成。它提供多种规模版本,任何人都可以在自己的基础设施上进行适配和运行。这种性能与易用性的结合,使其在各种任务和领域中已获得超过 2.5 亿次下载,以及 85,000 个由社区发布的变体。

无需昂贵的硬件就能创建高度专业化的自定义模型。Gemma 3 270M 体积小巧,可让您快速针对新用例进行微调,然后部署到设备上,让您能够灵活地进行模型开发,并完全掌控这款强大的工具。

为展示这一过程的简易性,本文将通过一个示例,带您训练自己的模型,将文本翻译成表情符号,并在 Web 应用中进行测试。您甚至可以教会模型使用您在现实生活中常用的特定表情符号,从而打造一个专属表情符号生成器。欢迎在实时演示中亲自体验。

我们将在一小时内引导您完成创建特定任务模型的全流程。您将学习如何:

  1. 微调模型:使用自定义数据集训练 Gemma 3 270M,创建专属“表情符号翻译器”
  2. 量化和转换模型:优化模型以实现设备端推理,将其内存占用减少到 300MB 以下
  3. 在 Web 应用中部署:使用 MediaPipeTransformers.js 在简单的 Web 应用中运行模型客户端

第 1 步:通过微调自定义模型行为

大型语言模型开箱即用,功能全面。如果您让 Gemma 将文本翻译成表情符号,则可能会得到超出预期的内容,比如一些闲聊用语。

提示:
Translate the following text into a creative combination of 3-5 emojis: "what a fun party"

模型输出(示例):
Sure! Here is your emoji: 🥳🎉🎈

对于我们的应用来说,Gemma 需要只输出表情符号。虽然您可以尝试复杂的提示工程,但要确保特定的输出格式并让模型学习新知识,最可靠的方法是使用示例数据对其进行微调。因此,要让模型学会使用特定的表情符号,需要用包含文本与表情示例的数据集来训练该模型。

模型得到的示例越多,学习效果就越好,因此您可以通过让 AI 为同一个表情符号输出生成不同的文本短语,轻松提升数据集的稳健性。为了增添趣味性,我们用与流行歌曲和粉丝群体相关的表情符号进行了这样的操作:

creating-dataset-for-finetuning (2)
如果您希望模型记住特定的表情符号,请在数据集中提供更多示例。

过去,微调模型需要大量的 VRAM。然而,借助量化低秩自适应 (QLoRA) 这种参数高效微调 (PEFT) 技术,我们只需更新少量权重。这大大降低了内存需求,使您能够在 Google Colab 上使用免费的 T4 GPU 加速,在几分钟内完成对 Gemma 3 270M 的微调。

您可以从示例数据集入手,或使用您自己的表情符号填充模板。然后,您可以运行微调笔记本来加载数据集、训练模型,并测试新模型与原始模型的性能。

第 2 步:针对 Web 量化并转换模型

得到自定义模型后,您可以用它做什么呢?由于我们通常在移动设备或电脑上使用表情符号,所以将模型部署到设备端的应用程序中是合理的选择。

原始模型虽然很小,但仍然超过 1GB。为了确保快速加载的用户体验,我们需要缩小模型大小。我们可以使用量化来实现这一点,这是一种将模型权重的精度降低的过程(例如,从 16 位降为 4 位整数)。这种方法在许多任务上几乎不影响性能,却能显著减小文件大小。

gemma-quantization-for-ondevice
模型越小,应用程序的加载速度就越快,最终用户的体验就越好。

如要使模型适用于 Web 应用,请使用适用于 MediaPipe 的 LiteRT 转换笔记本或适用于 Transformers.js 的 ONNX 转换笔记本,一步完成量化和转换。这些框架利用 WebGPU(一种现代 Web API,允许应用程序访问本地设备的硬件进行计算),支持在浏览器中以客户端方式运行 LLM,省去了复杂的服务器部署和每次调用的推理成本。

第 3 步:在浏览器中运行模型

现在,您可以直接在浏览器中运行自定义模型!下载我们的示例 Web 应用,然后更改一行代码以插入您的新模型。

MediaPipe 和 Transformers.js 都让这个过程变得十分简单。下面是一个在 MediaPipe 工作器中运行推理任务的示例:

// Initialize the MediaPipe Task
const genai = await FilesetResolver.forGenAiTasks('https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm');
llmInference = await LlmInference.createFromOptions(genai, {
    baseOptions: { modelAssetPath: 'path/to/yourmodel.task' }
});
 
// Format the prompt and generate a response
const prompt = `Translate this text to emoji: what a fun party!`;
const response = await llmInference.generateResponse(prompt);
JavaScript

当模型缓存在用户设备上后,后续的请求会在本地以极低延迟运行,用户数据将保持完全私密,而且即使在离线状态下,应用也能正常运行。

喜欢您的应用?那就把它上传到 Hugging Face Spaces 分享出来吧(就像演示版一样)。

未来计划

您无需成为 AI 专家或数据科学家即可创建专用的 AI 模型。您可以使用相对较小的数据集来增强 Gemma 模型的性能,这只需要几分钟,而不是几小时。

我们希望这些内容能激发您创造属于您自己的模型变体。通过运用这些技术,您可以构建出既能满足个性化需求、又能带来卓越用户体验的强大 AI 应用——快速、私密,并且让任何人都能随时随地使用。

该项目的完整源代码和资源可以帮助您入门: