陈丹琦团队新作:Llama-2上下文扩展至128k,10倍吞吐量仅需1/6内存
陈丹琦团队刚刚发布了一种新的LLM上下文窗口扩展方法:
它仅用8k大小的token文档进行训练,就能将Llama-2窗口扩展至128k。
最重要的是,在这个过程中,只需要原来1/6的内存,模型就获得了10倍吞吐量。
除此之外,它还能大大降低训练成本:
用该方法对7B大小的羊驼2进行改造,只需要一块A100就能搞定。
团队表示:
希望这个方法有用、好用,为未来的LLM们提供廉价又有效的长上下文能力。
目前,模型和代码都已在HuggingFace和GitHub上发布。
只需添加两个组件
这个方法名叫CEPE,全称“并行编码上下文扩展(Context Expansion with Parallel Encoding)”。
作为轻量级框架,它可用于扩展任何预训练和指令微调模型的上下文窗口。
对于任何预训练的仅解码器语言模型,CEPE通过添加两个小组件来实现扩展:
一个是小型编码器,用于对长上下文进行块编码;
一个是交叉注意力模块,插入到解码器的每一层,用于关注编码器表示。
完整架构如下:
在这个示意图中,编码器模型并行编码上下文的3个额外块,并与最终隐藏表示进行连接,然后作为解码器交叉注意力层的输入。
在此,交叉注意力层主要关注解码器模型中自注意力层和前馈层之间的编码器表示。
通过仔细选择无需标记的训练数据,CEPE就帮助模型具备了长上下文能力,并且也擅长文档检索。
作者介绍,这样的CEPE主要包含3大优势:
(1)长度可泛化
因为它不受位置编码的约束,相反,它的上下文是分段编码的,每一段都有自己的位置编码。
(2)效率高
使用小型编码器和并行编码来处理上下文可以降低计算成本。
同时,由于交叉注意力仅关注编码器最后一层的表示,而仅使用解码器的语言模型则需要缓存每个层每个token的键-值对,所以对比起来,CEPE需要的内存大大减少。
(3)降低训练成本
与完全微调方法不同,CEPE只调整编码器和交叉注意力,同时保持大型解码器模型冻结。
作者介绍,通过将7B解码器扩充为具有400M编码器和交叉注意力层的模型(总计14亿参数),用一块80GB的A100 GPU就可以完成。
困惑度持续降低
团队将CEPE应用于Llama-2,并在200亿 token的RedPajama过滤版本上进行训练(仅为Llama-2预训练预算的1%)。
首先,与LLAMA2-32K和YARN-64K这两种完全微调的模型相比,CEPE在所有数据集上都实现了更低或相当的困惑度,同时具有更低的内存使用率和更高的吞吐量。
在将上下文提升到128k时(远超其8k训练长度),CEPE的困惑度更是持续保持降低,同时保持低内存状态。
相比之下,Llama-2-32K和YARN-64K不仅不能推广到其训练长度之外,还伴随着内存成本显著增加。
其次,检索能力增强。
如下表所示:
通过使用检索到的上下文,CEPE可以有效改善模型困惑度,性能优于RePlug。
值得注意的是,即使让段落k=50 (训练是60),CEPE仍会继续改善困惑度。
这表明CEPE可以很好地转移到检索增强设置,而全上下文解码器模型在这个能力上却退化了。
第三,开放域问答能力显着超越。
如下图所示,CEPE在所有数据集和段落k参数上都大幅优于其他模型,且不像别的模型那样,k值越来越大之后性能明显下降。
这也表明,CEPE对大量冗余或不相关的段落并不敏感。
所以总结一下就是,与大多数其他解决办法相比,CEPE在上述所有任务上都能以低得多的内存和计算成本胜出。
最后,作者在这些基础上,提出了专门用于指令调优模型的CEPE-Distilled (CEPED)。
它仅使用未标记的数据来扩展模型的上下文窗口,通过辅助KL散度损失将原始指令调整模型的行为提炼为新架构,由此无需管理昂贵的长上下文指令跟踪数据。
最终,CEPED可以在保留指令理解能力的同时,扩展Llama-2的上下文窗口,提高模型长文本性能。
团队介绍
CEPE一共3位作者。
一作为颜和光(Howard Yen),普林斯顿大学计算机科学专业硕士生在读。
二作为高天宇,同校博士生在读,清华本科毕业。
他们都是通讯作者陈丹琦的学生。
论文原文:https://arxiv.org/abs/2402.16617
参考链接:https://twitter.com/HowardYen1/status/1762474556101661158
以上是陈丹琦团队新作:Llama-2上下文扩展至128k,10倍吞吐量仅需1/6内存的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

MySQL启动失败的原因有多种,可以通过检查错误日志进行诊断。常见原因包括端口冲突(检查端口占用情况并修改配置)、权限问题(检查服务运行用户权限)、配置文件错误(检查参数设置)、数据目录损坏(恢复数据或重建表空间)、InnoDB表空间问题(检查ibdata1文件)、插件加载失败(检查错误日志)。解决问题时应根据错误日志进行分析,找到问题的根源,并养成定期备份数据的习惯,以预防和解决问题。

MySQL 可返回 JSON 数据。JSON_EXTRACT 函数可提取字段值。对于复杂查询,可考虑使用 WHERE 子句过滤 JSON 数据,但需注意其性能影响。MySQL 对 JSON 的支持在不断增强,建议关注最新版本及功能。

数据库ACID属性详解ACID属性是确保数据库事务可靠性和一致性的一组规则。它们规定了数据库系统处理事务的方式,即使在系统崩溃、电源中断或多用户并发访问的情况下,也能保证数据的完整性和准确性。ACID属性概述原子性(Atomicity):事务被视为一个不可分割的单元。任何部分失败,整个事务回滚,数据库不保留任何更改。例如,银行转账,如果从一个账户扣款但未向另一个账户加款,则整个操作撤销。begintransaction;updateaccountssetbalance=balance-100wh

SQLLIMIT子句:控制查询结果行数SQL中的LIMIT子句用于限制查询返回的行数,这在处理大型数据集、分页显示和测试数据时非常有用,能有效提升查询效率。语法基本语法:SELECTcolumn1,column2,...FROMtable_nameLIMITnumber_of_rows;number_of_rows:指定返回的行数。带偏移量的语法:SELECTcolumn1,column2,...FROMtable_nameLIMIToffset,number_of_rows;offset:跳过

LaravelEloquent模型检索:轻松获取数据库数据EloquentORM提供了简洁易懂的方式来操作数据库。本文将详细介绍各种Eloquent模型检索技巧,助您高效地从数据库中获取数据。1.获取所有记录使用all()方法可以获取数据库表中的所有记录:useApp\Models\Post;$posts=Post::all();这将返回一个集合(Collection)。您可以使用foreach循环或其他集合方法访问数据:foreach($postsas$post){echo$post->

MySQL数据库性能优化指南在资源密集型应用中,MySQL数据库扮演着至关重要的角色,负责管理海量事务。然而,随着应用规模的扩大,数据库性能瓶颈往往成为制约因素。本文将探讨一系列行之有效的MySQL性能优化策略,确保您的应用在高负载下依然保持高效响应。我们将结合实际案例,深入讲解索引、查询优化、数据库设计以及缓存等关键技术。1.数据库架构设计优化合理的数据库架构是MySQL性能优化的基石。以下是一些核心原则:选择合适的数据类型选择最小的、符合需求的数据类型,既能节省存储空间,又能提升数据处理速度

MySQL 主键不可以为空,因为主键是唯一标识数据库中每一行的关键属性,如果主键可以为空,则无法唯一标识记录,将会导致数据混乱。使用自增整型列或 UUID 作为主键时,应考虑效率和空间占用等因素,选择合适的方案。

直接通过 Navicat 查看 MongoDB 密码是不可能的,因为它以哈希值形式存储。取回丢失密码的方法:1. 重置密码;2. 检查配置文件(可能包含哈希值);3. 检查代码(可能硬编码密码)。
