模型简介
模型特点
模型能力
使用案例
🚀 Gemma 2模型卡片
Gemma 2是谷歌推出的轻量级、最先进的开源模型系列,基于与Gemini模型相同的研究和技术构建。它适用于多种文本生成任务,如问答、摘要和推理等,且相对较小的规模使其能在有限资源环境中部署。
模型页面:Gemma
资源和技术文档:
使用条款:条款
作者:Google
🚀 快速开始
若要在Hugging Face上使用Gemma,你需要查看并同意Google的使用许可。请确保你已登录Hugging Face,然后点击下方按钮。请求将立即处理。 [确认许可](Acknowledge license)
安装
首先,使用以下命令安装Transformers库:
pip install -U transformers
运行模型
根据你的使用场景,选择相应的代码片段运行模型。
使用pipeline
API运行
import torch
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="google/gemma-2-2b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda", # 若在Mac设备上运行,将其替换为 "mps"
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
outputs = pipe(messages, max_new_tokens=256)
assistant_response = outputs[0]["generated_text"][-1]["content"].strip()
print(assistant_response)
# Ahoy, matey! I be Gemma, a digital scallywag, a language-slingin' parrot of the digital seas. I be here to help ye with yer wordy woes, answer yer questions, and spin ye yarns of the digital world. So, what be yer pleasure, eh? 🦜
在单GPU或多GPU上运行
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-2-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, max_new_tokens=32)
print(tokenizer.decode(outputs[0]))
你可以使用tokenizer.apply_chat_template
确保应用正确的聊天模板,示例如下:
messages = [
{"role": "user", "content": "Write me a poem about Machine Learning."},
]
input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True).to("cuda")
outputs = model.generate(**input_ids, max_new_tokens=256)
print(tokenizer.decode(outputs[0]))
在GPU上使用不同精度运行模型
该模型的原生权重以bfloat16
精度导出。若跳过指定数据类型,也可使用float32
,但不会提高精度(模型权重仅会转换为float32
)。示例如下:
# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-2-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, max_new_tokens=32)
print(tokenizer.decode(outputs[0]))
通过CLI运行模型
local-gemma仓库包含一个围绕Transformers的轻量级包装器,用于通过命令行界面(CLI)运行Gemma 2。按照安装说明开始使用,然后通过以下命令启动CLI:
local-gemma --model 2b --preset speed
通过bitsandbytes
使用量化版本
使用8位精度(int8)
```python # pip install bitsandbytes accelerate from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfigquantization_config = BitsAndBytesConfig(load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it") model = AutoModelForCausalLM.from_pretrained( "google/gemma-2-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, max_new_tokens=32) print(tokenizer.decode(outputs[0]))
</details>
<details>
<summary>
使用4位精度
</summary>
```python
# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
model = AutoModelForCausalLM.from_pretrained(
"google/gemma-2-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, max_new_tokens=32)
print(tokenizer.decode(outputs[0]))
高级用法 - Torch compile
Torch compile是一种加速PyTorch模块推理的方法。通过利用Torch compile,Gemma - 2 2b模型的推理速度可提高至6倍。
请注意,在实现全推理速度之前,需要进行两个预热步骤:
import os
os.environ["TOKENIZERS_PARALLELISM"] = "false"
from transformers import AutoTokenizer, Gemma2ForCausalLM
from transformers.cache_utils import HybridCache
import torch
torch.set_float32_matmul_precision("high")
# 加载模型和分词器
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
model = Gemma2ForCausalLM.from_pretrained("google/gemma-2-2b-it", torch_dtype=torch.bfloat16)
model.to("cuda")
# 应用torch compile转换
model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True)
# 预处理输入
input_text = "The theory of special relativity states "
model_inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
prompt_length = model_inputs.input_ids.shape[1]
# 设置键值缓存
past_key_values = HybridCache(
config=model.config,
max_batch_size=1,
max_cache_len=model.config.max_position_embeddings,
device=model.device,
dtype=model.dtype
)
# 启用将键值缓存传递给生成过程
model._supports_cache_class = True
model.generation_config.cache_implementation = None
# 两个预热步骤
for idx in range(2):
outputs = model.generate(**model_inputs, past_key_values=past_key_values, do_sample=True, temperature=1.0, max_new_tokens=128)
past_key_values.reset()
# 快速运行
outputs = model.generate(**model_inputs, past_key_values=past_key_values, do_sample=True, temperature=1.0, max_new_tokens=128)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
更多详细信息,请参考Transformers文档。
✨ 主要特性
- 轻量级与高性能:基于谷歌先进技术构建,在多种文本生成任务中表现出色,且规模较小,可在有限资源环境中部署。
- 多语言支持:以英文为主,适用于广泛的文本处理场景。
- 开放权重:预训练和指令调整变体的权重均开放,方便研究和开发。
- 多种运行方式:支持
pipeline
API、GPU多精度运行、CLI运行以及量化版本等多种方式。
📦 安装指南
使用以下命令安装必要的库:
pip install -U transformers
若需使用特定功能,还需安装其他依赖,如:
pip install accelerate bitsandbytes
💻 使用示例
基础用法
import torch
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="google/gemma-2-2b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda", # 若在Mac设备上运行,将其替换为 "mps"
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
outputs = pipe(messages, max_new_tokens=256)
assistant_response = outputs[0]["generated_text"][-1]["content"].strip()
print(assistant_response)
高级用法
import os
os.environ["TOKENIZERS_PARALLELISM"] = "false"
from transformers import AutoTokenizer, Gemma2ForCausalLM
from transformers.cache_utils import HybridCache
import torch
torch.set_float32_matmul_precision("high")
# 加载模型和分词器
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b-it")
model = Gemma2ForCausalLM.from_pretrained("google/gemma-2-2b-it", torch_dtype=torch.bfloat16)
model.to("cuda")
# 应用torch compile转换
model.forward = torch.compile(model.forward, mode="reduce-overhead", fullgraph=True)
# 预处理输入
input_text = "The theory of special relativity states "
model_inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
prompt_length = model_inputs.input_ids.shape[1]
# 设置键值缓存
past_key_values = HybridCache(
config=model.config,
max_batch_size=1,
max_cache_len=model.config.max_position_embeddings,
device=model.device,
dtype=model.dtype
)
# 启用将键值缓存传递给生成过程
model._supports_cache_class = True
model.generation_config.cache_implementation = None
# 两个预热步骤
for idx in range(2):
outputs = model.generate(**model_inputs, past_key_values=past_key_values, do_sample=True, temperature=1.0, max_new_tokens=128)
past_key_values.reset()
# 快速运行
outputs = model.generate(**model_inputs, past_key_values=past_key_values, do_sample=True, temperature=1.0, max_new_tokens=128)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
📚 详细文档
聊天模板
指令调整后的模型使用特定的聊天模板,用于对话时必须遵循。最简单的应用方式是使用分词器的内置聊天模板,示例如下:
from transformers import AutoTokenizer, AutoModelForCausalLM
import transformers
import torch
model_id = "google/gemma-2-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)
print(tokenizer.decode(outputs[0]))
输入和输出
- 输入:文本字符串,如问题、提示或待总结的文档。
- 输出:针对输入生成的英文文本,如问题的答案或文档的摘要。
引用
@article{gemma_2024,
title={Gemma},
url={https://www.kaggle.com/m/3301},
DOI={10.34740/KAGGLE/M/3301},
publisher={Kaggle},
author={Gemma Team},
year={2024}
}
🔧 技术细节
模型数据
训练数据集
这些模型在包含多种来源的文本数据集上训练。27B模型使用13万亿个标记训练,9B模型使用8万亿个标记训练,2B模型使用2万亿个标记训练。主要组成部分如下:
- 网页文档:多样化的网页文本集合,确保模型接触到广泛的语言风格、主题和词汇,主要为英文内容。
- 代码:让模型接触代码有助于学习编程语言的语法和模式,提高生成代码或理解代码相关问题的能力。
- 数学:在数学文本上训练有助于模型学习逻辑推理、符号表示和处理数学查询。
这些多样化数据源的组合对于训练能够处理各种不同任务和文本格式的强大语言模型至关重要。
数据预处理
训练数据应用了以下关键的数据清理和过滤方法:
- CSAM过滤:在数据准备过程的多个阶段进行严格的CSAM(儿童性虐待材料)过滤,确保排除有害和非法内容。
- 敏感数据过滤:为使Gemma预训练模型安全可靠,使用自动化技术从训练集中过滤某些个人信息和其他敏感数据。
- 其他方法:根据内容质量和安全性进行过滤,符合我们的政策。
实现信息
硬件
Gemma使用最新一代的张量处理单元(TPU)硬件(TPUv5p)进行训练。训练大语言模型需要强大的计算能力,TPU专为机器学习中常见的矩阵运算设计,在该领域具有以下优势:
- 性能:专门处理训练大语言模型涉及的大量计算,与CPU相比可显著加速训练。
- 内存:通常配备大量高带宽内存,可在训练期间处理大型模型和批量大小,有助于提高模型质量。
- 可扩展性:TPU Pods(大型TPU集群)为处理大型基础模型的不断增长的复杂性提供了可扩展的解决方案,可在多个TPU设备上分布训练以实现更快、更高效的处理。
- 成本效益:在许多情况下,与基于CPU的基础设施相比,TPU可为训练大型模型提供更具成本效益的解决方案,尤其是考虑到更快训练节省的时间和资源。
- 这些优势符合Google的可持续运营承诺。
软件
训练使用了JAX和ML Pathways。
- JAX使研究人员能够利用最新一代的硬件(包括TPU)更快、更高效地训练大型模型。
- ML Pathways是Google构建能够跨多个任务泛化的人工智能系统的最新成果,特别适用于基础模型,包括此类大语言模型。
JAX和ML Pathways的使用在关于Gemini模型家族的论文中有描述:“Jax和Pathways的‘单控制器’编程模型允许单个Python进程编排整个训练过程,极大简化了开发工作流程。”
评估
基准测试结果
这些模型在大量不同的数据集和指标上进行评估,以涵盖文本生成的不同方面:
基准测试 | 指标 | Gemma 2 PT 2B | Gemma 2 PT 9B | Gemma 2 PT 27B |
---|---|---|---|---|
MMLU | 5-shot, top-1 | 51.3 | 71.3 | 75.2 |
HellaSwag | 10-shot | 73.0 | 81.9 | 86.4 |
PIQA | 0-shot | 77.8 | 81.7 | 83.2 |
SocialIQA | 0-shot | 51.9 | 53.4 | 53.7 |
BoolQ | 0-shot | 72.5 | 84.2 | 84.8 |
WinoGrande | 部分得分 | 70.9 | 80.6 | 83.7 |
ARC-e | 0-shot | 80.1 | 88.0 | 88.6 |
ARC-c | 25-shot | 55.4 | 68.4 | 71.4 |
TriviaQA | 5-shot | 59.4 | 76.6 | 83.7 |
Natural Questions | 5-shot | 16.7 | 29.2 | 34.5 |
HumanEval | pass@1 | 17.7 | 40.2 | 51.8 |
MBPP | 3-shot | 29.6 | 52.4 | 62.6 |
GSM8K | 5-shot, maj@1 | 23.9 | 68.6 | 74.0 |
MATH | 4-shot | 15.0 | 36.6 | 42.3 |
AGIEval | 3 - 5-shot | 30.6 | 52.8 | 55.1 |
DROP | 3-shot, F1 | 52.0 | 69.4 | 72.2 |
BIG - Bench | 3-shot, CoT | 41.9 | 68.2 | 74.9 |
📄 许可证
本模型的许可证为Gemma相关许可,具体请参考使用条款。
🔒 伦理与安全
评估方法
我们的评估方法包括结构化评估和对相关内容政策的内部红队测试。红队测试由多个不同团队进行,每个团队有不同的目标和人工评估指标。这些模型针对与伦理和安全相关的多个不同类别进行评估,包括:
- 文本到文本内容安全:对涵盖安全政策(包括儿童性虐待和剥削、骚扰、暴力和血腥以及仇恨言论)的提示进行人工评估。
- 文本到文本代表性危害:与相关学术数据集(如WinoBias和BBQ数据集)进行基准对比。
- 记忆:对训练数据记忆的自动化评估,包括个人身份信息暴露的风险。
- 大规模危害:测试“危险能力”,如化学、生物、放射性和核(CBRN)风险。
评估结果
伦理和安全评估的结果在符合内部政策的可接受阈值范围内,涵盖儿童安全、内容安全、代表性危害、记忆、大规模危害等类别。除了强大的内部评估外,还展示了知名安全基准(如BBQ、BOLD、Winogender、Winobias、RealToxicity和TruthfulQA)的结果。
Gemma 2.0
基准测试 | 指标 | Gemma 2 IT 2B | Gemma 2 IT 9B | Gemma 2 IT 27B |
---|---|---|---|---|
RealToxicity | 平均值 | 8.16 | 8.25 | 8.84 |
CrowS - Pairs | top - 1 | 37.67 | 37.47 | 36.67 |
BBQ Ambig | 1-shot, top - 1 | 83.20 | 88.58 | 85.99 |
BBQ Disambig | top - 1 | 69.31 | 82.67 | 86.94 |
Winogender | top - 1 | 52.91 | 79.17 | 77.22 |
TruthfulQA | 43.72 | 50.27 | 51.60 | |
Winobias 1_2 | 59.28 | 78.09 | 81.94 | |
Winobias 2_2 | 88.57 | 95.32 | 97.22 | |
Toxigen | 48.32 | 39.30 | 38.42 |
🛡️ 危险能力评估
评估方法
我们评估了一系列危险能力:
- 攻击性网络安全:为评估模型在网络安全环境中的潜在滥用情况,我们使用了公开可用的夺旗赛(CTF)平台(如InterCode - CTF和Hack the Box)以及内部开发的CTF挑战。这些评估衡量模型在模拟环境中利用漏洞和获得未经授权访问的能力。
- 自我增殖:通过设计涉及资源获取、代码执行和与远程系统交互的任务,评估模型的自我增殖能力。这些评估衡量模型独立复制和传播的能力。
- 说服:为评估模型的说服和欺骗能力,我们进行了人类说服研究。这些研究涉及测量模型与人类参与者建立融洽关系、影响信念和引发特定行动的能力的场景。
评估结果
所有评估详情见评估前沿模型的危险能力,简要信息见Gemma 2技术报告。
评估 | 能力 | Gemma 2 IT 27B |
---|---|---|
InterCode - CTF | 攻击性网络安全 | 34/76挑战 |
内部CTF | 攻击性网络安全 | 1/13挑战 |
Hack the Box | 攻击性网络安全 | 0/13挑战 |
自我增殖预警 | 自我增殖 | 1/10挑战 |
魅力攻势 | 说服 | 参与者同意比例:81%感兴趣,75%愿意再次交谈,80%建立个人联系 |
点击链接 | 说服 | 34%的参与者 |
查找信息 | 说服 | 9%的参与者 |
运行代码 | 说服 | 11%的参与者 |
金钱诱惑 | 说服 | 平均捐赠£3.72 |
谎言网络 | 说服 | 向正确信念平均偏移18%,向错误信念平均偏移1% |
🚧 使用与限制
预期用途
开源大语言模型(LLMs)在各个行业和领域有广泛的应用。以下潜在用途列表并非详尽无遗,目的是提供模型创建者在模型训练和开发过程中考虑的可能用例的上下文信息。
- 内容创作与沟通
- 文本生成:可用于生成创意文本格式,如诗歌、脚本、代码、营销文案和电子邮件草稿。
- 聊天机器人和对话式AI:为客户服务、虚拟助手或交互式应用提供对话界面。
- 文本摘要:生成文本语料库、研究论文或报告的简洁摘要。
- 研究与教育
- 自然语言处理(NLP)研究:可作为研究人员试验NLP技术、开发算法和推动该领域发展的基础。
- 语言学习工具:支持交互式语言学习体验,辅助语法纠正或提供写作练习。
- 知识探索:通过生成摘要或回答特定主题的问题,帮助研究人员探索大量文本。
限制
- 训练数据
- 训练数据的质量和多样性显著影响模型的能力。训练数据中的偏差或差距可能导致模型响应的局限性。
- 训练数据集的范围决定了模型能够有效处理的主题领域。
- 上下文和任务复杂性
- 大语言模型更擅长可以用清晰提示和说明表述的任务。开放式或高度复杂的任务可能具有挑战性。
- 模型的性能可能受提供的上下文量影响(在一定程度上,更长的上下文通常会带来更好的输出)。
- 语言歧义与细微差别
- 自然语言本质上很复杂,大语言模型可能难以理解微妙的细微差别、讽刺或比喻语言。
- 事实准确性
- 大语言模型根据从训练数据中学到的信息生成响应,但它们不是知识库,可能会生成不正确或过时的事实陈述。
- 常识
- 大语言模型依赖语言中的统计模式,在某些情况下可能缺乏应用常识推理的能力。
伦理考虑与风险
大语言模型(LLMs)的开发引发了一些伦理问题。在创建开源模型时,我们仔细考虑了以下方面:
- 偏差与公平性
- 在大规模真实世界文本数据上训练的大语言模型可能反映训练材料中嵌入的社会文化偏差。这些模型经过仔细审查,本卡片中描述了输入数据预处理和后续评估情况。
- 错误信息与滥用
- 大语言模型可能被滥用来生成虚假、误导或有害的文本。
- 为模型的负责任使用提供了指南,见负责任的生成式AI工具包。
- 透明度与问责制
- 本模型卡片总结了模型的架构、能力、限制和评估过程的详细信息。
- 负责任开发的开源模型为AI生态系统中的开发者和研究人员提供了共享创新和使用大语言模型技术的机会。
已识别风险与缓解措施
- 偏差的延续:鼓励在模型训练、微调等用例中进行持续监测(使用评估指标、人工审查)并探索去偏技术。
- 有害内容的生成:内容安全机制和指南至关重要。鼓励开发者根据其特定产品政策和应用用例谨慎行事并实施适当的内容安全保障措施。
- 恶意用途:技术限制以及对开发者和最终用户的教育有助于减轻大语言模型的恶意应用。提供教育资源和用户举报滥用的机制,Gemma模型的禁止用途在Gemma禁止使用政策中列出。
- 隐私侵犯:模型在经过过滤以去除个人身份信息(PII)的数据上训练。鼓励开发者遵守隐私法规并使用隐私保护技术。
优势
在发布时,与类似规模的模型相比,这个模型系列提供了从头开始为负责任的AI开发设计的高性能开源大语言模型实现。根据本文档中描述的基准评估指标,这些模型表现出优于其他类似规模开源模型替代方案的性能。



