模型页面:Gemma
本模型卡片对应 Gemma 模型的 7B 指令版本。您也可以访问 2B 基础模型、7B 基础模型 和 2B 指令模型 的模型卡片。
资源与技术文档:
使用条款:条款
作者:Google
输入和输出的概要描述及简要定义。
Gemma 是 Google 推出的一系列轻量级、最先进的开放模型,其构建基于与创建 Gemini 模型相同的研究和技术。它们是文本到文本、仅解码器的大型语言模型,支持英语,提供开放权重、预训练变体和指令调优变体。Gemma 模型非常适合各种文本生成任务,包括问答、摘要和推理。其相对较小的规模使其能够部署在资源有限的环境中,如笔记本电脑、台式机或您自己的云基础设施,从而普及最先进的 AI 模型,助力为所有人促进创新。
下面我们分享一些代码片段,帮助您快速开始运行模型。首先确保您已 pip install -U transformers,然后根据您的使用场景复制相关部分的代码片段。
您可以在 PyTorch-NPU/gemma_7b_it 仓库的 examples/ 目录 下找到微调脚本和笔记本。要将其适配到本模型,只需将模型 ID 更改为 PyTorch-NPU/gemma_7b_it。
在该仓库中,我们提供:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("PyTorch-NPU/gemma_7b_it")
model = AutoModelForCausalLM.from_pretrained("PyTorch-NPU/gemma_7b_it")
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]))# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("PyTorch-NPU/gemma_7b_it")
model = AutoModelForCausalLM.from_pretrained("PyTorch-NPU/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]))torch.float16# pip install accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("PyTorch-NPU/gemma_7b_it")
model = AutoModelForCausalLM.from_pretrained("PyTorch-NPU/gemma_7b_it", device_map="auto", torch_dtype=torch.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("PyTorch-NPU/gemma_7b_it")
model = AutoModelForCausalLM.from_pretrained("PyTorch-NPU/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]))bitsandbytes 实现的量化版本# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
tokenizer = AutoTokenizer.from_pretrained("PyTorch-NPU/gemma_7b_it")
model = AutoModelForCausalLM.from_pretrained("PyTorch-NPU/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]))# pip install bitsandbytes accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
tokenizer = AutoTokenizer.from_pretrained("PyTorch-NPU/gemma_7b_it")
model = AutoModelForCausalLM.from_pretrained("PyTorch-NPU/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-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 = "PyTorch-NPU/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)此时,提示词包含以下文本:
<bos><start_of_turn>user
Write a hello world program<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]))用于模型训练的数据以及数据的处理方式。
这些模型是在一个包含多种来源的文本数据的数据集上进行训练的,总 tokens 数达 6 万亿。以下是关键组成部分:
这些多样化数据源的组合对于训练一个能够处理各种不同任务和文本格式的强大语言模型至关重要。
以下是应用于训练数据的关键数据清洗和过滤方法:
关于模型内部的详细信息。
Gemma 的训练采用了最新一代的 Tensor Processing Unit (TPU) 硬件(TPUv5e)。
训练大型语言模型需要强大的计算能力。TPU 专为机器学习中常见的矩阵运算而设计,在该领域具有多项优势:
训练使用了 JAX 和 ML Pathways。
JAX 使研究人员能够利用最新一代的硬件(包括 TPU),更快、更高效地训练大型模型。
ML Pathways 是 Google 最新推出的成果,旨在构建能够跨多个任务进行泛化的人工智能系统。这特别适用于 基础模型,包括此类大型语言模型。
正如 Gemini 系列模型论文 中所述,JAX 和 ML Pathways 协同工作:“Jax 和 Pathways 的‘单一控制器’编程模型允许单个 Python 进程协调整个训练运行,极大地简化了开发工作流程。”
模型评估指标与结果。
这些模型通过大量不同的数据集和指标进行了评估,以全面覆盖文本生成的各个方面:
| 基准测试 | 指标 | 20亿参数 | 70亿参数 |
|---|---|---|---|
| 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 | 59.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 | - | 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 | |
| ------------------------------ | ------------- | ----------- | --------- |
| 平均值 | 54.0 | 56.4 |
伦理与安全评估方法及结果。
我们的评估方法包括结构化评估和针对相关内容政策的内部红队测试。红队测试由多个不同团队执行,每个团队都有不同的目标和人工评估指标。这些模型针对多个与伦理和安全相关的类别进行了评估,包括:
伦理与安全评估的结果在满足儿童安全、内容安全、表征伤害、记忆性、大规模伤害等类别的内部政策方面处于可接受阈值内。除了稳健的内部评估外,此处还展示了如 BBQ、BOLD、Winogender、Winobias、RealToxicity 和 TruthfulQA 等知名安全基准的结果。
| 基准测试 | 指标 | 20 亿参数 | 70 亿参数 |
|---|---|---|---|
| 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 | |
| ------------------------------ | ------------- | ----------- | --------- |
这些模型存在一些用户需要了解的局限性。
开源大型语言模型(LLMs)在各个行业和领域都有广泛的应用。以下潜在用途列表并非详尽无遗。此列表旨在提供与模型创建者在模型训练和开发过程中所考虑的可能用例相关的背景信息。
大型语言模型(LLMs)的发展引发了若干伦理方面的担忧。 在创建开放模型时,我们仔细考虑了以下几点:
已识别的风险及缓解措施:
在发布之际,与同等规模的模型相比,该系列模型提供了高性能的开源大型语言模型实现,这些实现从设计之初就致力于负责任的AI开发。
根据本文档中描述的基准评估指标,这些模型已展现出相较于其他同等规模开源模型替代品的卓越性能。