Gemma 3 270M是 Google 推出的一款雖小但能力驚人的開放模型。它屬于 Gemma 家族,本質(zhì)上是將 Gemini 模型中使用的相同技術(shù)帶入了輕量級(jí)、可定制的形式中。
你可以在 不到一小時(shí)內(nèi)完成微調(diào),并將其大小壓縮到 300MB 以下,讓他直接在你的瀏覽器中運(yùn)行。
在這篇文章中,我將展示我是如何使用 Gemma 創(chuàng)建我自己的 emoji 翻譯器的——這是一個(gè)將文本轉(zhuǎn)換為表情符號(hào)并在本地運(yùn)行的小型模型。
![]()
第一步:教 Gemma “用 Emoji 思考”
Gemma 是一個(gè)通才。如果你讓它把文本翻譯成表情符號(hào),它會(huì)表現(xiàn)得有點(diǎn)太客氣了。
Prompt:
“Translate this text into emojis: what a fun party”
Model:
“Sure! Here is your emoji: ”
這不完全是我想要的目標(biāo)。對(duì)于我的應(yīng)用我想要 只有表情符號(hào)——不要單詞,不要“Sure!”,只要有趣的東西。
所以我們可以對(duì)他進(jìn)行微調(diào)
![]()
構(gòu)建一個(gè)微型數(shù)據(jù)集
從一個(gè)簡(jiǎn)單的 JSON 文件開始——輸入文本,輸出表情符號(hào)。
[
{ "input": "what a fun party", "output": "" },
{ "input": "good morning sunshine", "output": "??" },
{ "input": "so tired today", "output": "" }
]
在 Colab 中微調(diào)
以前微調(diào)需要 A100 GPU 和時(shí)間,現(xiàn)在不需要了。使用 QLoRA(僅更新少量參數(shù))在 Google Colab 的 免費(fèi) T4 GPU 上就可以微調(diào)。
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)
# 關(guān)鍵:為 Gemma 設(shè)置 pad_token
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto", # 可選:使用 auto dtype 以提高效率
device_map="auto" # 可選:如果可用,自動(dòng)映射到 GPU
)
dataset = load_dataset("json", data_files="emoji_dataset.json")
# 可選:如果序列很長(zhǎng),進(jìn)行預(yù)分詞和截?cái)啵═rainer 可以處理原始文本,但這樣更明確)
# 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 層
"gate_proj", "up_proj", "down_proj" # MLP 層
],
lora_dropout=0.05,
task_type="CAUSAL_LM" # 為了清晰起見顯式指定
)
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, # 可選:更頻繁地記錄日志
evaluation_strategy="no", # 如果你有 eval_dataset,請(qǐng)?jiān)诖颂砑?br/># group_by_length=True, # 可選:將相似長(zhǎng)度分組以提高效率
# max_steps=-1, # 可選:運(yùn)行完整的 epoch
)
# 關(guān)鍵:適用于 CLM 的正確整理器 (collator)
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=False # 因果語(yǔ)言模型 (Causal LM),非掩碼
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=dataset["train"],
tokenizer=tokenizer, # 如果未預(yù)分詞,則啟用自動(dòng)分詞
data_collator=data_collator
)
trainer.train()
就是這樣,訓(xùn)練后模型可以只生成表情符號(hào)。
![]()
第二步:讓它足夠小以適應(yīng) Web
微調(diào)后s模型仍然約有 1GB,按 LLM 標(biāo)準(zhǔn)來(lái)看很小但對(duì)于瀏覽器來(lái)說(shuō)還是很大。
為了在本地運(yùn)行它,我使用 LiteRT 將其量化為 4-bit(如果你更喜歡 Transformers.js,也可以選擇 ONNX)。
這個(gè)較小的版本非常適合 MediaPipe 或 Transformers.js,兩者都利用 WebGPU 來(lái)訪問(wèn)你的設(shè)備硬件。所以是它實(shí)際上是在你的瀏覽器中運(yùn)行的。
第三步:在瀏覽器中運(yùn)行模型
有趣的部分來(lái)了——沒有服務(wù)器,沒有 API,無(wú)需等待。
使用 MediaPipe 的 GenAI Tasks 直接在瀏覽器中加載并運(yùn)行模型。
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);
一旦緩存,它完全離線運(yùn)行。零延遲。完全隱私。甚至在飛行模式下也能工作。
![]()
更小的模型意味著加載更快的應(yīng)用和更好的最終用戶體驗(yàn)。
總結(jié)
這個(gè)項(xiàng)目從開始到結(jié)束花了我不到一個(gè)小時(shí),測(cè)試時(shí)它甚至使用我最喜歡的表情符號(hào)。如果你一直想嘗試本地 AI從小處著手,選擇一個(gè)簡(jiǎn)單的任務(wù),微調(diào) Gemma將其量化,然后讓它直接在你的瀏覽器中運(yùn)行。
因?yàn)?AI 的未來(lái)不僅僅是云端的大型模型——還有那些存在于你口袋里的小型模型。
https://avoid.overfit.cn/post/8e8e6d615ea1480385c1e56d39952dd1
Civil Learning
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.