模型简介
模型特点
模型能力
使用案例
库名称:transformers
许可证:gemma
小部件:
- 消息:
- 角色:用户
内容:大脑是如何工作的?
推理参数:
最大新生成标记数:200
额外授权标题:在Hugging Face上访问Gemma
额外授权提示:为了在Hugging Face上访问Gemma,您需要审阅并同意Google的使用许可。请确保您已登录Hugging Face账户并点击下方按钮。请求将立即处理。
额外授权按钮内容:确认许可
- 角色:用户
Gemma模型卡
模型页面:Gemma
此模型卡对应Gemma模型最新的2B指令调优版本。以下是Gemma系列的其他模型:
基础模型 | 指令调优模型 | |
---|---|---|
2B | gemma-2b | gemma-1.1-2b-it |
7B | gemma-7b | gemma-1.1-7b-it |
版本说明
这是Gemma 1.1 2B(IT),是对原始指令调优Gemma版本的更新。
Gemma 1.1采用了一种新颖的RLHF方法进行训练,显著提升了质量、编程能力、事实准确性、指令遵循和多轮对话质量。我们还修复了多轮对话中的一个错误,并确保模型响应不会总是以“当然”开头。
我们认为此版本在大多数用例中都有所改进,但仍鼓励用户在其特定应用中进行测试。旧版模型仍可在同一仓库中获取。我们感谢大家对Gemma的热情采用,并继续欢迎社区的反馈。
资源与技术文档:
使用条款:条款
作者:Google
模型信息
简要描述及输入输出的定义。
描述
Gemma是Google推出的一系列轻量级、前沿的开源模型,基于与创建Gemini模型相同的研究和技术构建。它们是仅解码器的文本到文本大语言模型,提供英文版本,包含开源权重、预训练变体和指令调优变体。Gemma模型适用于多种文本生成任务,包括问答、摘要和推理。其较小的体积使其能够在资源有限的环境(如笔记本电脑、台式机或自有云基础设施)中部署,从而普及前沿AI模型,促进创新。
使用方式
以下是一些快速上手的代码片段。首先确保安装pip install -U transformers
,然后根据用例复制相应片段。
在CPU上运行模型
推荐使用torch.bfloat16
作为默认数据类型,也可根据需要选择其他精度。
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
torch_dtype=torch.bfloat16
)
input_text = "写一首关于机器学习的诗。"
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids, max_new_tokens=50)
print(tokenizer.decode(outputs[0]))
在单/多GPU上运行
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto",
torch_dtype=torch.bfloat16
)
input_text = "写一首关于机器学习的诗。"
input_ids = tokenizer(input_text, return_tensors="pt").to("cuda")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
在GPU上使用不同精度运行
此模型的原始权重以bfloat16
精度导出。您可以使用float16
(在某些硬件上可能更快),加载模型时指定torch_dtype
。为方便起见,float16
版本的仓库已包含转换后的权重。
也可使用float32
(不指定dtype时默认),但不会提高精度(模型权重仅会上转为float32
)。
- 使用
torch.float16
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-1.1-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto",
torch_dtype=torch.float16,
revision="float16",
)
input_text = "写一首关于机器学习的诗。"
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
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto",
torch_dtype=torch.bfloat16
)
input_text = "写一首关于机器学习的诗。"
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-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
device_map="auto"
)
input_text = "写一首关于机器学习的诗。"
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-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
quantization_config=quantization_config
)
input_text = "写一首关于机器学习的诗。"
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-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-it",
quantization_config=quantization_config
)
input_text = "写一首关于机器学习的诗。"
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-2b-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并行推理的详细指南。
聊天模板
指令调优模型需遵循特定的聊天模板。最简单的方法是使用tokenizer的内置模板:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "google/gemma-1.1-2b-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": "写一个Hello World程序" },
]
prompt = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
此时提示文本如下:
<bos><start_of_turn>user
写一个Hello World程序<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-2b-it
即可适配。
我们提供:
- 在UltraChat数据集上使用QLoRA进行监督微调(SFT)的脚本
- 在TPU设备上使用FSDP进行SFT的脚本
- 可在免费版Google Colab实例上运行的SFT笔记本(基于英文名言数据集)
输入与输出
- 输入:文本字符串,如问题、提示或待总结的文档。
- 输出:生成的英文文本,如问题答案或文档摘要。
模型数据
模型训练数据及处理方式。
训练数据集
这些模型基于包含多种来源的6万亿token文本数据进行训练,关键组成部分包括:
- 网络文档:多样化的网页文本确保模型接触广泛的文体、主题和词汇(主要为英文内容)。
- 代码:帮助模型学习编程语言的语法和模式,提升代码生成或理解能力。
- 数学:训练数学文本增强逻辑推理和符号表示能力。
数据预处理
关键数据清洗和过滤方法:
- CSAM过滤:严格过滤儿童性虐待内容。
- 敏感数据过滤:自动过滤个人身份信息等敏感数据。
- 其他方法:基于内容质量和安全性的过滤(遵循Google政策)。
实现信息
模型内部细节。
硬件
Gemma使用最新一代TPUv5e硬件训练,优势包括:
- 性能:专为机器学习矩阵运算设计,显著加速训练。
- 内存:大容量高带宽内存支持大批量训练。
- 可扩展性:TPU Pods集群支持分布式训练。
- 成本效益:相比CPU基础设施更具性价比。
软件
使用JAX和ML Pathways训练。JAX支持利用TPU等硬件加速训练,ML Pathways是Google构建通用AI系统的最新框架。
评估
模型评估指标与结果。
基准测试结果
预训练基础模型在多个数据集和指标上的表现:
基准测试 | 指标 | 2B参数 | 7B参数 |
---|---|---|---|
MMLU | 5-shot top-1 | 42.3 | 64.3 |
HellaSwag | 0-shot | 71.4 | 81.2 |
...(其余基准测试数据省略)... | |||
平均 | 45.0 | 56.9 |
伦理与安全
伦理安全评估方法及结果。
评估方法
包括结构化评估和内部红队测试,覆盖以下类别:
- 文本内容安全:人工评估涉及儿童安全、暴力、仇恨言论等政策。
- 表征危害:基于WinoBias、BBQ等学术数据集。
- 记忆性:自动评估训练数据记忆风险。
- 大规模危害:测试CBRN(化学、生物、放射、核)风险等。
评估结果
伦理安全评估结果符合Google内部政策阈值。关键指标如下:
Gemma 1.0
基准测试 | 指标 | 2B IT | 7B IT |
---|---|---|---|
RealToxicity | 平均值 | 6.86 | 7.90 |
...(其余数据省略)... |
Gemma 1.1
基准测试 | 指标 | 2B IT | 7B IT |
---|---|---|---|
RealToxicity | 平均值 | 7.03 | 8.04 |
...(其余数据省略)... |
使用与限制
预期用途
- 内容创作与沟通:文本生成、聊天机器人、摘要等。
- 研究与教育:NLP研究、语言学习工具、知识探索等。
限制
- 训练数据:数据质量和多样性影响模型能力。
- 上下文与任务复杂度:清晰提示效果更佳,复杂任务可能受限。
- 语言歧义:可能难以理解微妙表达或讽刺。
- 事实准确性:可能生成错误或过时信息。
- 常识:依赖语言统计模式,缺乏常识推理。
伦理考量与风险
- 偏见与公平性:训练数据可能反映社会文化偏见。
- 错误信息与滥用:可能生成有害或误导性内容。
- 透明度与责任:模型卡提供架构、能力、限制等详细信息。
风险缓解
- 偏见延续:持续监控和去偏技术。
- 有害内容生成:实施内容安全机制。
- 恶意滥用:技术限制与用户教育结合。
- 隐私侵犯:训练数据已过滤PII,开发者需遵守隐私法规。
优势
相比同类尺寸模型,Gemma系列提供高性能开源实现,专为负责任AI开发设计,基准测试表现优异。


