OpenELM:开启开放训练和推理框架的高效语言模型家族

随着大模型模型规模的增长,这些强大工具的透明度、可复现性和对数据偏见的敏感性也引起了人们的关注。这些问题不仅关系到研究的开放性和公平性,也关系到模型输出的可信度和安全性。为了应对这些挑战,Apple的研究团队发布了名为OpenELM的新一代开放语言模型。OpenELM采用了层级缩放策略,优化了变换器模型中每层的参数分配,从而提升了模型的准确性。例如,在大约十亿参数的预算下,OpenELM在准确性上比现有的开放语言模型OLMo提高了2.36%,同时所需的预训练数据减少了一倍。

OpenELM与其他几种大型语言模型在模型大小、预训练令牌数、平均准确率等方面的对比。OpenELM在效率和准确率上超越了其他模型

OpenELM架构

OpenELM采用了解码器仅的变换器架构,这种架构专注于生成文本任务,并且是当前大型语言模型的主流设计。这种架构的优势在于它能够集中所有的参数用于解码,而不是像编码器-解码器架构那样将参数分散在编码和解码两个部分。

OpenELM的一个关键创新是层级缩放策略,它允许模型根据每层的需要分配不同数量的参数。这种策略通过调整变换器层中的注意力头数和前馈网络的维度来实现,使得模型能够更有效地利用其参数预算,从而在各种任务上实现更高的准确性。

OpenELM的架构还包括了一系列先进的组件,如下:

  • RMSNorm: OpenELM使用RMSNorm作为其正规化层,有助于模型训练的稳定性和更快的收敛速度。
  • RoPE(旋转位置嵌入): 这是一种新颖的位置编码方法,可以更有效地捕捉序列中的位置信息。
  • 分组查询注意力(GQA): 替代了传统的多头注意力机制,可能提供更好的注意力聚焦和计算效率。
  • SwiGLU FFN: 这是一种改进的前馈网络,通过门控机制提高了信息处理的能力。
  • Flash Attention: 这是一种高效的注意力计算方法,可以减少内存使用并加速模型的推理过程。

OpenELM的架构设计允许模型进行有效的微调。通过指令调整和参数高效微调(PEFT),模型能够快速适应特定的任务和应用场景,进一步提升其性能。这种灵活性使得OpenELM不仅在预训练阶段表现出色,而且在微调后也能在各种下游任务中发挥出色的性能。

OpenELM的架构和训练过程是完全开放的。研究者和开发者可以访问所有的训练日志、检查点和配置,这种开放性促进了社区的协作和创新,使得OpenELM成为一个强大的、不断进化的语言模型平台。

预训练

OpenELM的预训练使用了多个公共数据集,包括RefinedWeb、去重后的PILE、RedPajama的一个子集以及Dolma v1.6的一个子集,总共约有1.8万亿个token。这些数据的详细情况在表2中进行了总结。

用于OpenELM预训练的具体数据集及其大小,包括RefinedWeb、PILE、Dolma等

OpenELM的变体使用了CoreNet进行了350,000次迭代(或训练步)的训练,并采用了AdamW优化器。训练使用了余弦学习率调度策略,预热5,000次迭代,最终学习率衰减至最大学习率的10%。此外,还使用了权重衰减0.1和梯度裁剪1.0。

OpenELM的性能评估涵盖了不同的任务,并使用了LM Evaluation Harness。评估包括标准零样本任务、OpenLLM排行榜任务和LLM360排行榜任务。这些评估框架允许我们全面评估OpenELM在推理(例如ARC-c、HellaSwag和PIQA)、知识理解(例如MMLU和RACE)以及错误信息和偏见(例如TruthfulQA和CrowS-Pairs)方面的表现。

用于评估OpenELM性能的不同任务和指标,分为三个部分:标准零样本任务、OpenLLM排行榜任务、LLM360排行榜任务        

实验

OpenELM在训练过程中,在多个零样本任务上的准确率变化情况。图表显示了随着训练迭代次数的增加,模型性能的提升

OpenELM在零样本和少样本设置下的性能表现尤为突出。与其他公开可用的大型语言模型相比,例如PyThia、Cerebras-GPT、TinyLlama、OpenLM、MobiLlama和OLMo,OpenELM显示出了其优越性。图1展示了OpenELM在七个标准零样本任务上的准确率随训练迭代次数的变化情况。研究团队观察到,随着训练时间的增加,大多数任务的准确率呈现出整体上升的趋势。

OpenELM与其他几种大型语言模型在不同评估框架下的性能比较,包括在零样本任务和少样本任务上的表现

研究团队还使用经过清洗的UltraFeedback数据集的变体,该数据集包含60k个提示,用于指令调整。通过使用Alignment Handbook库进行指令调整,OpenELM的平均准确率在不同评估框架中一致提高了1-2%。

指令调整对不同尺寸OpenELM模型在各种任务上准确性的影响

在CommonSense推理训练和评估设置中,研究团队使用了170k个训练样本,这些样本跨越了8个多项选择数据集。通过将OpenELM与LoRA和DoRA等方法集成,并使用8个NVIDIA H100 GPU进行微调,表6显示了参数高效微调(PEFT)方法可以应用于OpenELM,并且LoRA和DoRA在给定的CommonSense推理数据集上平均准确率相似。

OpenELM在使用参数高效微调(PEFT)方法LoRA和DoRA后,在常识推理基准测试上的性能

基准测试

研究团队在现代消费级硬件上对OpenELM进行了基准测试,使用了BFloat16数据类型。具体的测试平台包括配备Intel i9-13900KF CPU、64 GB DDR5 4000 DRAM、NVIDIA RTX 4090 GPU的Linux工作站,以及搭载Apple M2 Max系统芯片、64GiB RAM的macOS MacBook Pro。这些基准测试涵盖了模型在不同硬件平台上的推理效率。

基准测试中,研究团队提供了两个独立的性能指标:(1) 提示处理(预填充)的token吞吐量;(2) token生成的吞吐量。此外,还报告了总的组合吞吐量。所有模型的测试都是顺序执行的,并且在每个模型的测试前,执行了一次完整的“干运行”,以生成1024个token,这有助于提高后续模型的生成吞吐量。

OpenELM与其他几种大型语言模型在不同硬件平台上的处理速度(token throughput)比较

基准测试的结果分别在表7a和7b中展示。尽管OpenELM在类似参数规模下展现出了更高的准确性,但在推理速度上却比OLMo慢。通过对模型进行综合分析,研究团队发现OpenELM的大部分处理时间可以归因于其对RMSNorm的简单实现。特别是,与优化过的LayerNorm相比,RMSNorm的简单实现导致了大量的独立核启动,每个核处理的输入量很小,而不是像LayerNorm那样通过单个融合核启动来处理。

分析了归一化层(如LayerNorm和RMSNorm)在OpenELM和OLMo模型中的处理速度,并指出了RMSNorm实现的潜在优化空间

表8进一步展示了归一化层对性能的影响。将OLMo中的LayerNorm替换为RMSNorm后,生成吞吐量显著下降。这表明,尽管Apex的RMSNorm实现相比简单实现在吞吐量上有所提升,但与LayerNorm相比仍存在显著的性能差距。这一发现突出了未来工作在提高OpenELM推理效率方面的优化潜力。

实验结果证明OpenELM作为一种新型的开放语言模型,以其创新的架构和高效的参数分配策略,在自然语言处理领域展现出了卓越的性能和准确性。它所采用的解码器仅变换器架构、层级缩放策略以及一系列先进技术组件,不仅提升了模型的语言理解与生成能力,还保证了模型训练的稳定性和推理的高效率。OpenELM的全面开放性,包括训练日志、检查点和配置的共享,进一步促进了研究社区的协作与知识共享,为未来的技术进步和应用创新奠定了坚实的基础。

论文链接:https://arxiv.org/abs/2404.14619

GitHub地址:https://github.com/apple/corenet

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

守护进程到底是什么?如何创建?(图文并茂,你不得不看的一篇文章)

目录 守护进程(Daemon Process)详解 守护进程的特点 创建守护进程的步骤 用守护进程实现输入Hello功能 守护进程的用途 如何查看我们的守护进程? 1. ps 命令 2. top 命令 总结 守护进程(Daemon Process)详解 …

如何在主动动态安全中使用人工智能驱动的威胁分类提高防御精准度

面对当今世界不断演变的网络威胁,人工智能和网络安全将会发挥重要的防护作用。在数据泄露和网络攻击日益突出的时代,人工智能和网络安全之间的合作成为数字安全战场上的强大盟友。 本文将深入研究这两个领域的融合,揭示它们在彻底改变威胁检测…

Java---Mybatis详解二

雄鹰展翅凌空飞, 大江奔流不回头。 壮志未酬心未老, 豪情万丈任遨游。 巍巍高山攀顶峰, 滔滔黄河入海流。 风云变幻凭君舞, 踏遍天涯尽逍遥。 目录 一,环境准备 二,删除 三,删除(预编译SQL) 为什…

奇瑞被曝强制加班,“896”成常态且没有加班费

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 7 月 2 日消息,一位认证为“奇瑞员工”的网友近期发帖引发热议,奇瑞汽车内部存在强制加班行为,每周加班时长需大于 20 小时并且没有加班费,仅补贴 10 元…

CJSON库

目录 一、介绍 1、JSON是什么 2、为什么使用CJSON 3、JSON格式 二、使用CJSON构造JSON 1、创建对象 2、添加字段 3、转换格式 4、释放对象 三、使用CJSON解析JSON 1、解析数据 2、 获取字段 3、释放对象 一、介绍 1、JSON是什么 JSON是什么呢?JSON全称…

Android studio 打包低版本的Android项目报错

一、报错内容 Execution failed for task :app:packageRelease. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade> com.android.ide.common.signing.KeytoolException: Failed to read key key0 from store "…

如何创建移动类型

第一步打开事务代码: OMJJ 下面这个工作区可以不填,或者填入你的范围(例如我准备copy Z52成为Z54 那么就可以输入从Z52到Z54,SAP的这个操作就是这么怪,哈哈)不然就会出现一个这样的报错“在工作区中指定关…

聚焦西安应博会|2024西安城市安全应急产业展9月精彩呈现

2024西安城市安全应急产业博览会 时间:2024年9月12日-14日 地点:西安国际会展中心 运营:西安西部文化产业博览会有限公司 【展会简介】 为推动安全应急装备向智能化、成套化、专业化方向发展,迎接新质生产力在应急产业新技术…

在C++中,工厂模式的思考(《C++20设计模式》及常规设计模式对比)

文章目录 一、前言二、讲解1、构造函数的弊端2、工厂方法(解决上述弊端)3、简单工厂3.1 **UML类图**3.2 **实现** 4、工厂模式4.1 **UML类图**4.2 **实现** 5、抽象工厂5.1 **UML类图**5.2 **实现** 三、总结 一、前言 在看《C20设计模式》一书中产生了…

【软件测试】快速定位bug,编写测试用例

作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员,那么在团队里你在开发中的地位显而易见 ,口碑、升值、加薪那应该是你遥不可及的梦 但是作为测试人员来说&…

【ARMv8/v9 GIC 系列 5 -- GIC GICD_CTRL 使用详细介绍】

文章目录 GICD_CTRLGICD_CTLR 寄存器结构RWP(Register Write Pending)E1NWF(Enable 1 of N Wakeup Functionality)DS(Disable Security) 亲和性路由(Affinity Routing)ARE_NSARE_S 中…

华侨大学24计算机考研数据速览,专硕22408复试线290分,学硕11408接收调剂!

华侨大学计算机专业创建于1980年,是福建省最早设立计算机专业的高校之一。1982年成立计算机系,2008年成立计算机科学与技术学院。根据“华侨大学计算机科学与技术学院网站”资料,该院有计算机科学与技术、软件工程、网络工程3个本科专业&…

Mysql-基础-DDL操作

1、数据库操作 查询 查询所有数据库 show databases; 创建 创建数据库 create database [if not exists] 数据库名 使用及查询 use 数据库名 select database() 查询当前所处数据库 删除 drop database [if not exists] 数据库名 2、表操作 查询当前库中的所…

使用Python绘制彩虹效果:动态彩虹动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义绘制彩虹函数定义颜色列表主循环 完整代码 引言 彩虹是自然界中最美丽的现象之一。通过编程,我们可以将这一奇妙的景象带到屏幕上。在这篇博客中,我们将使用Python来创建一个…

如何优化网站SEO排名?

选择那些容易排名的关键词。使用工具找到那些竞争少但有流量的词语。其次,内部链接非常重要。通过合理的内部链接,可以提升各个页面的权重。 增加FAQ部分能帮助你捕捉更多的长尾关键词流量。争取出现在精选摘要的位置,可以直接提升你的曝光率…

django 逆向生成对应数据库表的models模型类 —— python

一,在setting.py中配置好连接数据库的参数 在setting中的DATABASESZ中配置默认参数,并在INSTALLED_APPS中导入模块名。 DATABASES {default:{ENGINE: django.db.backends.mysql, # 数据库引擎NAME: jljupcs, # 数据库名称HOST: 127.0.0.1, # 数据库…

【设计模式】策略模式(定义 | 特点 | Demo入门讲解)

文章目录 定义策略模式的结构 QuickStart | DemoStep1 | 策略接口Step2 | 策略实现Step3 | 上下文服务类Step4 | 客户端 策略模式的特点优点缺点 定义 策略模式Strategy是一种行为模式,它能定义一系列算法,并将每种算法分别放入到独立的类中&#xff0c…

解决pip安装时的“SyntaxError: invalid syntax”错误

项目场景: 项目中有新的成员加入时,第一步就是安装开发环境,然而往往同样的机器、同样的配置,我们却总能遇到各种各样不同的问题。 今天分享一个简单的操作问题。 问题描述 项目用到pandas,安装pandas时遇到Syntax…

代码随想录-Day46

121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从…

CAN学习笔记

学习链接:CAN学习笔记(1)_can sjw-CSDN博客 内容全部取自链接,非原创。用于自己学习和记录,如有错误请指正。如果侵权了,请联系我删掉。 CAN主要有两种物理层,1.闭环的ISO11898 2.开环的ISO1…