Hugging Face 发文欢迎 Google 开源 LLM 家族 Gemma
Welcome Gemma - Google’s new open LLM
Google 发布开源 LLM 家族 Gemma,包含 2B 和 7B 两个尺寸,各有基础版与指令微调版共 4 个模型,基于 Gemini 打造,上下文长度 8K tokens,可在消费级 GPU、TPU 甚至 CPU 与端侧设备上运行。
Google 开源 Gemma 2B 与 7B 双尺寸模型,本文给出 8K 上下文、消费级硬件运行及与 Transformers 生态的完整集成路径。
Gemma 模型的更新在此文发布两个月后推出,查看最新版本请在此集合中。
谷歌今天发布了 Gemma,这是一个全新的顶级开源大型语言模型系列!看到谷歌加强其对开源 AI 的承诺,我们感到非常高兴,并且我们激动地宣布,通过 HF Mirror 的全面集成,全力支持此次发布。
Gemma 提供两种规模:7B 参数版本,适用于在消费级 GPU 和 TPU 上的高效部署与开发;以及 2B 版本,面向 CPU 和设备端应用。两者均包含基础版和指令微调版。
我们与谷歌合作,确保最佳地融入 HF Mirror 生态系统。您可以在 Hub 上找到 4 个开源访问模型(2 个基础模型和 2 个微调模型)。在发布的功能和集成中,我们有以下内容:
- Hub 上的模型,附带模型卡片和许可证
- 🤗 Transformers 集成
- 与 Google Cloud 的集成
- 与推理端点的集成
- 一个使用 🤗 TRL 在单个 GPU 上微调 Gemma 的示例
目录
什么是 Gemma?
Gemma 是谷歌基于 Gemini 推出的 4 个新大型语言模型系列。它有两种规模:2B 和 7B 参数,每种都有基础(预训练)和指令微调版本。所有变体均可在多种消费级硬件上运行,甚至无需量化,且上下文长度达到 8K tokens:
- gemma-7b:7B 基础模型。
- gemma-7b-it:7B 基础模型的指令微调版。
- gemma-2b:2B 基础模型。
- gemma-2b-it:2B 基础模型的指令微调版。
原版发布一个月后,谷歌推出了指令模型的新版本。此版本在编码能力、事实性、指令遵循及多轮对话质量上更胜一筹,且模型开始回复时较少以“Sure,”开头。
那么,Gemma 模型有多好呢?以下是基础模型概览及其在 LLM 排行榜 上与其他开放模型相比的表现(分数越高越好):
| 模型 | 许可证 | 商业用途? | 预训练规模 [tokens] | 排行榜分数 ⬇️ |
|---|---|---|---|---|
| LLama 2 70B Chat(参考) | Llama 2 许可证 | ✅ | 2T | 67.87 |
| Gemma-7B | Gemma 许可证 | ✅ | 6T | 63.75 |
| DeciLM-7B | Apache 2.0 | ✅ | 未知 | 61.55 |
| PHI-2 (2.7B) | MIT | ✅ | 1.4T | 61.33 |
| Mistral-7B-v0.1 | Apache 2.0 | ✅ | 未知 | 60.97 |
| Llama 2 7B | Llama 2 许可证 | ✅ | 2T | 54.32 |
| Gemma 2B | Gemma 许可证 | ✅ | 2T | 46.51 |
Gemma 7B 是一个非常强大的模型,其性能可与 7B 重量级的最佳模型相媲美,包括 Mistral 7B。Gemma 2B 因其尺寸而成为一个有趣的模型,但在排行榜上的得分并未达到同等规模中最优秀模型(如 Phi 2)的高度。我们期待收到社区关于实际使用情况的反馈!
请注意,LLM 排行榜尤其适用于衡量预训练模型的质量,而对于聊天模型则不太适用。我们鼓励对聊天模型运行其他基准测试,如 MT Bench、EQ Bench 和 lmsys Arena!
提示格式
基础模型没有提示格式。与其他基础模型一样,它们可以用来延续输入序列,给出合理的续写,或用于零样本/少样本推理。它们也是在自己的用例上进行微调的绝佳基础。Instruct 版本有一个非常简单的对话结构:
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
LaMDA<end_of_turn>
<start_of_turn>model
LaMDA who?<end_of_turn>
为了有效使用,必须精确再现这种格式。稍后我们将展示如何使用 transformers 中提供的聊天模板轻松再现 instruct 提示。
探索未知
技术报告包括基础模型的训练和评估过程的信息,但没有关于数据集组成和预处理的详细细节。我们知道它们是用来自各种来源的数据训练的,主要是网络文档、代码和数学文本。数据经过过滤,以移除 CSAM 内容和 PII,以及进行许可检查。
同样,对于 Gemma instruct 模型,没有分享关于微调数据集或与 SFT 和 RLHF 相关的超参数的细节。
演示
你可以在 Hugging Chat 上与 Gemma Instruct 模型聊天!点击此处链接:https://hf-mirror.com/chat/models/google/gemma-1.1-7b-it
使用 🤗 Transformers
使用 Transformers 4.38 版本,你可以使用 Gemma 并利用 HF Mirror 生态系统内的所有工具,例如:
- 训练和推理脚本及示例
- 安全文件格式(
safetensors) - 与 bitsandbytes(4 位量化)、PEFT(参数高效微调)和 Flash Attention 2 等工具的集成
- 用于运行模型生成的实用工具和助手
- 导出模型以进行部署的机制
此外,Gemma 模型与 torch.compile() 兼容 CUDA 图,在推理时提供约 4 倍加速!
要使用 Transformers 的 Gemma 模型,请确保安装最新版本的 transformers:
pip install --upgrade transformers
以下代码片段展示了如何将 gemma-7b-it 与 Transformers 一起使用。它需要大约 18 GB 的内存,包括 3090 或 4090 等消费级 GPU。
from transformers import pipeline
import torch
pipe = pipeline(
"text-generation",
model="google/gemma-7b-it",
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
outputs = pipe(
messages,
max_new_tokens=256,
do_sample=True,
temperature=0.7,
top_k=50,
top_p=0.95
)
assistant_response = outputs[0]["generated_text"][-1]["content"]
print(assistant_response)
Avast me, me hearty. I am a pirate of the high seas, ready to pillage and plunder. Prepare for a tale of adventure and booty!
我们使用了 bfloat16,因为这是参考精度,也是所有评估的运行方式。在你的硬件上,以 float16 运行可能更快。
你也可以自动量化模型,以 8 位甚至 4 位模式加载。4 位加载运行大约需要 9 GB 内存,使其与许多消费级显卡以及 Google Colab 中的所有 GPU 兼容。以下是以 4 位加载生成管道的方法:
pipeline = pipeline(
"text-generation",
model=model,
model_kwargs={
"torch_dtype": torch.float16,
"quantization_config": {"load_in_4bit": True}
},
)
有关将模型与 Transformers 一起使用的更多详细信息,请查看模型卡片。
JAX 权重
如上所述,所有 Gemma 模型变体都可用于 PyTorch 或 JAX / Flax。要加载 Flax 权重,你需要使用仓库中的 flax 修订版,如下所示:
import jax.numpy as jnp
from transformers import AutoTokenizer, FlaxGemmaForCausalLM
model_id = "google/gemma-2b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.padding_side = "left"
model, params = FlaxGemmaForCausalLM.from_pretrained(
model_id,
dtype=jnp.bfloat16,
revision="flax",
_do_init=False,
)
inputs = tokenizer("Valencia and Málaga are", return_tensors="np", padding=True)
output = model.generate(**inputs, params=params, max_new_tokens=20, do_sample=False)
output_text = tokenizer.batch_decode(output.sequences, skip_special_tokens=True)
['Valencia and Málaga are two of the most popular tourist destinations in Spain. Both cities boast a rich history, vibrant culture,']
请查看此 notebook,了解如何在 Colab TPU 上并行化 JAX 推理的全面动手演练!
与 Google Cloud 的集成
你可以通过 Vertex AI 或 Google Kubernetes Engine (GKE),使用 Text Generation Inference 和 Transformers 在 Google Cloud 上部署和训练 Gemma。
要部署来自 HF Mirror 的 Gemma 模型,请转到 模型页面 并点击 部署 -> Google Cloud。 这将带您进入 Google Cloud 控制台,在此您可以在 Vertex AI 或 GKE 上单击即可部署 Gemma。文本生成推理为 Google Cloud 上的 Gemma 提供支持,这是与我们 与 Google Cloud 的合作 伙伴关系中的首个集成。
您也可以直接通过 Vertex AI 模型花园访问 Gemma。
要对 HF Mirror 的 Gemma 模型进行微调,请转到 模型页面 并点击 训练 -> Google Cloud。 这将带您进入 Google Cloud 控制台,在那里您可以访问笔记本以在 Vertex AI 或 GKE 上调整 Gemma。
这些集成标志着我们作为 与 Google 合作 的成果首次共同推出的产品。敬请期待更多内容!
与推理终端集成
您可以在 HF Mirror 的 推理终端 上部署 Gemma,该终端使用文本生成推理作为后端。文本生成推理 是由 HF Mirror 开发的生产就绪推理容器,可轻松部署大型语言模型。它具有连续批处理、令牌流、张量并行处理等多GPU快速推理功能,以及生产就绪的日志记录和追踪功能。
要部署 Gemma 模型,请转到 模型页面 并点击 部署 -> 推理终端 小部件。您可以在之前的博客文章中了解更多关于 使用 HF Mirror 推理终端部署大型语言模型 的信息。推理终端通过文本生成推理支持 消息 API,使您只需更改 URL 即可从另一个封闭模型切换到开放模型。
from openai import OpenAI
# initialize the client but point it to TGI
client = OpenAI(
base_url="<ENDPOINT_URL>" + "/v1/", # replace with your endpoint url
api_key="<HF_API_TOKEN>", # replace with your token
)
chat_completion = client.chat.completions.create(
model="tgi",
messages=[
{"role": "user", "content": "Why is open-source software important?"},
],
stream=True,
max_tokens=500
)
# iterate and print stream
for message in chat_completion:
print(message.choices[0].delta.content, end="")
使用 🤗 TRL 进行微调
训练大型语言模型在技术和计算上都具有挑战性。在本节中,我们将介绍 HF Mirror 生态系统中可用的工具,以便在消费级 GPU 上高效训练 Gemma。
以下是一个在 OpenAssistant 的 聊天数据集 上微调 Gemma 的示例命令。我们使用 4 位量化和 QLoRA 来节省内存,针对所有注意力块的线性层。
首先,安装 🤗 TRL 的夜间版本并克隆仓库以访问 训练脚本:
pip install -U transformers trl peft bitsandbytes
git clone https://github.com/huggingface/trl
cd trl
然后你可以运行脚本:
accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml --num_processes=1 \
trl/scripts/sft.py \
--model_name google/gemma-7b \
--dataset_name OpenAssistant/oasst_top1_2023-08-25 \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 1 \
--learning_rate 2e-4 \
--save_steps 20_000 \
--use_peft \
--lora_r 16 --lora_alpha 32 \
--lora_target_modules q_proj k_proj v_proj o_proj \
--load_in_4bit \
--output_dir gemma-finetuned-openassistant
在单个 A10G 上训练大约需要 9 小时,但通过将 --num_processes 调整为您可用的 GPU 数量,可以轻松实现并行化。
附加资源
- Hub 上的模型
- 开放大型语言模型 排行榜
- Hugging Chat 上的聊天演示
- 官方 Gemma 博客
- Gemma 产品页面
- Vertex AI 模型花园链接
- Google Notebook
致谢
在生态系统中发布此类模型并提供支持和评估,离不开许多社区成员的贡献,包括 Clémentine 和 Eleuther Evaluation Harness 提供 LLM 评估;Olivier 和 David 提供 Text Generation Inference 支持;Simon 在 HF Mirror 上开发新的访问控制功能;Arthur、Younes 和 Sanchit 将 Gemma 集成到 transformers;Morgan 将 Gemma 集成到 optimum-nvidia(即将推出);Nathan、Victor 和 Mishig 让 Gemma 在 Hugging Chat 中可用。
并感谢 Google 团队发布 Gemma 并将其提供给开源 AI 社区!
来源:Hugging Face Blog · hf-mirror.com

