Gemma:谷歌推出的轻量级开源大模型家族

FreeGuideOnline 最新 2026-06-28

bash pip install huggingface_hub huggingface-cli login

输入你的 HF Token(需具有访问 Gemma 的权限)


### 安装依赖

```bash
pip install transformers torch accelerate

加载模型与分词器

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "google/gemma-2b-it"

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.float16,   # 使用半精度节省显存
    device_map="auto"           # 自动分配到 GPU(如果可用)
)

生成文本示例

# 构建指令格式的输入
messages = [
    {"role": "user", "content": "用通俗的语言解释什么是机器学习,不超过 100 字。"}
]
# 将消息转换为模型期望的字符串格式(gemma-it 使用特殊标记)
input_text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

inputs = tokenizer(input_text, return_tensors="pt").to(model.device)

outputs = model.generate(
    **inputs,
    max_new_tokens=150,
    temperature=0.7,
    do_sample=True,
)

response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)

输出示例

机器学习就像教电脑从例子中学习,而不是一步步编程规则。比如你给电脑看很多猫的照片,告诉它这些是猫,它就能慢慢自己学会识别猫。这样遇到新的照片时,它也能判断是不是猫了。

用 Pipeline 更简单地实现

Hugging Face 提供了 pipeline 接口,几行代码即可使用:

from transformers import pipeline

pipe = pipeline(
    "text-generation",
    model="google/gemma-2b-it",
    model_kwargs={"torch_dtype": torch.float16},
    device_map="auto",
)

messages = [
    {"role": "user", "content": "列出三个保持健康的好习惯。"}
]
prompt = pipe.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
outputs = pipe(prompt, max_new_tokens=200, do_sample=True, temperature=0.8)
print(outputs[0]["generated_text"])

使用技巧与注意事项

  1. 显存优化:如显存不足,可加载 8-bit 量化版本(需安装 bitsandbytes):

    model = AutoModelForCausalLM.from_pretrained(
        model_id,
        load_in_8bit=True,
        device_map="auto"
    )
    
  2. 格式化输入:指令版模型对输入格式敏感,务必使用 apply_chat_template 或参考模型卡片中的格式,结束标记为 <eos>

  3. 控制生成参数

    • temperature (0~2):低值生成更确定,高值更随机。
    • top_p (0~1):核采样,一般设定为 0.9。
    • max_new_tokens:限制输出长度。
  4. System Prompt:Gemma 指令模型支持系统提示,可在对话开头加入角色设定,例如:

    messages = [
        {"role": "system", "content": "你是一个乐于助人的编程助手。"},
        {"role": "user", "content": "如何用 Python 读取 CSV 文件?"}
    ]
    

进阶:微调 Gemma(简要)

得益于其兼容性和开放协议,你可以使用标准的微调框架(如 Hugging Face TRL、LoRA 等方式)基于自己的数据定制 Gemma:

# 安装依赖
pip install transformers peft accelerate trl datasets

下面是一个使用 LoRA 对 Gemma 2B-it 进行指令微调的极简示例:

from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model
from datasets import load_dataset
from trl import SFTTrainer

model_id = "google/gemma-2b-it"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.float16,
)

lora_config = LoraConfig(
    r=8,
    lora_alpha=32,
    target_modules=["q_proj", "v_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)

# 准备数据集(需转换为对话格式或纯文本)
dataset = load_dataset("json", data_files="my_data.json")["train"]

trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    tokenizer=tokenizer,
    args=TrainingArguments(
        output_dir="./gemma-finetuned",
        per_device_train_batch_size=1,
        gradient_accumulation_steps=8,
        num_train_epochs=1,
        logging_steps=10,
        save_strategy="epoch",
        learning_rate=2e-4,
        fp16=True,
    ),
)

trainer.train()