谷歌开源的LLM大模型 Gemma 简介

news2024/10/1 21:25:32

 相关链接:

  • Hugging face模型下载地址:https://huggingface.co/google/gemma-7b
  • Github地址:https://github.com/google/gemma_pytorch
  • 论文地址:https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf
  • 官方博客:Gemma: Google introduces new state-of-the-art open models

Gemma简介

谷歌推出了 Gemma,一个开放大型语言模型 (LLM) 的尖端系列,标志着其致力于开源人工智能的重要一步。同时Gemma 与 Hugging Face 平台的无缝集成,可以让AIGC爱好者更好的去使用。

Gemma 是基于 Gemini 技术推出的四款新型大型语言模型(LLM),提供了 2B 和 7B 两种不同规模的版本,每种都包含了预训练基础版本和经过指令优化的版本。所有版本均可在各类消费级硬件上运行,无需数据量化处理,拥有高达 8K tokens 的处理能力:

  • gemma-7b:7B 参数的基础模型。
  • gemma-7b-it:7B 参数的指令优化版本。
  • gemma-2b:2B 参数的基础模型。
  • gemma-2b-it:2B 参数的指令优化版本。

Gemma 模型的性能如何?以下是其基础版本与其他开放模型在 LLM 排行榜 上的比较(得分越高越好):

Gemma 7B 型号脱颖而出,是一款特别强大的选择,其性能可与 7B 重量级顶级竞争者的性能相媲美,包括 Mistral 7B 等。另一方面,Gemma 2B 型号的尺寸提供了一个有趣的选择。然而,与类似尺寸的最熟练模型(例如 Phi 2)相比,它在排行榜上的排名并不高。

数据集

这些模型在包​​含各种来源、总计 6 万亿个Token的文本数据集上进行训练。以下是关键信息:

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

Prompt 提示词格式

Gemma 的基础模型不限定特定的提示格式。如同其他基础模型,它们能够根据输入序列生成一个合理的续接内容,适用于零样本或少样本的推理任务。这些模型也为针对特定应用场景的微调提供了坚实的基础。指令优化版本则采用了一种极其简洁的对话结构:

<start_of_turn>用户_ _
敲击<end_of_turn> 
<start_of_turn>模型​​​​
谁在那里< end_of_turn > 
< start_of_turn >用户
Gemma <end_of_turn> 
<start_of_turn>模型_ _ _ _
杰玛是谁?<转弯结束>

要有效利用这一格式,必须严格按照上述结构进行对话。

探索未知领域

尽管技术报告提供了关于基础模型训练和评估过程的信息,但关于数据集构成和预处理的具体细节则较为欠缺。据悉,这些模型是基于来自互联网文档、编程代码和数学文本等多种数据源训练而成,经过严格筛选,以排除含有敏感信息和不适内容的数据。

对于 Gemma 的指令优化模型,关于微调数据集以及与顺序微调技术(SFT)和 基于人类反馈的强化学习(RLHF)相关的超参数设置,细节同样未公开。

演示

可以在 Hugging Chat 上体验与 Gemma 指令模型的互动对话!点击此处访问:https://huggingface.co/chat?model=google/gemma-7b-it

或者也可以在其他开源社区体验Gemma。

使用 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.1" --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,
    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 设备上运行,可以利用 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 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 \
    examples/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 GPU 上,这个训练过程大约需要 9 小时。通过调整 --num_processes 参数为你可用的 GPU 数量,可以实现并行化训练,从而缩短训练时间。

其他资源

  • Hub 上的模型
  • 开放 LLM 排行榜
  • Hugging Chat 上的聊天演示
  • Gemma 官方博客
  • Gemma 产品页面
  • Vertex AI 模型花园链接
  • Google Notebook 教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多址接入技术 ---FDMA、TDMA、CDMA

1、多址接入技术 所谓多址技术就是把同一个无线信道按照时间、 频率等进行分割, 使不同的用户都能够在不同的分割段中使用这一信道, 而又不会明显地感觉到他人的存在, 就好像自己在专用这一信道一样。 占用不同的分割段就像是拥有了不同的地址, 使用同一信道的多个用户就…

Vue.js过滤器:让数据展示更灵活

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Unity的相机跟随和第三人称视角二

Unity的相机跟随和第三人称视角二 展示介绍第二种相机模式远离代码总结 展示 我录的视频上可能看不太出来&#xff0c;但是其实今天的这个方法比原来写的那个方法更简便并且死角更少一些。 这里我也做了两个人物偏移的视角&#xff0c;按Q是原来的两个相机模式切换&#xff0c…

问题 | 程序员求职宝典

程序员的金三银四求职宝典 随着春天的脚步渐近,对于许多程序员来说,一年中最繁忙、最重要的面试季节也随之而来。金三银四,即三月和四月,被广大程序员视为求职的黄金时期。在这两个月里,各大公司纷纷开放招聘,求职者们则通过一轮又一轮的面试,力争心仪的职位。而如何在…

从零学习Linux操作系统 第三十二部分 Ansible中的变量及加密

一、变量的基本设定及使用方式 变量命名&#xff08;与shell相同&#xff09;&#xff1a; 只能包含数字&#xff0c;下划线&#xff0c;字母 只能用下划线或字母开头 .变量级别&#xff1a; 全局从命令行或配置文件中设定的paly:在play和相关结构中设定的主机:由清单&…

NeRF模型NeRF模型

参考视频&#xff1a;https://www.youtube.com/watch?vHfJpQCBTqZs&ab_channelVision%26GraphicsSeminaratMIT NeRF模型的输入输出: 输入: (x, y, z): 一个三维空间坐标,代表场景中的一个位置点(θ, φ): 视线方向,θ表示与y轴的夹角,φ表示与x轴的夹角,用两个角度可以…

(C语言)strcpy与strcpy详解,与模拟实现

目录 1. strcpy strcpy模拟实现&#xff1a; 实现方法1&#xff1a; 实现方法2&#xff1a; 2. strcat strcat模拟实现&#xff1a; 1. strcpy 作用&#xff1a;完成字符串的复制。 头文件&#xff1a;<string.h> destination是字符串要复制到的地点&#xff0c;s…

图片在div完全显示

效果图&#xff1a; html代码&#xff1a; <div class"container" style" display: flex;width: 550px;height: 180px;"><div class"box" style" color: red; background-color:blue; width: 50%;"></div><div …

FreeRTOS操作系统学习——同步互斥与通信

同步&#xff08;Synchronization&#xff09; 同步是一种机制&#xff0c;用于确保多个任务能够按照特定的顺序协调执行或共享数据。当一个任务需要等待其他任务完成某个操作或满足某个条件时&#xff0c;同步机制可以帮助任务进行协调和等待。 在FreeRTOS中&#xff0c;常见…

【布局:1688,阿里海外的新筹码?】1688重新布局跨境海外市场:第一步开放1688API数据采集接口

2023年底&#xff0c;阿里巴巴“古早”业务1688突然成为“重头戏”&#xff0c;尤其宣布正式布局跨境业务的消息&#xff0c;一度引发电商圈讨论。1688重新布局跨境海外市场&#xff1a;第一步开放1688API数据采集接口 2023年11月中旬&#xff0c;阿里财报分析师电话会上&…

SpringBoot项目如何部署到服务器

文章目录 准备&#xff1a;方式一&#xff1a;Jar包方式&#xff08;推荐&#xff09;部署步骤&#xff1a; 方式二&#xff1a;War包方式部署步骤&#xff1a; 总结 准备&#xff1a; 云服务器&#xff08;阿里云、腾讯云等&#xff09;Linux系统以及运行所需的环境 方式一&a…

数据结构部分

来源地址 一 数据结构 1 堆和树之间的区别 区别就在于树是没有特定顺序的&#xff0c;你需要遍历整个树才能找到特定元素&#xff1b;而堆是有序的&#xff0c;你可以直接找到最大&#xff08;或最小&#xff09;的元素。 堆&#xff1a;假设你正在开发一个任务调度系统&…

Java二叉树 (2)

&#x1f435;本篇文章将对二叉树的一些基础操作进行梳理和讲解 一、操作简述 int size(Node root); // 获取树中节点的个数int getLeafNodeCount(Node root); // 获取叶子节点的个数int getKLevelNodeCount(Node root,int k); // 获取第K层节点的个数int getHeight(Node r…

day06-网路编程

#include <myhead.h>int do_add(sqlite3 *ppDb) {int numb;char name[20];int age;int salary;printf("请输入要插入的信息:");scanf("%d %s %d %d", &numb, name, &age, &salary);char sql[128] "";sprintf(sql, "INSE…

Python算法(顺序查找/二分查找)

一。顺序查找法&#xff1a; 用途&#xff1a;主要用于查找无序的列表的某个元素 时间复杂度为O(n) 拓展&#xff1a;函数index&#xff08;&#xff09;运用的是顺序查找 二。二分查找法&#xff1a; 前提&#xff1a;被查找的列表顺序一定要是顺序的 用途&#xff1a;对…

java数值运算a/0 ;0/b; 0/0;结果

3/0indinity 无穷大 0/40 0/0NaN 不定值

JVM 常用监控工具介绍和使用

一、JPS 进程查看工具 用于列出当前系统中所有正在运行的 Java 进程。它的主要作用是查看 Java 进程的 PID&#xff08;进程标识符&#xff09;和主类名。可以帮助开发人员快速了解系统中正在运行的 Java 进程&#xff0c;对于监控和调试 Java 应用程序非常有用。 用法&#…

官网:所谓高大上,无非是把核心突出到了极致。

2023-10-30 14:37贝格前端工场 企业官网建设&#xff0c;客户往往要求高大上&#xff0c;但是很多设计师对高大上的解读存在了偏差&#xff0c;以至于设计的网站客户不满意&#xff0c;其实抓住官网所要展现的核心点&#xff0c;把核心点展现到极致&#xff0c;就是高大上。 …

Bee Mobile组件库重磅升级

Bee Mobile组件库重磅升级&#xff01; 丰富强大的组件移动预览快速上手create-bee-mobile Bee Mobile组件库重磅升级&#xff01; Bee Mobile组件库最新 v1.0.0 版本&#xff0c;支持最新的 React v18。 主页&#xff1a;Bee Mobile 丰富强大的组件 一共拥有50多个组件&…

果蔬作物疾病防治系统|基于Springboot的果蔬作物疾病防治系统设计与实现(源码+数据库+文档)

果蔬作物疾病防治系统目录 目录 基于Springboot的果蔬作物疾病防治系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、果蔬百科列表 2、公告信息管理 3、公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…