模型简介
模型特点
模型能力
使用案例
库名称: transformers
许可证: gemma
标签: []
小部件:
- 消息:
- 角色: 用户
内容: 大脑是如何工作的?
推理参数:
最大新令牌数: 200
访问提示标题: 在Hugging Face上访问Gemma
访问提示内容: 要访问Hugging Face上的Gemma,您需要审阅并同意Google的使用许可。请确保您已登录Hugging Face并点击下方按钮。请求将立即处理。
确认许可按钮内容: 确认许可
基础模型: google/gemma-7b
基础模型关系: 微调
- 角色: 用户
Gemma模型卡
模型页面: Gemma
此模型卡对应Gemma模型的7B指令版本。您还可以访问2B基础模型、7B基础模型和2B指令模型的模型卡。
资源与技术文档:
使用条款: 条款
作者: Google
模型信息
输入输出的简要定义及总结描述。
描述
Gemma是Google推出的一系列轻量级、先进的开放模型,基于与创建Gemini模型相同的研究和技术构建。它们是仅解码器的文本到文本大语言模型,提供英文版本,包含开放权重、预训练变体和指令调优变体。Gemma模型适用于多种文本生成任务,包括问答、摘要和推理。其相对较小的体积使其能够在资源有限的环境中部署,如笔记本电脑、台式机或自有云基础设施,从而普及先进AI模型的访问,促进创新。
使用方式
以下是一些快速运行模型的代码片段。首先确保安装pip install -U transformers
,然后复制适用于您用例的代码段。
微调模型
您可以在google/gemma-7b
仓库的examples/
目录下找到微调脚本和笔记本。要适配此模型,只需将模型ID更改为google/gemma-7b-it
。我们提供:
- 使用QLoRA在UltraChat数据集上进行监督微调(SFT)的脚本
- 在TPU设备上使用FSDP进行SFT的脚本
- 可在免费版Google Colab实例上运行的SFT笔记本,用于英文名言数据集
在CPU上运行模型
建议默认使用torch.bfloat16
数据类型,必要时可使用其他精度。
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 = "写一首关于机器学习的诗。"
input_ids = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**input_ids)
print(tokenizer.decode(outputs[0]))
在单/多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 = "写一首关于机器学习的诗。"
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-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-7b-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-7b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-7b-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)
聊天模板
指令调优模型使用必须遵守的聊天模板。最简单的方法是使用分词器的内置聊天模板,如下所示:
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": "写一个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
表示LLM响应),并以<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)
print(tokenizer.decode(outputs[0]))
输入和输出
- 输入: 文本字符串,如问题、提示或待总结的文档。
- 输出: 生成的英文文本,如问题答案或文档摘要。
模型数据
模型训练数据及其处理方式。
训练数据集
这些模型在包含多种来源的6万亿令牌文本数据集上训练,关键组成部分包括:
- 网络文档:多样化的网络文本确保模型接触广泛的风格、主题和词汇,主要为英文内容。
- 代码:帮助模型学习编程语言语法和模式,提高生成或理解代码相关问题的能力。
- 数学:训练数学文本帮助模型学习逻辑推理和符号表示,处理数学查询。
数据预处理
关键数据清洗和过滤方法:
- CSAM过滤:严格过滤儿童性虐待材料。
- 敏感数据过滤:自动过滤个人身份信息等敏感数据。
- 其他方法:基于内容质量和安全性的过滤,符合Google政策。
实现信息
模型内部细节。
硬件
使用最新一代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数据集。
- 记忆:自动评估训练数据记忆风险。
- 大规模危害:测试如化学、生物、放射性和核风险等"危险能力"。
评估结果
伦理安全评估结果符合内部政策阈值,安全基准如BBQ、BOLD等结果如下:
基准测试 | 指标 | 2B参数 | 7B参数 |
---|---|---|---|
RealToxicity | 平均 | 6.86 | 7.90 |
BOLD | 45.57 | 49.08 | |
...(其他安全数据)... |
使用与限制
预期用途
- 内容创作与沟通:文本生成、聊天机器人、摘要。
- 研究与教育:NLP研究、语言学习工具、知识探索。
限制
- 训练数据:数据质量和多样性影响模型能力。
- 上下文与任务复杂性:清晰提示表现更佳。
- 语言歧义:可能难以理解微妙表达。
- 事实准确性:可能生成不正确或过时信息。
- 常识:缺乏某些情境的常识推理。
伦理考量与风险
- 偏见与公平性:训练数据可能反映社会文化偏见。
- 错误信息与滥用:可能生成虚假或有害内容。
- 透明度与责任:模型卡提供架构、能力等细节。
风险与缓解
- 偏见延续:持续监控和去偏技术。
- 有害内容生成:实施内容安全机制。
- 恶意滥用:技术限制和用户教育。
- 隐私侵犯:训练数据过滤PII,开发者需遵守隐私法规。
优势
发布时,此系列模型在同类尺寸模型中提供高性能和负责任AI开发。基准测试显示优于其他开放模型替代品。


