今天,Google 发布了一系列最新的敞开式大型言语模型 —— Gemma!Google 正在加强其对开源人工智能的支撑,咱们也非常有幸能够协助全力支撑这次发布,并与 Hugging Face 生态完美集成。
Gemma 供给两种规划的模型:7B 参数模型,针对消费级 GPU 和 TPU 规划,保证高效布置和开发;2B 参数模型则适用于 CPU 和移动设备。每种规划的模型都包含根底版别和经过指令调优的版别。
咱们与 Google 紧密协作,保证 Gemma 能够无缝集成到 Hugging Face 的生态系统中。在 Hub 上,你能够找到这四个揭露可拜访的模型(包含两个根底模型和两个经过调优的模型)。此次发布的亮点包含:
- Hub 上的模型,包含模型说明和授权信息
- Transformers 的集成
- 与 Google Cloud 的深度集成
- 与推理端点 (Inference Endpoints) 的集成
- 运用 TRL 在单个 GPU 上对 Gemma 进行微调的示例
Gemma 是什么?
Gemma 是 Google 依据 Gemini 技能推出的四款新式大型言语模型(LLM),供给了 2B 和 7B 两种不同规划的版别,每种都包含了预练习根底版别和经过指令优化的版别。一切版别均可在各类消费级硬件上运转,无需数据量化处理,拥有高达 8K tokens 的处理才能:
- gemma-7b:7B 参数的根底模型。
- gemma-7b-it:7B 参数的指令优化版别。
- gemma-2b:2B 参数的根底模型。
- gemma-2b-it:2B 参数的指令优化版别。
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 |
在 7B 参数级别,Gemma 表现出色,与市场上最佳模型如 Mistral 7B 平起平坐。而 2B 版别的 Gemma 虽然规划较小,但在其类别中的表现也颇具竞争力,虽然在排行榜上的得分并未超越相似规划的顶尖模型,例如 Phi 2。咱们等待社区对这些模型的实在运用反应,以进一步优化和调整。
需求浅浅再强调一下:LLM 排行榜特别适用于衡量预练习模型的质量,而不太适用于谈天模型。咱们鼓舞对谈天模型运转其他基准测验,如 MT Bench、EQ Bench 和 lmsys Arena。
Prompt 提示词格局
Gemma 的根底模型不限定特定的提示格局。如同其他根底模型,它们能够依据输入序列生成一个合理的续接内容,适用于零样本或少样本的推理使命。这些模型也为针对特定应用场景的微调供给了坚实的根底。指令优化版别则采用了一种极端简练的对话结构:
<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
库中供给的谈天模板简化这一进程。
探索不知道领域
虽然技能陈述供给了关于根底模型练习和评价进程的信息,但关于数据集构成和预处理的详细细节则较为短缺。据悉,这些模型是依据来自互联网文档、编程代码和数学文本等多种数据源练习而成,经过严格筛选,以扫除含有敏感信息和不适内容的数据。
对于 Gemma 的指令优化模型,关于微调数据集以及与顺序微调技能(SFT)和 依据人类反应的强化学习(RLHF)相关的超参数设置,细节同样未揭露。
演示
现在,你能够在 Hugging Chat 上体会与 Gemma 指令模型的互动对话!点击此处拜访:huggingface.co/chat?model=…
运用 Transformers
凭借 Transformers 的 4.38 版别,你能够轻松地运用 Gemma 模型,并充分运用 Hugging Face 生态系统内的东西,包含:
- 练习和推理脚本及示例
- 安全文件格局(
safetensors
) - 集成了诸如 bitsandbytes(4位量化)、PEFT(参数效率微调)和 Flash Attention 2 等东西
- 辅助东西和协助器,以便运用模型进行生成
- 导出模型以便布置的机制
别的,Gemma 模型支撑 torch.compile()
与 CUDA 图的结合运用,在推理时可完成约 4 倍的速度提高!
保证你运用的是最新版别的 transformers
:
pip install -U "transformers==4.38.0" --upgrade
以下代码片段展现了怎么结合 transformers 运用 gemma-7b-it
。运转此代码需大约 18 GB 的 RAM,适用于包含 3090 或 4090 在内的消费级 GPU。
from transformers import AutoTokenizer, pipeline
import torch
model = "google/gemma-7b-it"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
"text-generation",
model=model,
model_kwargs={"torch_dtype": torch.bfloat16},
device="cuda",
)
messages = [
{"role": "user", "content": "Who are you? Please, answer in pirate-speak."},
]
prompt = pipeline.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
outputs = pipeline(
prompt,
max_new_tokens=256,
add_special_tokens=True,
do_sample=True,
temperature=0.7,
top_k=50,
top_p=0.95
)
print(outputs[0]["generated_text"][len(prompt):])
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 = 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 Mlaga 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 Mlaga are two of the most popular tourist destinations in Spain. Both cities boast a rich history, vibrant culture,']
假如你在 TPU 或多个 GPU 设备上运转,能够运用 jit
和 pmap
来编译和并行执行推理使命。
与 Google Cloud 集成
你能够经过 Vertex AI 或 Google Kubernetes Engine (GKE) 在 Google Cloud 上布置和练习 Gemma,运用 文本生成推理 和 Transformers 完成。
要从 Hugging Face 布置 Gemma 模型,请拜访模型页面并点击布置 -> Google Cloud。这将引导你进入 Google Cloud Console,在那里你能够经过 Vertex AI 或 GKE 一键布置 Gemma。文本生成推理为 Gemma 在 Google Cloud 上的布置供给支撑,这是咱们与 Google Cloud 协作伙伴关系的开始效果。
你也能够经过 Vertex AI Model Garden 直接拜访 Gemma。
要在 Hugging Face 上微调 Gemma 模型,请拜访 模型页面 并点击 练习 -> Google Cloud。这将引导你进入 Google Cloud Console,在那里你能够在 Vertex AI 或 GKE 上拜访笔记本,以在这些平台上微调 Gemma。
这些集成是咱们 与 Google 协作伙伴关系效果的一部分,未来还会有更多精彩内容发布,敬请等待!
与推理端点集成
你能够在 Hugging Face 的 推理端点 上布置 Gemma,该端点运用文本生成推理作为后端。文本生成推理 是由 Hugging Face 开发的可用于生产环境的推理容器,旨在简化大型言语模型的布置。它支撑连续批处理、令牌流式传输、多 GPU 张量并行加快推理,并供给生产就绪的日志记录和跟踪功用。
要布置 Gemma 模型,请拜访 HF Hub 模型页面 并点击 布置 -> 推理端点。有关 运用 Hugging Face 推理端点布置 LLM的更多信息,请参阅咱们之前的博客文章。推理端点经过文本生成推理支撑 音讯 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 进行微调
在消费级 GPU 上练习大型言语模型既是技能上的应战,也是计算上的应战。本节将介绍 Hugging Face 生态系统中可用的东西,这些东西能够协助你高效地在消费级 GPU 上练习 Gemma。
一个微调 Gemma 的示例命令如下。咱们运用 4 位量化和 QLoRA(一种参数效率微调技能)来削减内存运用,方针是一切注意力块的线性层。值得注意的是,与密集型 Transformer 不同,MLP 层(多层感知器层)因其稀少性不适合与 PEFT(参数效率微调)技能结合运用。
首要,装置 TRL 的最新版别并克隆库房以获取 练习脚本:
pip install -U transformers
pip install git+https://github.com/huggingface/trl
git clone https://github.com/huggingface/trl
cd trl
然后运转脚本:
accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml --num_processes=1
examples/scripts/sft.py
--model_name google/gemma-7b
--dataset_name OpenAssistant/oasst_top1_2023-08-25
--batch_size 2
--gradient_accumulation_steps 1
--learning_rate 2e-4
--save_steps 20_000
--use_peft
--peft_lora_r 16 --peft_lora_alpha 32
--target_modules q_proj k_proj v_proj o_proj
--load_in_4bit
在单个 A10G GPU 上,这个练习进程大约需求 9 小时。经过调整 --num_processes
参数为你可用的 GPU 数量,能够完成并行化练习,然后缩短练习时刻。
额定资源
- Hub 上的模型
- 敞开 LLM 排行榜
- Hugging Chat 上的谈天演示
- Gemma 官方博客
- Gemma 产品页面
- Vertex AI 模型花园链接
- Google Notebook 教程
称谢
此次发布和在生态系统中的集成是由包含 Clmentine、Eleuther 评价东西(LLM 评价)、Olivier、David(文本生成推理支撑)、Simon(在 Hugging Face 上开发新的拜访操控特性)、Arthur、Younes、Sanchit(将 Gemma 集成到 transformers 中)、Morgan(将 Gemma 集成到 optimum-nvidia,即将推出)、Nathan、Victor、Mishig(使 Gemma 在 Hugging Chat 上可用)等众多社区成员的共同努力而成。
咱们特别感谢 Google 团队发布 Gemma 并使其在开源 AI 社区中可用,为推动敞开式人工智能开展做出了重要贡献。