网页运行Gemma 3 270M
如果您曾经希望在笔记本电脑或手机上运行自己的小型 AI 模型(无需设置服务器或购买 GPU),我有一些好消息要告诉您。
认识一下 Gemma 3 270M——一款来自 Google 的小型但功能惊人的开源模型。它是 Gemma 系列的一部分,该系列本质上将 Gemini 模型中使用的相同技术融入了轻量级、可定制的形式。
有趣的是:你可以在不到一小时的时间内对其进行微调,将其大小缩减到 300MB 以下,并直接在浏览器中运行。
在这篇文章中,我将向你展示如何使用 Gemma 创建我自己的表情符号翻译器——一个将文本转换为表情符号并在本地运行的小型模型。
1、教 Gemma “用表情符号思考”
Gemma 开箱即用,是一个多面手。如果你让它把文本翻译成表情符号,它可能会表现得有点太客气了。
提示:
“将这段文字翻译成表情符号:多么有趣的派对”
模型:
“好的!这是你的表情符号:🥳R🎉R🎈Rqo;
接近了,但并非我最初的目标。对于我的应用,我只想使用表情符号——没有文字,没有“好的!”,只想要一些有趣的东西。
我决定对其进行微调。
2、构建一个小型数据集
我从一个简单的 JSON 文件开始——输入文本,输出表情符号。
[
{ "input": "what a fun party", "output": "🥳🎉🎈" },
{ "input": "good morning sunshine", "output": "☀️🌻😊" },
{ "input": "so tired today", "output": "😴💤" }
]
我也做了一些有趣的尝试——我问了 ChatGPT (讽刺的是)为同一组表情符号生成不同的短语。这有助于模型学习诸如“那是亮着的🔥R”→“🎉R🔥R🙌Rqo;”之类的变体。
3、在 Colab 中进行微调
微调过去需要 A100 GPU 和耐心。现在不用了。我使用 QLoRA(它只更新少量参数),在 Google Colab 的免费 T4 GPU 上对模型进行了微调。
以下是大致的概述:
from transformers import (
AutoModelForCausalLM,
AutoTokenizer,
Trainer,
TrainingArguments,
DataCollatorForLanguageModeling
)
from peft import LoraConfig, get_peft_model
from datasets import load_dataset
model_name = "google/gemma-3-270m"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Critical: Set pad_token for Gemma
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto", # Optional: Use auto dtype for efficiency
device_map="auto" # Optional: Auto-map to GPU if available
)
dataset = load_dataset("json", data_files="emoji_dataset.json")
# Optional: Pre-tokenize and truncate if sequences are long (Trainer can handle raw text, but this is explicit)
# def tokenize_function(examples):
# return tokenizer(examples["text"], truncation=True, max_length=512)
# dataset = dataset.map(tokenize_function, batched=True, remove_columns=dataset["train"].column_names)
lora_config = LoraConfig(
r=8,
lora_alpha=32,
target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj", # Attention layers
"gate_proj", "up_proj", "down_proj" # MLP layers
],
lora_dropout=0.05,
task_type="CAUSAL_LM" # Explicit for clarity
)
model = get_peft_model(model, lora_config)
training_args = TrainingArguments(
output_dir="./gemma-emoji",
num_train_epochs=3,
per_device_train_batch_size=4,
save_steps=100,
logging_steps=10, # Optional: Log more frequently
evaluation_strategy="no", # Add eval_dataset if you have one
# group_by_length=True, # Optional: Group similar lengths for efficiency
# max_steps=-1, # Optional: Run for full epochs
)
# Critical: Proper collator for CLM
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False # Causal LM, not masked
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
tokenizer=tokenizer, # Enables auto-tokenization if not pre-tokenized
data_collator=data_collator
)
trainer.train()
就是这样——训练完成后,我的模型开始只生成表情符号。
如果您希望模型记住特定的表情符号,请在数据集中提供更多示例。
4、使其足够小以适应 Web
经过微调后,模型大小保持在 1GB 左右——按照LLM的标准来说很小,但对于浏览器来说很大。
为了在本地运行,我使用 LiteRT 将其量化为 4 位(如果您更喜欢使用 Transformers.js,也可以选择 ONNX 路径)。
量化只是“用更少的位数存储数字”的高级数学。结果:模型占用更少的空间,但准确率几乎相同。我的模型最终大小不到 300MB。
这个较小的版本非常适合 MediaPipe 或 Transformers.js,它们都利用 WebGPU 访问您设备的硬件。所以是的——它实际上在您的浏览器中运行。
5、在浏览器中运行模型
最有趣的部分来了——无需服务器,无需 API,无需等待。
我使用 MediaPipe 的 GenAI Tasks 直接在浏览器中加载并运行我的模型。
const genai = await FilesetResolver.forGenAiTasks(
'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm'
);
const llmInference = await LlmInference.createFromOptions(genai, {
baseOptions: { modelAssetPath: 'path/to/yourmodel.task' }
});
const prompt = "Translate this text to emoji: what a fun party!";
const response = await llmInference.generateResponse(prompt);
console.log(response);
缓存后,它完全离线运行。零延迟。完全隐私。即使在飞行模式下也能正常工作。
更小的模型可以加快应用程序的加载速度,并为最终用户带来更好的体验。
6、为什么这很重要
这就是人工智能的发展方向——您可以管理的小型、私密、个性化的模型。
您不需要大型 GPU 或云 API。您可以微调、压缩和部署适合您应用程序的模型,并使其执行您训练的目标。
Gemma 3 270M 是一个优秀的平台——快速、轻量级且易于使用,方便您进行实验。
7、结束语
这个项目从开始到结束只花了我不到一个小时的时间,最终的模型感觉就像我自己的一样。它甚至在测试时使用了我最喜欢的表情符号。
所以,如果您一直想尝试本地人工智能,那就从小处着手吧。选择一个简单的任务,微调 Gemma,对其进行量化,然后让它直接在您的浏览器中运行。
因为人工智能的未来不仅仅在于云端的大型模型,更在于你口袋里的小型模型。
原文链接:How to Fine-Tune Gemma 3 270M and Run It On-Device
汇智网翻译整理,转载请标明出处