乐趣区

关于人工智能:欢迎-Gemma-Google-最新推出开源大语言模型

明天,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 指令模型的互动对话!点击此处拜访:https://huggingface.co/chat?model=google/gemma-7b-it

应用 🤗 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 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,']

如果你在 TPU 或多个 GPU 设施上运行,能够利用 jitpmap 来编译和并行执行推理工作。

与 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 教程

致谢

此次公布和在生态系统中的集成是由包含 Clémentine、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 社区中可用,为推动开放式人工智能倒退做出了重要奉献。

退出移动版