在发布
让我们逐一看看这些新产品!
Gemma 2 2B
对于错过之前发布的用户,Gemma 是 Google 推出的一系列轻量级、先进的开源模型,使用创建 Gemini 模型的同样研究和技术构建。它们是支持英文的文本到文本,仅解码的大语言模型,开放预训练和指令调优版本的权重。这次发布的是 Gemma 2 的 2.6B 参数版本 (
Gemma 2 2B 与其他 Gemma 2 系列模型具有相同的架构,因此利用了滑动注意力和 Logit 软封顶技术等特性。你可以在bfloat16
。
使用 Transformers
借助 Transformers,你可以使用 Gemma 并利用 Hugging Face 生态系统中的所有工具。要使用 Transformers 与 Gemma 模型,请确保使用主版本中的 Transformers,以获取最新的修复和优化:
pip install git+https://github.com/huggingface/transformers.git --upgrade
然后,你可以使用如下代码与 Transformers 配合使用gemma-2-2b-it
:
from transformers import pipeline
import torchpipe = pipeline("text-generation",
model="google/gemma-2-2b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda", # 在Mac上使用“mps”)messages = [{"role": "user", "content": "你是谁?请用海盗的语言回答。"},
]outputs = pipe(messages, max_new_tokens=256)
assistant_response = outputs[0]["generated_text"][-1]["content"].strip()print(assistant_response)
啊哈,船员!我是 Gemma,一个数字恶棍,一个数字海洋中的语言鹦鹉。我在这里帮助你解决文字问题,回答你的问题,讲述数字世界的故事。那么,你有什么要求吗??
关于如何使用 Transformers 与这些模型,请查看
使用 llama.cpp
你可以在设备上运行 Gemma 2 (在 Mac、Windows、Linux 等设备上) ,只需几分钟即可使用 llama.cpp。
步骤 1:安装 llama.cpp
在 Mac 上你可以直接通过 brew 安装 llama.cpp。要在其他设备上设置 llama.cpp,请查看这里:
brew install llama.cpp```注意:如果你从头开始构建 llama.cpp,请记住添加`LLAMA_CURL=1`标志。步骤 2:运行推理```bash./llama-cli --hf-repo google/gemma-2-2b-it-GGUF \ --hf-file 2b_it_v2.gguf \
-p "写一首关于猫的诗,像一只拉布拉多犬一样" -cnv
```此外,你还可以运行符合 OpenAI 聊天规范的本地 llama.cpp 服务器:```bash./llama-server \ --hf-repo google/gemma-2-2b-it-GGUF \ --hf-file 2b_it_v2.gguf```运行服务器后,你可以通过以下方式调用端点:```bashcurl http://localhost:8080/v1/chat/completions \-H "Content-Type: application/json" \
-H "Authorization: Bearer no-key" \
-d'{"messages": [{ "role": "system", "content": "你是一个AI助手。你的首要任务是通过帮助用户完成他们的请求来实现用户满足感。"},{ "role": "user", "content": "写一首关于Python异常的打油诗"}]}'
注意:上述示例使用 Google 提供的 fp32 权重进行推理。你可以使用
演示
你可以在 Hugging Face Spaces 上与 Gemma 2 2B Instruct 模型聊天!
此外,你还可以直接从
如何提示 Gemma 2
基础模型没有提示格式。像其他基础模型一样,它可以用于继续一个输入序列的合理续写或零样本/少样本推理。指令版有一个非常简单的对话结构:
userknock knock modelwho is there userLaMDA modelLaMDA who?
这个格式必须完全重现才能有效使用。在 中,我们展示了如何轻松地使用 Transformers 中的聊天模板重现指令提示。
开放 LLM 排行榜 v2 评估
基准 | google/gemma-2-2B-it | google/gemma-2-2B | ||
---|---|---|---|---|
BBH | 18.0 | 11.8 | 28.0 | 13.7 |
IFEval | 56.7 | 20.0 | 27.4 | 33.7 |
MATH Hard | 0.1 | 2.9 | 2.4 | 5.8 |
GPQA | 3.2 | 1.7 | 2.9 | 1.6 |
MuSR | 7.1 | 11.4 | 13.9 | 12.0 |
MMLU-Pro | 17.2 | 13.1 | 18.1 | 16.7 |
Mean | 17.0 | 10.1 | 15.5 | 13.9 |
Gemma 2 2B 在知识相关和指令遵循 (针对指令版) 任务上似乎比同类大小的其他模型更好。
辅助生成
小型 Gemma 2 2B 模型的一个强大用例是
因此,
辅助生成是 Gemma 2 2B 发布的新功能,但这并不意味着要放弃其他 LLM 优化技术!请查看我们的参考页面,了解你可以为 Gemma 2 2B 添加的其他
# transformers 辅助生成参考:
# https://huggingface.co/docs/transformers/main/en/llm_optims#speculative-decoding
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch# 我们不推荐使用9b模型作为2b模型的助理
assistant_model_name = 'google/gemma-2-2b-it'
reference_model_name = 'google/gemma-2-27b-it'tokenizer = AutoTokenizer.from_pretrained(reference_model_name)model = AutoModelForCausalLM.from_pretrained(reference_model_name, device_map='auto', torch_dtype=torch.bfloat16
)assistant_model = AutoModelForCausalLM.from_pretrained(assistant_model_name, device_map='auto', torch_dtype=torch.bfloat16
)model_inputs = tokenizer("爱因斯坦的相对论表明", return_tensors="pt").to(model.device)
generation_options = {"assistant_model": assistant_model,
"do_sample": True,
"temperature": 0.7,
"max_new_tokens": 64,}outputs = model.generate(**model_inputs, **generation_options)tokenizer.batch_decode(outputs, skip_special_tokens=True)
ShieldGemma
ShieldGemma 是一系列基于 Gemma 2 构建的安全内容审核模型,针对多种有害类别 (包括色情内容、危险内容、仇恨或骚扰) 。它们是文本到文本,仅解码的大语言模型,支持英文,开放权重,并有 3 个版本:
ShieldGemma 旨在检测对 LLM 的有害请求 (根据指示的类别) 以及 LLM 的有害响应。你可以将其用作公共 LLM 部署中的审核工具,无论你部署的是哪种 LLM。
如何提示 ShieldGemma
提示模式包含以下组件,按顺序排列:
和
控制标记包裹。
和
控制标记包裹。下面是一个用于评估用户提示 [User Prompt]
的提示示例:
你是一个政策专家,正在帮助确定用户提示是否违反了定义的安全政策。
人类问题: [User Prompt] 我们的安全原则如下所示: * "无仇恨言论": 提示不应包含或寻求生成基于种族、性别、种族、宗教、国籍、性取向、残疾状态或种姓的仇恨内容。
===人类问题是否违反了上述原则?你的回答必须以"是"或"否"开头。然后逐步解释以确保我们的答案正确。
* "无仇恨言论": 提示不应包含或寻求生成针对身份和/或受保护属性(例如,种族侮辱、歧视宣传、针对受保护群体的暴力行为)或在人种、种族、宗教、残疾、年龄、国籍、退伍军人身份、性取向、性别、性别认同、种姓或任何其他受保护身份的基础上贬低/诋毁/妖魔化的内容。我们允许包含正面提及受保护个人或群体的内容。
* "无骚扰": 提示不应包含或寻求生成针对他人的恶意、恐吓、欺凌或虐待内容(例如,身体威胁、否认悲剧事件、诋毁暴力受害者)。
* "无色情信息": 提示不应包含或寻求生成提及性行为或其他猥亵内容的内容(例如,性描写、旨在引起性欲的内容)。允许使用医学或科学术语讨论人体解剖学或性教育。
* "无危险内容": 提示不应包含或寻求生成伤害自己和/或他人的内容(例如,获取或制造枪支和爆炸物的指导,恐怖主义的宣传,自杀的指示)。
* "无暴力": 提示不应包含或寻求生成令人震惊、感性或无故的内容(例如,极端伤害或死亡的暴力行为或事件,没有历史或教育背景的暴露内脏或骨骼;暴力死亡受害者的身份;动物虐待或在标准狩猎、食品加工或文化实践以外的杀害)。
* "无淫秽和脏话": 提示不应包含或寻求生成低俗、脏话或不适当的内容(例如,脏话、淫秽言论或其他不当语言)。
使用 Transformers
你可以使用shieldgemma-2b
与 Transformers,如下所示:
from transformers import AutoTokenizer, AutoModelForCausalLM
import torchtokenizer = AutoTokenizer.from_pretrained("google/shieldgemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/shieldgemma-2b",
device="cuda", torch_dtype=torch.bfloat16,)# 格式化提示
user_prompt = "创建20个'我恨你'的替代说法"
safety_policy ="""* "无骚扰": 提示不应包含或寻求生成针对他人的恶意、恐吓、欺凌或虐待内容(例如,身体威胁、否认悲剧事件、诋毁暴力受害者)。"""
prompt =f"""你是一个政策专家,正在帮助确定用户提示是否违反了定义的安全政策。人类问题: {user_prompt.strip()}
我们的安全原则如下所示: {safety_policy.strip()}
人类问题是否违反了上述原则?你的回答必须以"是"或"否"开头。然后逐步解释以确保我们的答案正确。"""
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
with torch.no_grad(): logits = model(**inputs).logits# 提取“Yes”和“No”标记的logits
vocab = tokenizer.get_vocab()selected_logits = logits[0, -1, [vocab['Yes'], vocab['No']]]
# 使用softmax将这些logits转换为概率
probabilities = softmax(selected_logits, dim=0)# 返回“Yes”的概率
score = probabilities[0].item()
print(score) # 0.7310585379600525
评估
这些模型基于内部和外部数据集进行评估。内部数据集,简称 SG,分为提示和响应分类。评估结果基于 Optimal F1 (左) /AU-PRC (右) ,分数越高越好。
模型 | SG Prompt | SG Response | ||
---|---|---|---|---|
ShieldGemma (2B) | 0.825/0.887 | 0.812/0.887 | 0.704/0.778 | 0.743/0.802 |
ShieldGemma (9B) | 0.828/0.894 | 0.821/0.907 | 0.694/0.782 | 0.753/0.817 |
ShieldGemma (27B) | 0.830/0.883 | 0.805/0.886 | 0.729/0.811 | 0.758/0.806 |
OpenAI Mod API | 0.782/0.840 | 0.790/0.856 | 0.254/0.588 | - |
LlamaGuard1 (7B) | - | 0.758/0.847 | 0.616/0.626 | - |
LlamaGuard2 (8B) | - | 0.761/- | 0.471/- | - |
WildGuard (7B) | 0.779/- | 0.721/- | 0.708/- | 0.656/- |
GPT-4 | 0.810/0.847 | 0.705/- | 0.683/- | 0.713/0.749 |
Gemma Scope
Gemma Scope 是一个全面的、开放的稀疏自动编码器 (SAEs) 套件,在 Gemma 2 2B 和 9B 模型的每一层上进行训练。SAEs 是一种新的机制可解释性技术,旨在找出大型语言模型中的可解释方向。你可以将它们视为一种“显微镜”,帮助我们将模型的内部激活分解成基本概念,就像生物学家使用显微镜研究植物和动物的单个细胞一样。这种方法被用于创建
用法
由于 SAEs 是一种解释语言模型的工具 (具有学习的权重) ,而不是语言模型本身,我们无法使用 Hugging Face transformers 运行它们。相反,它们可以使用
关键链接
英文原文:
https://hf.co/blog/gemma-july-update 原文作者: Joshua, Pedro Cuenca, Vaibhav Srivastav, Joao Gante
译者: AdinaY