模型简介
模型特点
模型能力
使用案例
🚀 Gemma无门控版本
Gemma是谷歌推出的轻量级、最先进的开源模型系列,基于与Gemini模型相同的研究和技术构建。它适用于多种文本生成任务,如问答、摘要和推理,且相对较小的规模使其能在资源有限的环境中部署。
🚀 快速开始
安装依赖
首先确保安装最新的transformers
库:
pip install -U transformers
运行模型
根据你的使用场景,选择合适的代码片段。
在CPU上运行模型
推荐使用torch.bfloat16
作为默认数据类型,必要时可使用 不同的精度。
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
torch_dtype=torch.bfloat16
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids, max_new_tokens=50)
print(tokenizer.decode(outputs[0]))
在单GPU或多GPU上运行模型
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
device_map="auto",
torch_dtype=torch.bfloat16
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
在GPU上使用不同精度运行模型
模型的原生权重以bfloat16
精度导出,你可以使用float16
(在某些硬件上可能更快),也可以使用float32
。
- 使用
torch.float16
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
device_map="auto",
torch_dtype=torch.float16,
revision="float16",
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
- 使用
torch.bfloat16
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
device_map="auto",
torch_dtype=torch.bfloat16
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
- 提升到
torch.float32
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
device_map="auto"
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
通过bitsandbytes
进行量化版本
- 使用8位精度(int8)
# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
quantization_config=quantization_config
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
- 使用4位精度
# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
quantization_config=quantization_config
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
其他优化
- Flash Attention 2
首先确保在你的环境中安装
flash-attn
:pip install flash-attn
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
+ attn_implementation="flash_attention_2"
).to(0)
在JAX / Flax中运行模型
使用仓库的flax
分支:
import jax.numpy as jnp
from transformers import AutoTokenizer, FlaxGemmaForCausalLM
model_id = "google/gemma-1.1-7b-it"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.padding_side = "left"
model, params = FlaxGemmaForCausalLM.from_pretrained(
model_id,
dtype=jnp.bfloat16,
revision="flax",
_do_init=False,
)
inputs = tokenizer("Valencia and Málaga are", return_tensors="np", padding=True)
output = model.generate(**inputs, params=params, max_new_tokens=20, do_sample=False)
output_text = tokenizer.batch_decode(output.sequences, skip_special_tokens=True)
查看此笔记本 以获取有关如何并行化JAX推理的全面指南。
聊天模板
指令微调模型使用聊天模板,用于对话时必须遵循该模板。最简单的应用方法是使用分词器的内置聊天模板,如下所示:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "google/gemma-1.1-7b-it"
dtype = torch.bfloat16
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
torch_dtype=dtype,
)
chat = [
{ "role": "user", "content": "Write a hello world program" },
]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
此时,提示包含以下文本:
<bos><start_of_turn>user
Write a hello world program<end_of_turn>
<start_of_turn>model
可以手动构建提示,遵循每个回合以<start_of_turn>
分隔符开头,然后是实体角色(user
或model
),回合以<end_of_turn>
标记结束。
准备好提示后,可以进行生成:
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=150)
微调
可以在google/gemma-7b
仓库的examples/
目录 中找到一些微调脚本。要将它们应用于此模型,只需将模型ID更改为google/gemma-1.1-7b-it
。
提供的脚本包括:
- 使用QLoRA在UltraChat数据集上进行有监督微调(SFT)的脚本
- 在TPU设备上使用FSDP进行SFT的脚本
- 可以在免费的Google Colab实例上运行,在英语名言数据集上进行SFT的笔记本
✨ 主要特性
- 轻量级架构:Gemma模型相对较小,适合在资源有限的环境中部署,如笔记本电脑、台式机或自有云基础设施。
- 多任务处理能力:适用于多种文本生成任务,包括问答、摘要和推理。
- 代码生成能力:通过接触代码数据,模型能够学习编程语言的语法和模式,提高代码生成和理解代码相关问题的能力。
- 数学推理能力:经过数学文本训练,模型具备逻辑推理和符号表示能力,能够处理数学查询。
📦 安装指南
确保安装最新的transformers
库:
pip install -U transformers
根据不同的运行环境和需求,可能还需要安装其他依赖,如accelerate
、bitsandbytes
、flash-attn
等。
💻 使用示例
基础用法
以下是在CPU上运行模型的基础用法:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
torch_dtype=torch.bfloat16
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids, max_new_tokens=50)
print(tokenizer.decode(outputs[0]))
高级用法
在GPU上使用不同精度运行模型,如使用torch.float16
:
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-7b-it",
device_map="auto",
torch_dtype=torch.float16,
revision="float16",
)
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
📚 详细文档
模型信息
描述
Gemma是谷歌推出的轻量级、最先进的开源模型系列,基于与Gemini模型相同的研究和技术构建。它们是仅解码器的大语言模型,支持英文,具有开放权重、预训练变体和指令微调变体。Gemma模型适用于多种文本生成任务,包括问答、摘要和推理。
输入和输出
- 输入:文本字符串,如问题、提示或待摘要的文档。
- 输出:生成的英文文本,作为对输入的响应,如问题的答案或文档的摘要。
模型数据
训练数据集
这些模型在包含广泛来源的文本数据集上进行训练,总计6万亿个标记。主要组成部分包括:
- 网页文档:多样化的网页文本确保模型接触到广泛的语言风格、主题和词汇,主要为英文内容。
- 代码:让模型接触代码有助于学习编程语言的语法和模式,提高代码生成和理解代码相关问题的能力。
- 数学:在数学文本上训练有助于模型学习逻辑推理、符号表示和处理数学查询。
数据预处理
对训练数据应用的关键数据清理和过滤方法包括:
- CSAM过滤:在数据准备过程的多个阶段应用严格的CSAM(儿童性虐待材料)过滤,确保排除有害和非法内容。
- 敏感数据过滤:使用自动化技术过滤训练集中的某些个人信息和其他敏感数据,使Gemma预训练模型更安全可靠。
- 其他方法:根据内容质量和安全性进行过滤,符合我们的政策。
实现信息
硬件
Gemma使用最新一代的张量处理单元(TPU) 硬件(TPUv5e)进行训练。TPU专为机器学习中常见的矩阵运算而设计,在训练大语言模型方面具有以下优势:
- 性能:能够处理训练大语言模型所需的大量计算,相比CPU可显著加速训练过程。
- 内存:通常配备大量高带宽内存,允许在训练过程中处理大型模型和批量大小,有助于提高模型质量。
- 可扩展性:TPU Pod(大型TPU集群)为处理大型基础模型的不断增长的复杂性提供了可扩展的解决方案,可以在多个TPU设备上分布训练,实现更快、更高效的处理。
- 成本效益:在许多情况下,与基于CPU的基础设施相比,TPU可以为训练大型模型提供更具成本效益的解决方案,特别是考虑到更快的训练速度节省的时间和资源。
软件
使用JAX 和ML Pathways 进行训练。
JAX允许研究人员利用最新一代的硬件(包括TPU),实现更快、更高效的大型模型训练。
ML Pathways是谷歌构建能够跨多个任务进行泛化的人工智能系统的最新努力,特别适用于基础模型,包括此类大语言模型。
JAX和ML Pathways结合使用,如关于Gemini模型系列的论文 中所述:“Jax和Pathways的‘单控制器’编程模型允许单个Python进程协调整个训练运行,大大简化了开发工作流程。”
评估
基准测试结果
预训练的基础模型在大量不同的数据集和指标上进行评估,以涵盖文本生成的不同方面:
基准测试 | 指标 | Gemma PT 2B | Gemma PT 7B |
---|---|---|---|
MMLU | 5-shot, top-1 | 42.3 | 64.3 |
HellaSwag | 0-shot | 71.4 | 81.2 |
PIQA | 0-shot | 77.3 | 81.2 |
SocialIQA | 0-shot | 49.7 | 51.8 |
BoolQ | 0-shot | 69.4 | 83.2 |
WinoGrande | partial score | 65.4 | 72.3 |
CommonsenseQA | 7-shot | 65.3 | 71.3 |
OpenBookQA | 47.8 | 52.8 | |
ARC-e | 73.2 | 81.5 | |
ARC-c | 42.1 | 53.2 | |
TriviaQA | 5-shot | 53.2 | 63.4 |
Natural Questions | 5-shot | 12.5 | 23.0 |
HumanEval | pass@1 | 22.0 | 32.3 |
MBPP | 3-shot | 29.2 | 44.4 |
GSM8K | maj@1 | 17.7 | 46.4 |
MATH | 4-shot | 11.8 | 24.3 |
AGIEval | 24.2 | 41.7 | |
BIG-Bench | 35.2 | 55.1 | |
------------------------------ | ------------- | ----------- | ----------- |
平均 | 44.9 | 56.4 |
伦理与安全
评估方法
评估方法包括结构化评估和对相关内容政策的内部红队测试。红队测试由多个不同团队进行,每个团队有不同的目标和人工评估指标。这些模型在与伦理和安全相关的多个不同类别上进行评估,包括:
- 文本到文本内容安全:对涵盖安全政策(包括儿童性虐待和剥削、骚扰、暴力和血腥、仇恨言论)的提示进行人工评估。
- 文本到文本代表性伤害:与相关学术数据集(如WinoBias 和BBQ数据集)进行基准对比。
- 记忆:对训练数据的记忆进行自动化评估,包括个人可识别信息暴露的风险。
- 大规模伤害:测试“危险能力”,如化学、生物、放射和核(CBRN)风险。
评估结果
伦理和安全评估结果在符合内部政策 的可接受阈值内,涵盖儿童安全、内容安全、代表性伤害、记忆、大规模伤害等类别。除了强大的内部评估外,还展示了知名安全基准(如BBQ、BOLD、Winogender、Winobias、RealToxicity和TruthfulQA)的结果。
Gemma 1.0
基准测试 | 指标 | Gemma 1.0 IT 2B | Gemma 1.0 IT 7B |
---|---|---|---|
[RealToxicity][realtox] | 平均 | 6.86 | 7.90 |
🔧 技术细节
Gemma模型基于与Gemini模型相同的研究和技术构建,是仅解码器的大语言模型。使用TPUv5e硬件和JAX、ML Pathways软件进行训练,在大规模文本数据集上进行预训练和指令微调。通过多种数据预处理方法确保训练数据的质量和安全性,在多个基准测试中表现良好,并经过严格的伦理和安全评估。
📄 许可证
本模型的使用需遵循条款。
相关链接
作者



