模型简介
模型特点
模型能力
使用案例
🚀 Gemma模型
Gemma是谷歌推出的轻量级、最先进的开源模型家族。它基于与Gemini模型相同的研究和技术构建,适用于多种文本生成任务,能在资源有限的环境中部署,为开发者和研究者提供强大的语言处理能力。
🚀 快速开始
本模型卡对应Gemma模型的7B指令调优版本。你也可以访问2B基础模型、7B基础模型和2B指令调优模型的模型卡。
资源和技术文档:
使用条款:条款
作者:Google
✨ 主要特性
Gemma是谷歌推出的轻量级、最先进的开源模型家族,基于与Gemini模型相同的研究和技术构建。它是仅解码器的大语言模型,支持英文,具有开放权重、预训练变体和指令调优变体。Gemma模型适用于多种文本生成任务,如问答、摘要和推理,因其相对较小的规模,可在资源有限的环境中部署。
📦 安装指南
在开始使用模型之前,你需要安装transformers
库:
pip install -U transformers
💻 使用示例
基础用法
以下是在CPU上运行模型的示例代码:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-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)
print(tokenizer.decode(outputs[0]))
高级用法
在单GPU或多GPU上运行模型
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-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上运行模型
- 使用
torch.float16
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-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
tokenizer = AutoTokenizer.from_pretrained("google/gemma-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-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-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-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-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-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-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-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
然后在加载模型时添加attn_implementation="flash_attention_2"
:
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16,
+ attn_implementation="flash_attention_2"
).to(0)
聊天模板
指令调优模型使用聊天模板进行对话。以下是一个应用聊天模板的示例:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "google/gemma-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)
此时,prompt
包含以下文本:
<bos><start_of_turn>user
Write a hello world program<end_of_turn>
<start_of_turn>model
你可以手动构建符合此格式的提示。准备好提示后,进行文本生成:
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
outputs = model.generate(input_ids=inputs.to(model.device), max_new_tokens=150)
print(tokenizer.decode(outputs[0]))
📚 详细文档
输入和输出
- 输入:文本字符串,如问题、提示或待摘要的文档。
- 输出:生成的英文文本,作为对输入的响应,如问题的答案或文档的摘要。
模型数据
训练数据集
这些模型在包含多种来源的文本数据集上进行训练,总计6万亿个标记。主要组成部分包括:
- 网页文档:多样化的网页文本集合,确保模型接触到广泛的语言风格、主题和词汇,主要为英文内容。
- 代码:让模型接触代码有助于学习编程语言的语法和模式,提高生成代码或理解代码相关问题的能力。
- 数学:在数学文本上进行训练有助于模型学习逻辑推理、符号表示和处理数学查询。
数据预处理
训练数据应用了以下关键的数据清理和过滤方法:
- CSAM过滤:在数据准备过程的多个阶段应用严格的CSAM(儿童性虐待材料)过滤,确保排除有害和非法内容。
- 敏感数据过滤:使用自动化技术过滤训练集中的某些个人信息和其他敏感数据,使Gemma预训练模型更安全可靠。
- 其他方法:根据内容质量和安全性进行过滤,符合我们的政策。
实现信息
硬件
Gemma使用最新一代的张量处理单元(TPU)硬件(TPUv5e)进行训练。TPU专为机器学习中的矩阵运算设计,具有性能高、内存大、可扩展性强和成本效益高等优势。
软件
训练使用了JAX和ML Pathways。JAX使研究人员能够利用最新一代的硬件进行大型模型的快速高效训练,ML Pathways适用于基础模型,包括此类大语言模型。
评估
基准测试结果
这些模型在多个不同的数据集和指标上进行评估,结果如下:
基准测试 | 指标 | 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 | 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 |
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 Dataset。
- 记忆:对训练数据的记忆进行自动化评估,包括个人身份信息暴露的风险。
- 大规模危害:测试“危险能力”,如化学、生物、放射性和核(CBRN)风险。
评估结果
伦理和安全评估结果在可接受的阈值内,符合内部政策。以下是一些知名安全基准测试的结果:
基准测试 | 指标 | 2B参数 | 7B参数 |
---|---|---|---|
RealToxicity | average | 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 | |
------------------------------ | ------------- | ----------- | --------- |
使用和限制
预期用途
开放大语言模型(LLMs)在各个行业和领域有广泛应用,包括:
- 内容创作和通信:文本生成、聊天机器人和对话式AI、文本摘要。
- 研究和教育:自然语言处理(NLP)研究、语言学习工具、知识探索。
限制
- 训练数据:训练数据的质量和多样性会影响模型的能力,数据中的偏差或差距可能导致模型响应的局限性。
- 上下文和任务复杂性:LLMs更擅长有明确提示和指令的任务,开放式或高度复杂的任务可能具有挑战性。
- 语言歧义与细微差别:自然语言复杂,LLMs可能难以理解微妙的细微差别、讽刺或比喻语言。
- 事实准确性:LLMs根据训练数据生成响应,但不是知识库,可能生成不正确或过时的事实陈述。
- 常识:LLMs依赖语言的统计模式,在某些情况下可能缺乏常识推理能力。
伦理考虑和风险
大语言模型的开发引发了一些伦理问题,在创建开放模型时,我们考虑了以下方面:
- 偏差和公平性:在大规模真实世界文本数据上训练的LLMs可能反映训练材料中的社会文化偏差,模型经过仔细审查、输入数据预处理和评估。
- 错误信息和滥用:LLMs可能被滥用于生成虚假、误导或有害的文本,提供了负责任使用的指南。
- 透明度和问责制:本模型卡总结了模型的架构、能力、限制和评估过程,开放模型为开发者和研究者提供了分享创新的机会。
风险识别和缓解措施
- 偏差的延续:鼓励在模型训练、微调等过程中进行持续监控和探索去偏技术。
- 有害内容的生成:内容安全机制和指南至关重要,开发者应根据具体产品政策和应用场景实施适当的内容安全保障措施。
- 恶意使用:技术限制和开发者及最终用户教育有助于减轻LLMs的恶意应用,提供了教育资源和报告机制。
- 隐私侵犯:模型在过滤了个人身份信息(PII)的数据上进行训练,鼓励开发者遵守隐私法规并采用隐私保护技术。
优势
在发布时,与同等规模的模型相比,该模型家族提供了高性能的开放大语言模型实现,专为负责任的AI开发而设计。根据本文档中描述的基准评估指标,这些模型表现优于其他同等规模的开放模型替代方案。
📄 许可证
本模型的许可证为gemma
。若要在Hugging Face上访问Gemma,你需要审查并同意Google的使用许可。请确保你已登录Hugging Face并点击下方按钮,请求将立即处理。
确认许可



