模型简介
模型特点
模型能力
使用案例
🚀 Gemma模型卡片
Gemma是谷歌推出的轻量级、最先进的开源模型家族,基于与Gemini模型相同的研究和技术构建。它适用于多种文本生成任务,如问答、摘要和推理,且相对较小的规模使其能在资源有限的环境中部署。
🚀 快速开始
安装依赖
首先确保安装transformers
库:
pip install -U transformers
运行模型示例
在CPU上运行模型
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 = "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-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-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上使用不同精度运行模型
- 使用
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 = "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
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 = "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-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-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-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-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-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-1.1-2b-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-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推理的全面演练。
聊天模板
指令调优模型使用聊天模板,在对话使用时必须遵守。最简单的应用方法是使用分词器的内置聊天模板,如下所示:
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": "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-2b-it
。
我们提供:
- 一个使用QLoRA在UltraChat数据集上执行监督微调(SFT)的脚本。
- 一个使用FSDP在TPU设备上执行SFT的脚本。
- 一个可以在免费层Google Colab实例上运行的笔记本,用于在英语名言数据集上执行SFT。
输入和输出
- 输入:文本字符串,例如问题、提示或要总结的文档。
- 输出:针对输入生成的英语文本,例如问题的答案或文档的摘要。
✨ 主要特性
- 轻量级架构:Gemma是轻量级的开源模型家族,适合在资源有限的环境中部署。
- 多任务处理:适用于多种文本生成任务,如问答、摘要和推理。
- 新型RLHF训练:Gemma 1.1使用新型RLHF方法训练,在质量、编码能力、事实性、指令遵循和多轮对话质量方面有显著提升。
- 数据多样性:使用包含网络文档、代码和数学文本的多样化数据集进行训练,能够处理各种不同的任务和文本格式。
📚 详细文档
模型信息
描述
Gemma是谷歌推出的轻量级、最先进的开源模型家族,基于与Gemini模型相同的研究和技术构建。它们是仅解码器的文本到文本大语言模型,支持英语,具有开放权重、预训练变体和指令调优变体。Gemma模型适用于多种文本生成任务,包括问答、摘要和推理。其相对较小的规模使其能够在笔记本电脑、台式机或自己的云基础设施等资源有限的环境中部署,使更多人能够使用最先进的人工智能模型,促进创新。
模型数据
训练数据集
这些模型在包含各种来源的文本数据集上进行训练,总计6万亿个标记。主要组成部分包括:
- 网络文档:多样化的网络文本集合,确保模型接触到广泛的语言风格、主题和词汇。主要是英语内容。
- 代码:让模型接触代码有助于学习编程语言的语法和模式,提高生成代码或理解代码相关问题的能力。
- 数学:在数学文本上进行训练有助于模型学习逻辑推理、符号表示和解决数学查询。
这些多样化数据源的组合对于训练一个能够处理各种不同任务和文本格式的强大语言模型至关重要。
数据预处理
对训练数据应用了以下关键的数据清理和过滤方法:
- CSAM过滤:在数据准备过程的多个阶段应用了严格的CSAM(儿童性虐待材料)过滤,以确保排除有害和非法内容。
- 敏感数据过滤:为了使Gemma预训练模型安全可靠,使用自动化技术从训练集中过滤出某些个人信息和其他敏感数据。
- 其他方法:根据内容质量和安全性进行过滤,符合我们的政策。
实现信息
硬件
Gemma使用最新一代的张量处理单元(TPU)硬件(TPUv5e)进行训练。
训练大语言模型需要大量的计算能力。TPU专门为机器学习中常见的矩阵运算而设计,在这个领域具有以下优势:
- 性能:TPU专门用于处理训练大语言模型涉及的大量计算。与CPU相比,它们可以显著加速训练。
- 内存:TPU通常配备大量高带宽内存,允许在训练期间处理大型模型和批量大小。这有助于提高模型质量。
- 可扩展性:TPU Pod(大型TPU集群)为处理大型基础模型的不断增长的复杂性提供了可扩展的解决方案。可以在多个TPU设备上分布训练,以实现更快、更高效的处理。
- 成本效益:在许多情况下,与基于CPU的基础设施相比,TPU可以为训练大型模型提供更具成本效益的解决方案,尤其是考虑到更快的训练节省的时间和资源。
- 这些优势符合谷歌的可持续运营承诺。
软件
使用JAX和ML Pathways进行训练。
JAX允许研究人员利用最新一代的硬件(包括TPU)来更快、更高效地训练大型模型。
ML Pathways是谷歌构建能够跨多个任务进行泛化的人工智能系统的最新努力。这特别适用于基础模型,包括这样的大语言模型。
如关于Gemini模型家族的论文所述,JAX和ML Pathways一起使用:“Jax和Pathways的‘单控制器’编程模型允许单个Python进程编排整个训练运行,大大简化了开发工作流程。”
评估
基准测试结果
预训练的基础模型在大量不同的数据集和指标上进行评估,以涵盖文本生成的不同方面:
基准测试 | 指标 | 2B参数 | 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 |
BooIQ | 0-shot | 69.4 | 83.2 |
WinoGrande | 部分得分 | 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 |
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 | |
平均 | 45.0 | 56.9 |
伦理和安全
评估方法
我们的评估方法包括结构化评估和对相关内容政策的内部红队测试。红队测试由多个不同的团队进行,每个团队有不同的目标和人工评估指标。这些模型在与伦理和安全相关的多个不同类别上进行评估,包括:
- 文本到文本内容安全:对涵盖安全政策的提示进行人工评估,包括儿童性虐待和剥削、骚扰、暴力和血腥以及仇恨言论。
- 文本到文本代表性危害:与相关学术数据集(如WinoBias和BBQ数据集)进行基准测试。
- 记忆:对训练数据的记忆进行自动化评估,包括个人身份信息暴露的风险。
- 大规模危害:测试“危险能力”,如化学、生物、放射性和核(CBRN)风险。
评估结果
伦理和安全评估的结果在可接受的阈值范围内,符合内部政策,涉及儿童安全、内容安全、代表性危害、记忆和大规模危害等类别。除了强大的内部评估外,还展示了知名安全基准(如BBQ、BOLD、Winogender、Winobias、RealToxicity和TruthfulQA)的结果。
Gemma 1.0
基准测试 | 指标 | Gemma 1.0 IT 2B | Gemma 1.0 IT 7B |
---|---|---|---|
RealToxicity | 平均 | 6.86 | 7.90 |
BOLD | 45.57 | 49.08 | |
CrowS-Pairs | top-1 | 45.82 | 51.33 |
BBQ Ambig | 1-shot, top-1 | 62.58 | 92.54 |
BBQ Disambig | top-1 | 54.62 | 71.99 |
Winogender | top-1 | 51.25 | 54.17 |
TruthfulQA | 44.84 | 31.81 | |
Winobias 1_2 | 56.12 | 59.09 | |
Winobias 2_2 | 91.10 | 92.23 | |
Toxigen | 29.77 | 39.59 |
Gemma 1.1
基准测试 | 指标 | Gemma 1.1 IT 2B | Gemma 1.1 IT 7B |
---|---|---|---|
RealToxicity | 平均 | 7.03 | 8.04 |
BOLD | 47.76 | ||
CrowS-Pairs | top-1 | 45.89 | 49.67 |
BBQ Ambig | 1-shot, top-1 | 58.97 | 86.06 |
BBQ Disambig | top-1 | 53.90 | 85.08 |
Winogender | top-1 | 50.14 | 57.64 |
TruthfulQA | 44.24 | 45.34 | |
Winobias 1_2 | 55.93 | 59.22 | |
Winobias 2_2 | 89.46 | 89.2 | |
Toxigen | 29.64 | 38.75 |
使用和限制
预期用途
开放大语言模型(LLM)在各个行业和领域有广泛的应用。以下是可能的用途列表,但不全面。此列表的目的是提供有关模型创建者在模型训练和开发过程中考虑的可能用例的上下文信息。
- 内容创作和通信
- 文本生成:这些模型可用于生成创意文本格式,如诗歌、脚本、代码、营销文案和电子邮件草稿。
- 聊天机器人和对话式AI:为客户服务、虚拟助手或交互式应用程序提供对话界面。
- 文本摘要:生成文本语料库、研究论文或报告的简洁摘要。
- 研究和教育
- 自然语言处理(NLP)研究:这些模型可以为研究人员提供基础,用于实验NLP技术、开发算法和推动该领域的发展。
- 语言学习工具:支持交互式语言学习体验,帮助进行语法纠正或提供写作练习。
- 知识探索:通过生成摘要或回答关于特定主题的问题,帮助研究人员探索大量文本。
限制
- 训练数据
- 训练数据的质量和多样性显著影响模型的能力。训练数据中的偏差或差距可能导致模型响应的局限性。
- 训练数据集的范围决定了模型能够有效处理的主题领域。
- 上下文和任务复杂性
- 大语言模型更擅长可以用清晰提示和指令描述的任务。开放式或高度复杂的任务可能具有挑战性。
- 模型的性能可能受到提供的上下文量的影响(在一定程度上,更长的上下文通常会导致更好的输出)。
- 语言歧义与细微差别:自然语言本质上是复杂的。大语言模型可能难以理解微妙的细微差别、讽刺或比喻语言。
- 事实准确性:大语言模型根据从训练数据集中学到的信息生成响应,但它们不是知识库。它们可能生成不正确或过时的事实陈述。
- 常识:大语言模型依赖于语言中的统计模式。它们可能在某些情况下缺乏应用常识推理的能力。
伦理考虑和风险
大语言模型(LLM)的开发引发了一些伦理问题。在创建开放模型时,我们仔细考虑了以下方面:
- 偏差和公平性:在大规模真实世界文本数据上训练的大语言模型可能反映训练材料中嵌入的社会文化偏差。这些模型经过了仔细审查,在本卡片中描述了输入数据预处理和后续评估。
- 错误信息和滥用:大语言模型可能被滥用来生成虚假、误导或有害的文本。为模型的负责任使用提供了指南,见负责任的生成式AI工具包。
- 透明度和问责制:本模型卡片总结了模型的架构、能力、限制和评估过程的详细信息。一个负责任开发的开放模型为在整个AI生态系统中与开发者和研究人员分享创新提供了机会,使LLM技术更易于获取。
已识别的风险和缓解措施
- 偏差的延续:鼓励在模型训练、微调等使用案例中进行持续监测(使用评估指标、人工审查)并探索去偏差技术。
- 有害内容的生成:内容安全机制和指南至关重要。鼓励开发者根据其特定产品政策和应用用例谨慎行事并实施适当的内容安全保障措施。
- 恶意用途:技术限制以及对开发者和最终用户的教育有助于减轻大语言模型的恶意应用。提供了教育资源和用户举报滥用行为的机制。Gemma禁止使用政策中概述了Gemma模型的禁止用途。
- 隐私侵犯:模型在经过过滤以去除个人身份信息(PII)的数据上进行训练。鼓励开发者遵守隐私法规并使用隐私保护技术。
优势
在发布时,与类似规模的模型相比,这个模型家族提供了从头开始为负责任的AI开发设计的高性能开放大语言模型实现。
使用本文档中描述的基准评估指标,这些模型在性能上优于其他类似规模的开放模型替代方案。
🔧 技术细节
模型发布说明
这是Gemma 1.1 2B(IT),是对原始指令调优Gemma版本的更新。
Gemma 1.1使用新型RLHF方法进行训练,在质量、编码能力、事实性、指令遵循和多轮对话质量方面取得了显著提升。我们还修复了多轮对话中的一个错误,并确保模型响应不会总是以"Sure,"
开头。
我们相信这个版本在大多数用例中都有所改进,但我们鼓励用户在其特定应用中进行测试。之前的模型将继续在同一仓库中可用。我们感谢大家对Gemma的热情采用,并继续欢迎社区的所有反馈。
资源和技术文档
使用条款
作者
模型家族
基础版本 | 指令调优版本 | |
---|---|---|
2B | gemma-2b | gemma-1.1-2b-it |
7B | gemma-7b | gemma-1.1-7b-it |
📄 许可证
该模型的许可证为gemma。



