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"])
使用技巧与注意事项
-
显存优化:如显存不足,可加载 8-bit 量化版本(需安装
bitsandbytes):model = AutoModelForCausalLM.from_pretrained( model_id, load_in_8bit=True, device_map="auto" ) -
格式化输入:指令版模型对输入格式敏感,务必使用
apply_chat_template或参考模型卡片中的格式,结束标记为<eos>。 -
控制生成参数:
temperature(0~2):低值生成更确定,高值更随机。top_p(0~1):核采样,一般设定为 0.9。max_new_tokens:限制输出长度。
-
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()