一文速览Google的Gemma:从gemma1到gemma2(2代27B的能力接近llama3 70B)

前言

如此文《七月论文审稿GPT第3.2版和第3.5版:通过paper-review数据集分别微调Mistral、gemma》所讲

Google作为曾经的AI老大,我司自然紧密关注,所以当Google总算开源了一个gemma 7b,作为有技术追求、技术信仰的我司,那必须得支持一下,比如用我司的paper-review数据集微调试下,彰显一下gemma的价值与威力

后来我司考虑到毕竟llama的生态更完善、迭代速度更快,故之后更多是微调llama,然后Google到底是不甘落后,24年6.27,在时隔4个月之后,Google终于推出了gemma的升级版:gemma2,我其实想说,如果是前几年的AI时代,这个速度可以了,但如今是大模型时代,还是太慢了(毕竟llama已到3,Claude则已到3.5)

  1. 不过既然推出了,加之我司把论文审稿的数据弄成7方面review之后,llama2、llama3都还没pk赢过gpt4(4方面review下微调llama,早已赢过了GPT4-1106;7方面review下微调llama3却只和GPT4打成平手)
  2. 如此,可以让情况4的早7数据,微调下gemma2,过程中保持“微调的prompt用的是potential,与阿荀给的数据格式一致”,包括推理的prompt

预期是:开源模型得在7方面review下微调后的表现,类似4方面review那样,也是可以超过gpt4的

如此,便有了本文(且把之前关于gemma1的介绍也从上面那篇文章 《通过paper-review数据集分别微调Mistral、gemma》中脱离出来,归纳到本文)

第一部分 Google推出gemma,试图与llama、Mistral形成三足鼎立之势

Google在聊天机器人这个赛道上,可谓被双向夹击

  • 闭源上被OpenAI的ChatGPT持续打压一年多(尽管OpenAI用的很多技术比如transformer、CoT都是Google发明的,尽管Google推出了强大的Gemini)
  • 开源上则前有Meta的llama,后有Mistral的来势汹汹

终于在24年2.21,按耐不住推出了开源模型gemma(有2B、7B两个版本,这是其技术报告这是其解读之一),试图对抗与llama、Mistral在开源场景上形成三足鼎立之势

1.1 gemma 7B的性能:比肩Mistral 7B、超越llama 7B

Gemma 7B在 18 个基于文本的任务中的 11 个上优于相似参数规模的开放模型,例如除了问答上稍逊于llama 13B,其他诸如常识推理、数学和科学、编码等任务上的表现均超过了llama2 7B/13B(关于llama2的介绍请看此文的第三部分)、Mistral 7B

1.2 模型架构:基于Transformer解码器、多头/多查询注意力、RoPE、GeGLU、RMSNorm

1.2.1 基于Transformer解码器:上下文8192、词表256K、训练数据集6万亿token

Gemma 模型架构基于 Transformer 解码器

  1. 模型训练的上下文长度为 8192 个 token
  2. 其词表则比llama2 所用的32K大太多了,为 256k个token(导致我们微调gemma 7b时,在论文审稿所需要的理想长度12K之下且在已经用了qlora和flash attention的前提之下,48g显存都不够,详见此文)
  3. 至于训练数据集达到6万亿个token(即We trained Gemma models on up to 6T tokens of text,而llama2的训练集只有2万亿个token)

1.2.2 7B/2B模型使用多头注意力/多查询注意力、RoPE、GeGLU、RMSNorm

此外,gemma还在原始 transformer 论文的基础上进行了改进,改进的部分包括:

  • 多查询注意力:7B 模型使用多头注意力(即MHA,如下图左侧所示),而 2B 检查点使用多查询注意力「即MQA,如下图右侧所示,𝑛𝑢𝑚_𝑘𝑣_ℎ𝑒𝑎𝑑𝑠 = 1,关于GQA的更多介绍,请参见《一文通透各种注意力:从多头注意力MHA到分组查询注意力GQA、多查询注意力MQA

  • RoPE 嵌入:Gemma 在每一层中使用旋转位置嵌入,而不是使用绝对位置嵌入;此外,Gemma 还在输入和输出之间共享嵌入,以减少模型大小
  • GeGLU 激活:GeGLU 激活函数(其对应的论文为Google发的这篇《GLU Variants Improve Transformer),取代传统的 ReLU 非线性函数

    GeGLU是GeLU(Gaussian Error Linear Unit) 的门线性单元变体,而GeLU与ReLU不允许负值不同,其允许为负输入值执行梯度传播

    ​总之,GeGLU 的激活被分割为两部分,分别是 sigmoid 单元和线性映射单元(它与 sigmoid 单元的输出逐元素相乘),使得其与Llama 2和Mistral等用的SwiGLU极其类似(关于SwiGLU的细致介绍请看此文《LLaMA的解读与其微调:Alpaca-LoRA/Vicuna/BELLE/中文LLaMA/姜子牙/LLaMA 2》的1.2.3节:SwiGLU替代ReLU)

    唯一的区别是 GeGLU 使用的基础激活函数是 GeLU 而不是 Swish

  • 归一化:Gemma 对每个 transformer 子层的输入和输出进行归一化,这与仅对其中一个或另一个进行归一化的标准做法有所不同,另,gemma使用RMSNorm 作为归一化层

    如国外一开发者Sebastian Raschka所说,“At first glance, it sounds like Gemma has an additional RMSNorm layer after each transformer block. However, looking at the official code implementation, it turns out that Gemma just uses the regular pre-normalization scheme that is used by other LLMs like GPT-2, Llama 2(Gemma 仅仅使用了 GPT-2、Llama 2 等其他 LLM 使用的常规预归一化方案), and so on, as illustrated below

1.2.3 预训练、指令调优、RLHF、监督微调

对于 7B 模型,谷歌在 16 个pod(共计4096 个TPUv5e)上训练模型,他们通过 2 个pod对2B模型进行预训练,总计 512 TPUv5e

在一个 pod 中,谷歌对 7B 模型使用 16 路模型分片和 16 路数据复制,对于 2B 模型,只需使用 256 路数据复制

优化器状态使用类似 ZeRO-3 的技术进一步分片。在 pod 之外,谷歌使用了 Pathways 方法通过数据中心网络执行数据复制还原

  • 预训练
    Gemma 2B 和 7B 分别在来自网络文档、数学和代码的 2T 和 6T 主要英语数据上进行训练。与 Gemini 不同的是,这些模型不是多模态的,也不是为了在多语言任务中获得最先进的性能而训练的
    为了兼容,谷歌使用了 Gemini 的 SentencePiece tokenizer 子集。它可以分割数字,不删除多余的空白,并对未知 token 进行字节级编码
  • 指令调优与RLHF
    谷歌通过在仅文本、仅英语合成和人类生成的 prompt 响应对的混合数据上进行监督微调即SFT,以及利用在仅英语标记的偏好数据和基于一系列高质量 prompt 的策略上训练的奖励模型进行人类反馈强化学习即RLHF,对 Gemma 2B 和 Gemma 7B 模型进行微调

    具体而言
    \rightarrow​  gemma根据基于 LM 的并行评估结果来选择自己的混合数据,以进行监督微调。给定一组留出的(heldout) prompt, 让测试模型生成response,并让基线模型生成相同prompt下的response,然后让规模更大的高性能模型来预测哪个response更符合人类的偏好
    \rightarrow​  gemma还构建不同的 prompt 集来突出特定的能力,例如指令遵循、真实性、创造性和安全性等。gemma使用了不同的自动化LM裁判,它们采用了多种技术,比如思维链提示、对齐人类偏好等

第二部分 gemma2

24年6.27,Google终于推出了gemma的升级版:gemma2,至于在参数规模上,先推出了9B和27B的,2B的则待发布(这是其技术报告,这是其技术blog)

2.1 同是8192长度/RoPE/GeGLU/RMSNorm,但用了滑窗注意力/GQA/Logit软上限

总的来说,gemma2与gemma1的相同之处是的长下文长度也是8192个token,也使用旋转位置编码、GeGLU非线性函数,以及使用RMSNorm来归一化每个transformer子层、注意力层和前馈层的输入和输出

不同之处则在于

  1. gemma2在每一层交替使用局部滑动窗口注意力与全局注意力「We alternate between a local sliding window attention (Beltagy et al., 2020a,b) and global attention (Luong et al., 2015) in every other laye
    其中,局部注意力层的滑动窗口大小设置的4096,而全局注意力层的跨度则设置的8192
  2. 9B和27B模型都使用分组查询注意力GQA(在其技术报告中说的是,之所以选择 GQA,是因为它需要更少的参数,并且在推理时更快),其中num_groups = 2(如下图中部所示)

    为方便大家一目了然,我用一个表再总结归纳如下
    多头注意力MHA分组查询注意力GQA多查询注意力MQA
    LLaMA2ChatGLM2
    MistralGoogle Gemini
    Google gemma1 7BGoogle gemma2(包含9B 27B)Google gemma1 2B
  3. Logit软上限
    遵循Gemini 1.5(Gemini Team, 2024),gemma2在每个注意力层和最后一层中对logit进行软上限限制,使得logit的值保持在-soft_cap和+soft_cap之间
    更具体地说,我们设置logit为:

    对于9B和27B模型,他们将注意力logit限制在50.0,最终logit限制在30.0
    不过,考虑到gemma2的这个特性「注意力logit软上限」与常见的FlashAttention实现不兼容,故他们在针对“使用了FlashAttention的HuggingFace transformers库和vLLM实现库”时移除了这个特性,即废除了Logit软上限这个特性,说的不客气点,就是个鸡肋

总之,以下是具体的模型参数

参数/设计选择2.6B9B27B
模型尺寸d_model230435844608
层数Layers264246
前归一化pre-norm
后归一化post-norm
非线性激活函数
Non-linearity
GeGLUGeGLUGeGLU
前馈维数
Feedforward dim
184322867273728
头部类型Head typeGQAGQAGQA
头部数量Num heads 81632
KV头部数量
Num KV heads
4816
头部大小256256128
全局注意力跨度global att. span819281928192
滑动窗口sliding window409640964096
词汇表大小Vocab size256128256128256128
Tied embedding

2.2 预训练:训练数据、分词器、过滤器、知识蒸馏

2.2.1  gemma2的训练数据:9B 8万亿

gemma2的各个不同参数规模模型所用的训练数据自然不同,具体如下所示(过程中,进一步使用类似于ZeRO3的技术进行分片)

  • Gemma2 27B:在主要为英语数据的13万亿个tokens上训练
    在8x24x32配置的TPUv5p上训练,总计6144个芯片,具有768路数据复制和8路模型分片
  • Gemma2 9B模型:在8万亿个tokens上训练
    在8x16x32配置的TPUv4上训练,总计4096个芯片,具有1024路数据复制和4路模型分片
  • Gemma2 2.6B模型:在2万亿个tokens上训练
    在2x16x16配置的TPUv5e上训练,总计512个芯片,具有512路数据复制和1路模型分片

这些tokens来自多种数据源,包括网页文档、代码和科学文章。 我们的模型不是多模态的,也不是专门为最先进的多语言能力而训练的,而最终的数据混合是通过类似于Gemini 1.0的消融方法确定的

  • 分词器
    使用与Gemma 1和Gemini相同的分词器:一个带有拆分数字、保留空白和字节级编码的SentencePiece分词器,生成的词汇表有256k个条目
  • 过滤
    使用与Gemma 1相同的数据过滤技术。 具体来说,我们过滤预训练数据集以减少不需要或不安全的言论的风险,过滤掉某些个人信息或其他敏感数据

2.2.2 知识蒸馏:教师模型带学生模型

给定一个用作教师的大模型,通过蒸馏教师对每个token x在其上下文x_{c}中给出的概率来训练较小的模型,即P_{T}\left(x \mid x_{c}\right)

更准确地说,最小化教师模型和学生模型在各自计算出来的概率之间的负对数似然:

\min _{P_{S}} \sum_{x}-P_{T}\left(x \mid x_{c}\right) \log P_{S}\left(x \mid x_{c}\right)

其中P_{S}是学生模型的参数化概率。 在实践中,我们对教师模型进行一次推理并存储概率。 由于词汇表有265k个条目,故只存储教师概率的采样子集

2.3 微调:先SFT后RLHF

为了得到可以遵循指令的微调模型

  1. 首先,我们在一组仅文本、仅英语的合成和人工生成的prompt-response对上应用监督微调(SFT)
  2. 然后,我们在这些模型的基础上应用RLHF,奖励模型在标注的仅限英语的偏好数据上训练,策略基于与SFT阶段相同的prompt
  3. 最后,我们对每个阶段获得的模型进行平均,以提高它们的整体性能
    最终的数据混合和后训练方案,包括调整后的超参数,都是基于在提高有用性的同时最小化模型危害的基础上选择

2.3.1 通过教师模型做SFT训练

在合成和真实prompt上运行行为克隆,response主要由教师(即更大的模型)合成生成,且还在学生模型的分布上运行教师的蒸馏

2.3.1 RLHF:从人类反馈中进行强化学习

使用与Gemma 1类似的RLHF算法,但使用了不同的奖励模型,该模型比策略大一个数量级。新的奖励模型也更倾向于对话能力,特别是多轮对话 

且We average models from experiments run with different hyperparameters (Ramé et al., 2024

最终效果上还可以的,27B模型在一些测试基准上所表现出来的能力也能接近llama3 70B

// 待更

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven安装jar和pom到本地仓库

举例子我们要将 elastic-job-spring-boot-starter安装到本地的maven仓库&#xff0c;如下&#xff1a; <dependency><groupId>com.github.yinjihuan</groupId><artifactId>elastic-job-spring-boot-starter</artifactId><version>1.0.5&l…

关于组织赴俄罗斯(莫斯科)第 28 届国际汽车零部件、汽车维修设备和商品展览会商务考察的通知

关于组织赴俄罗斯&#xff08;莫斯科&#xff09; 第 28 届国际汽车零部件、汽车维修设备和商品展览会商务考察的通知 展会名称&#xff1a;俄罗斯&#xff08;莫斯科&#xff09;第 28 届国际汽车零部件、汽车零部件、汽车维修设备和商品展览会 时间&#xff1a;2024 年 8 月…

day02-Spark集群及参数

一、Spark运行环境变量问题(了解) 1-pycharm远程开发运行时&#xff0c;执行的是服务器的代码 2-通过本地传递指令到远程服务器运行代码时&#xff0c;会加载对应环境变量数据&#xff0c;加载环境变量文件是用户目录下的.bashrc文件 在/etc/bashrc 1-1 在代码中添加 使用os模块…

文本编辑命令和正则表达式

一、 编辑文本的命令 正则表达式匹配的是文本内容&#xff0c;Linux的文本三剑客&#xff0c;都是针对文本内容。 文本三剑客 grep&#xff1a;过滤文本内容 sed&#xff1a;针对文本内容进行增删改查 &#xff08;本文不相关&#xff09; awk&#xff1a;按行取列 &#x…

【网络架构】keepalive

目录 一、keepalive基础 1.1 作用 1.2 原理 1.3 功能 二、keepalive安装 2.1 yum安装 2.2 编译安装 三、配置文件 3.1 keepalived相关文件 3.2 主配置的组成 3.2.1 全局配置 3.2.2 配置虚拟路由器 四、实际操作 4.1 lvskeepalived高可用群集 4.2 keepalivedngi…

element 问题整合

没关系&#xff0c;凡事发生必有利于我 文章目录 一、el-table 同级数据对齐及展开图标的位置问题二、el-table 勾选框为圆角及只能勾选一个三、el-tree 弹框打开&#xff0c;使得列表关闭&#xff0c;且弹框滚动条回到顶部 一、el-table 同级数据对齐及展开图标的位置问题 ele…

Facebook的投流技巧有哪些?

相信大家都知道Facebook拥有着巨大的用户群体和高转化率&#xff0c;在国外社交推广中的影响不言而喻。但随着Facebook广告的竞争越来越激烈&#xff0c;在Facebook广告上获得高投资回报率也变得越来越困难。IPIDEA代理IP今天就教大家如何在Facebook上投放广告的技巧&#xff0…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL/WebEngine支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压&#xff0c;创…

响应式高端家居装修网站源码pbootcms模板

模板介绍 分享一款黄色的响应式高端家居装修网站源码pbootcms模板&#xff0c;该模板能自适应手机端&#xff0c;响应式的设计可让您自由编辑&#xff0c;适合任何关于装修&#xff0c;空间设计&#xff0c;家装&#xff0c;家居等业务的企业。 模板截图 源码下载 响应式高端…

C++——探索智能指针的设计原理

前言: RAII是资源获得即初始化&#xff0c; 是一种利用对象生命周期来控制程序资源地手段。 智能指针是在对象构造时获取资源&#xff0c; 并且在对象的声明周期内控制资源&#xff0c; 最后在对象析构的时候释放资源。注意&#xff0c; 本篇文章参考——C 智能指针 - 全部用法…

已解决问题 | 该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的

在Chrome浏览器中&#xff0c;如果你看到“该扩展程序未列在 Chrome 网上应用店中&#xff0c;并可能是在您不知情的情况下添加的”这样的提示&#xff0c;通常是因为该扩展程序没有通过Chrome网上应用店进行安装。以下是解决这个问题的步骤&#xff1a; 解决办法&#xff1a;…

计算机网络知识整理笔记

目录 1.对网络协议的分层&#xff1f; 2.TCP/IP和UDP之间的区别&#xff1f; 3.建立TCP连接的三次握手&#xff1f; 4.断开TCP连接的四次挥手&#xff1f; 5.TCP协议如何保证可靠性传输&#xff1f; 6.什么是TCP的拥塞控制&#xff1f; 7.什么是HTTP协议&#xff1f; 8…

MySQL高级-SQL优化- limit优化(覆盖索引加子查询)

文章目录 0、limit 优化0.1、从表 tb_sku 中按照 id 列进行排序&#xff0c;然后跳过前 9000000 条记录0.2、通过子查询获取按照 id 排序后的第 9000000 条开始的 10 条记录的 id 值&#xff0c;然后在原表中根据这些 id 值获取对应的完整记录 1、上传5个sql文件到 /root2、查看…

【工具推荐】ONLYOFFICE 桌面编辑器 8.1:引入全新功能,提升文档处理体验

ONLYOFFICE 桌面编辑器 8.1 现已发布&#xff1a;功能完善的 PDF 编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等 【工具推荐】ONLYOFFICE 桌面编辑器 8.1&#xff1a;引入全新功能&#xff0c;提升文档处理体验 一、什么是ONLYOFFICE&#xff1f; ONLYOFFICE 是…

PG备份与恢复

一、开启WAL归档 1、创建归档目录 我们除了存储数据目录pgdata之外&#xff0c;还要创建backups&#xff0c;scripts&#xff0c;archive_wals文件 mkdir -p /home/mydba/pgdata/arch mkdir -p /home/mydba/pgdata/scripts mkdir -p /home/mydba/backups chown -R mydba.myd…

API接口知识小结

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

ANSYS Electronics 电磁场仿真工具下载安装,ANSYS Electronics强大的功能和灵活性

ANSYS Electronics无疑是一款在电磁场仿真领域表现卓越的软件工具。它凭借强大的功能和灵活性&#xff0c;帮助用户在产品设计阶段就能精确预测和优化电磁场性能&#xff0c;从而极大地降低了实际测试成本&#xff0c;并显著提升了产品的可靠性。 这款软件不仅在电子设计领域有…

Python | Leetcode Python题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; MX5000000 is_prime [1] * MX is_prime[0]is_prime[1]0 for i in range(2, MX):if is_prime[i]:for j in range(i * i, MX, i):#循环每次增加iis_prime[j] 0 class Solution:def countPrimes(self, n: int) -> int:return sum(is_prim…

如何利用ChatGPT改善日常生活:一个普通人的指南

当你打开 ChatGPT&#xff0c;显现的是一个简洁的聊天界面。 许多人利用 ChatGPT 进行日常对话。 然而&#xff0c;ChatGPT 的功能远不止于此。 对话只是其众多能力中的一种&#xff0c;如果仅将其视为高级版的聊天机器人&#xff0c;那未免低估了它。 AI 在信息处理方面的…

【SpringMVC】_SpringMVC实现留言墙

目录 1. 需求分析 2. 接口定义 2.1 提交留言 2.2 获取全部留言 3. 响应数据 4. 服务器代码 4.1 MessageInfo 文件 4.2 MessageController 文件 5. 前端页面代码 5. 运行测试 1. 需求分析 实现如下页面&#xff1a; 1、输入留言信息&#xff0c;点击提交后&#xff0…