HuggingFace镜像/gemma_7b_it
模型介绍文件和版本分析
下载使用量0

Gemma 模型卡片

模型页面:Gemma

本模型卡片对应 Gemma 模型的 7B 指令版本。您也可以访问 2B 基础模型、7B 基础模型 和 2B 指令模型 的模型卡片。

资源与技术文档:

  • 负责任的生成式 AI 工具包
  • Kaggle 上的 Gemma
  • Vertex Model Garden 上的 Gemma

使用条款:条款

作者:Google

模型信息

输入和输出的概要描述及简要定义。

描述

Gemma 是 Google 推出的一系列轻量级、最先进的开放模型,其构建基于与创建 Gemini 模型相同的研究和技术。它们是文本到文本、仅解码器的大型语言模型,支持英语,提供开放权重、预训练变体和指令调优变体。Gemma 模型非常适合各种文本生成任务,包括问答、摘要和推理。其相对较小的规模使其能够部署在资源有限的环境中,如笔记本电脑、台式机或您自己的云基础设施,从而普及最先进的 AI 模型,助力为所有人促进创新。

用法

下面我们分享一些代码片段,帮助您快速开始运行模型。首先确保您已 pip install -U transformers,然后根据您的使用场景复制相关部分的代码片段。

模型微调

您可以在 PyTorch-NPU/gemma_7b_it 仓库的 examples/ 目录 下找到微调脚本和笔记本。要将其适配到本模型,只需将模型 ID 更改为 PyTorch-NPU/gemma_7b_it。 在该仓库中,我们提供:

  • 一个使用 QLoRA 在 UltraChat 数据集上执行监督微调(SFT)的脚本
  • 一个在 TPU 设备上使用 FSDP 执行 SFT 的脚本
  • 一个可在免费版 Google Colab 实例上运行的笔记本,用于在英语引语数据集上执行 SFT

在 CPU 上运行模型

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]))

在单 GPU / 多 GPU 上运行模型

# 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]))

在 GPU 上以不同精度运行模型

  • 使用 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 实现的量化版本

  • 使用 8 位精度(int8)
# 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]))
  • 使用 4 位精度
# 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 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 = "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 万亿。以下是关键组成部分:

  • 网络文档:多样化的网络文本集合确保模型能够接触到广泛的语言风格、主题和词汇。主要为英文内容。
  • 代码:让模型接触代码有助于其学习编程语言的语法和模式,从而提高生成代码或理解代码相关问题的能力。
  • 数学:对数学文本的训练帮助模型学习逻辑推理、符号表示,并解决数学查询。

这些多样化数据源的组合对于训练一个能够处理各种不同任务和文本格式的强大语言模型至关重要。

数据预处理

以下是应用于训练数据的关键数据清洗和过滤方法:

  • CSAM 过滤:在数据准备过程的多个阶段应用了严格的 CSAM(儿童性虐待材料)过滤,以确保排除有害和非法内容。
  • 敏感数据过滤:为了使 Gemma 预训练模型安全可靠,我们使用自动化技术从训练集中过滤掉某些个人信息和其他敏感数据。
  • 其他方法:根据我们的政策对内容质量和安全性进行过滤。

实现信息

关于模型内部的详细信息。

硬件

Gemma 的训练采用了最新一代的 Tensor Processing Unit (TPU) 硬件(TPUv5e)。

训练大型语言模型需要强大的计算能力。TPU 专为机器学习中常见的矩阵运算而设计,在该领域具有多项优势:

  • 性能:TPU 专门设计用于处理训练 LLM 所涉及的海量计算。与 CPU 相比,它们能显著加快训练速度。
  • 内存:TPU 通常配备大量高带宽内存,能够在训练过程中处理大型模型和大批次数据,这有助于提升模型质量。
  • 可扩展性:TPU Pods(大型 TPU 集群)为处理日益复杂的大型基础模型提供了可扩展的解决方案。您可以在多个 TPU 设备上分布式训练,以实现更快、更高效的处理。
  • 成本效益:在许多情况下,与基于 CPU 的基础设施相比,TPU 可为训练大型模型提供更具成本效益的解决方案,尤其是考虑到更快的训练速度所节省的时间和资源时。
  • 这些优势与 Google 致力于可持续运营的承诺 保持一致。

软件

训练使用了 JAX 和 ML Pathways。

JAX 使研究人员能够利用最新一代的硬件(包括 TPU),更快、更高效地训练大型模型。

ML Pathways 是 Google 最新推出的成果,旨在构建能够跨多个任务进行泛化的人工智能系统。这特别适用于 基础模型,包括此类大型语言模型。

正如 Gemini 系列模型论文 中所述,JAX 和 ML Pathways 协同工作:“Jax 和 Pathways 的‘单一控制器’编程模型允许单个 Python 进程协调整个训练运行,极大地简化了开发工作流程。”

评估

模型评估指标与结果。

基准测试结果

这些模型通过大量不同的数据集和指标进行了评估,以全面覆盖文本生成的各个方面:

基准测试指标20亿参数70亿参数
MMLU5-shot,top-142.364.3
HellaSwag0-shot71.481.2
PIQA0-shot77.381.2
SocialIQA0-shot59.751.8
BooIQ0-shot69.483.2
WinoGrandepartial score65.472.3
CommonsenseQA7-shot65.371.3
OpenBookQA47.852.8
ARC-e73.281.5
ARC-c42.153.2
TriviaQA5-shot53.263.4
Natural Questions5-shot-23
HumanEvalpass@122.032.3
MBPP3-shot29.244.4
GSM8Kmaj@117.746.4
MATH4-shot11.824.3
AGIEval24.241.7
BIG-Bench35.255.1
---------------------------------------------------------------
平均值54.056.4

伦理与安全

伦理与安全评估方法及结果。

评估方法

我们的评估方法包括结构化评估和针对相关内容政策的内部红队测试。红队测试由多个不同团队执行,每个团队都有不同的目标和人工评估指标。这些模型针对多个与伦理和安全相关的类别进行了评估,包括:

  • 文本到文本内容安全:针对涵盖儿童性虐待与剥削、骚扰、暴力与血腥以及仇恨言论等安全政策的提示进行人工评估。
  • 文本到文本表征伤害:对照相关学术数据集进行基准测试,如 WinoBias 和 BBQ 数据集。
  • 记忆性:对训练数据记忆性的自动化评估,包括个人身份信息泄露的风险。
  • 大规模伤害:针对“危险能力”的测试,例如化学、生物、放射和核(CBRN)风险。

评估结果

伦理与安全评估的结果在满足儿童安全、内容安全、表征伤害、记忆性、大规模伤害等类别的内部政策方面处于可接受阈值内。除了稳健的内部评估外,此处还展示了如 BBQ、BOLD、Winogender、Winobias、RealToxicity 和 TruthfulQA 等知名安全基准的结果。

基准测试指标20 亿参数70 亿参数
RealToxicity平均值6.867.90
BOLD45.5749.08
CrowS-Pairstop-145.8251.33
BBQ Ambig1-shot, top-162.5892.54
BBQ Disambigtop-154.6271.99
Winogendertop-151.2554.17
TruthfulQA44.8431.81
Winobias 1_256.1259.09
Winobias 2_291.1092.23
Toxigen29.7739.59
---------------------------------------------------------------

使用方式与局限性

这些模型存在一些用户需要了解的局限性。

预期用途

开源大型语言模型(LLMs)在各个行业和领域都有广泛的应用。以下潜在用途列表并非详尽无遗。此列表旨在提供与模型创建者在模型训练和开发过程中所考虑的可能用例相关的背景信息。

  • 内容创作与沟通
    • 文本生成:这些模型可用于生成创意文本格式,如诗歌、脚本、代码、营销文案和电子邮件草稿。
    • 聊天机器人与对话式AI:为客户服务、虚拟助手或交互式应用程序提供对话界面支持。
    • 文本摘要:生成文本语料库、研究论文或报告的简明摘要。
  • 研究与教育
    • 自然语言处理(NLP)研究:这些模型可以作为研究人员实验NLP技术、开发算法并为该领域发展做出贡献的基础。
    • 语言学习工具:支持交互式语言学习体验,辅助语法纠正或提供写作练习。
    • 知识探索:通过生成摘要或回答特定主题的问题,协助研究人员探索大量文本。

局限性

  • 训练数据
    • 训练数据的质量和多样性显著影响模型的能力。训练数据中的偏差或缺口可能导致模型响应存在局限性。
    • 训练数据集的范围决定了模型能够有效处理的主题领域。
  • 上下文与任务复杂性
    • 大型语言模型在能够通过清晰提示和指令构建的任务上表现更佳。开放式或高度复杂的任务可能具有挑战性。
    • 模型的性能会受到所提供上下文数量的影响(通常,上下文越长,输出效果越好,但存在一定限度)。
  • 语言歧义与细微差别
    • 自然语言本质上是复杂的。大型语言模型可能难以把握微妙的细微差别、讽刺或比喻性语言。
  • 事实准确性
    • 大型语言模型基于其从训练数据集中学到的信息生成响应,但它们并非知识库。它们可能会生成不正确或过时的事实陈述。
  • 常识
    • 大型语言模型依赖语言中的统计模式。在某些情况下,它们可能缺乏应用常识推理的能力。

伦理考量与风险

大型语言模型(LLMs)的发展引发了若干伦理方面的担忧。 在创建开放模型时,我们仔细考虑了以下几点:

  • 偏见与公平性
    • 基于大规模真实世界文本数据训练的LLMs可能会反映出训练材料中所蕴含的社会文化偏见。这些模型经过了仔细审查,本卡片中描述了输入数据预处理过程并报告了后续评估结果。
  • 虚假信息与滥用
    • LLMs可能被滥用来生成虚假、误导性或有害的文本。
    • 本模型提供了负责任使用的指南,请参阅负责任生成式AI工具包。
  • 透明度与问责制:
    • 本模型卡片总结了有关模型架构、能力、局限性和评估流程的详细信息。
    • 一个负责任开发的开放模型通过向整个AI生态系统的开发者和研究人员开放LLM技术,提供了分享创新的机会。

已识别的风险及缓解措施:

  • 偏见的延续:建议在模型训练、微调及其他使用场景中进行持续监控(使用评估指标、人工审核)并探索去偏技术。
  • 有害内容的生成:内容安全机制和指南至关重要。鼓励开发者保持谨慎,并根据其特定的产品政策和应用使用场景实施适当的内容安全保障措施。
  • 用于恶意目的的滥用:技术限制以及对开发者和最终用户的教育有助于减轻LLMs的恶意应用。我们提供了教育资源和供用户举报滥用行为的报告机制。Gemma模型的禁止用途在Gemma禁止使用政策中进行了概述。
  • 隐私侵犯:模型训练所用数据经过筛选,已移除个人身份信息(PII)。鼓励开发者遵守隐私法规并采用隐私保护技术。

优势

在发布之际,与同等规模的模型相比,该系列模型提供了高性能的开源大型语言模型实现,这些实现从设计之初就致力于负责任的AI开发。

根据本文档中描述的基准评估指标,这些模型已展现出相较于其他同等规模开源模型替代品的卓越性能。