【大模型上下文长度扩展】LongQLoRA:单GPU(V100)环境下的语言模型优化方案

LongQLoRA

    • 核心问题
      • 子问题1: 预定义的上下文长度限制
      • 子问题2: 训练资源的需求高
      • 子问题3: 保持模型性能
      • 分析不足
    • LongQLoRA方法拆解
      • 子问题1: 上下文长度限制
      • 子问题2: 高GPU内存需求
      • 子问题3: 精确量化导致的性能损失
      • 分析不足
      • 效果

 


论文:https://arxiv.org/pdf/2311.04879.pdf

代码:https://github.com/yangjianxin1/LongQLoRA

 

核心问题

为了扩展大型语言模型(如LLaMA系列)的上下文长度,本文介绍一个有效且高效的方法——LongQLoRA。

子问题1: 预定义的上下文长度限制

  • 背景: LLaMA系列模型(例如LLaMA和LLaMA2)在训练时设置了预定义的上下文长度(如2048和4096个token),使用的位置编码(RoPE)在超出预定义长度时性能急剧下降。
  • 相关联想: 在多文档问答、书籍摘要、长对话摘要等任务中,长输入上下文常常是必需的,这些任务因为上下文长度限制而难以达到最佳性能。
  • 子解法: Position Interpolation和Shift Short Attention结合,通过位置插值技术和短注意力偏移来扩展模型处理的上下文长度,无需大规模重新训练。

子问题2: 训练资源的需求高

  • 背景: 扩展上下文长度的直接方法如进一步预训练需要大量的GPU资源和较长的收敛时间,对于大多数研究者来说是不现实的。
  • 相关联想: 比如Meta的Position Interpolation技术虽然有效但需要32个A100 GPUs,而Focused Transformer(FOT)需要128个TPUs,这对普通研究者来说是不可承受的。
  • 子解法: LongQLoRA采用了QLoRA的量化微调方法,通过将预训练的大型语言模型量化为4比特来减少模型内存占用,并添加少量的可学习低秩适配器权重,大大减少了对训练资源的需求。

子问题3: 保持模型性能

  • 背景: 在减少模型训练资源需求的同时,保持或提升模型在长上下文任务上的性能是一个挑战。
  • 相关联想: 通常,减少模型大小或简化训练过程可能会牺牲模型性能。
  • 然而,有效的上下文长度扩展不仅需要减轻资源负担,还要确保模型能够有效处理长文本输入。
  • 子解法: LongQLoRA通过结合QLoRA、Position Interpolation和Shift Short Attention,不仅减少了对资源的需求,还通过在所有层添加低秩适配器权重,优化了模型结构以提高处理长上下文输入的能力,从而在PG19和Proof-pile数据集上展现出了优异的性能。

分析不足

LongQLoRA方法的全流程分析显示,该方法在扩展LLaMA系列模型的上下文长度方面既高效又有效。

它通过精心设计的结合了几种关键技术,使得在单个V100 GPU上就能将LLaMA2的上下文长度从4096扩展到8192甚至更长,同时在性能上不仅超越了LongLoRA,还接近于经过大量资源训练的MPT-7B-8K模型。

然而,尽管LongQLoRA在资源效率和性能上取得了显著进步,但它依赖于特定的硬件配置(如32GB内存的V100 GPU),这可能限制了它在不同研究和开发环境中的应用。

此外,尽管已经在PG19和Proof-pile数据集上进行了评估,但在更广泛的NLP任务和更多样化的数据集上的表现仍然是一个开放的问题。

 


LongQLoRA方法拆解

子问题1: 上下文长度限制

  • 背景: LLaMA系列模型使用基于RoPE的位置编码,其在预定义的上下文长度之外性能急剧下降,限制了模型处理长文本的能力。
  • 子解法: 位置插值(Position Interpolation)
  • Meta提出的位置插值技术通过在预定义的位置空间内进行位置编码插值,扩展了LLaMA模型的上下文窗口大小,无需直接训练即可将上下文长度从2048扩展到32768。
  • 例子: 使用位置插值,仅需1000步的微调,就能显著提升LLaMA模型在长文本处理(如PG19数据集)上的性能。

子问题2: 高GPU内存需求

  • 背景: 标准自注意力机制的计算复杂度为O(n^2),导致高GPU内存消耗。
  • 子解法: 短程注意力偏移(Shift Short Attention)
  • LongLoRA提出的短程注意力偏移是一种稀疏的局部注意力机制,通过将输入token分组并单独计算每组内的注意力(以及邻近组之间的注意力),显著降低了GPU内存需求。
  • 例子: 假设输入token被分成g组,计算复杂度可以从 O ( n 2 ) O(n^2) O(n2)降低到O((n/g)^2),有效减少了GPU内存消耗。

子问题3: 精确量化导致的性能损失

  • 背景: 在限制GPU资源的情况下,如何在保证模型性能的同时减少模型的内存占用成为一个挑战。
  • 子解法: QLoRA
  • QLoRA通过将预训练模型的权重量化为4位,并添加可学习的低秩(LoRA)适配器权重,既减少了GPU内存占用又保留了全精度微调任务的性能。
  • 例子: QLoRA使得在单个48GB GPU上微调LLaMA 65B模型成为可能,同时保留了与全精度微调相当的性能水平。

分析不足

LongQLoRA通过结合位置插值短程注意力偏移QLoRA的优势,有效解决了大型语言模型在处理长上下文时的挑战。

首先,使用位置插值扩展LLaMA2的上下文长度;然后,通过QLoRA的权重量化和低秩适配器减少GPU内存需求;最后,利用短程注意力偏移进一步节省内存,并在所有层添加LoRA适配器以恢复由于量化而损失的性能。

然而,这种方法的一个潜在不足是它依赖于特定技术的组合,这可能限制了它在不同模型和任务上的通用性和灵活性。

例如,虽然短程注意力偏移在节省GPU内存方面非常有效,但它可能需要针对特定的任务和数据集进行调整。

此外,尽管QLoRA在减少内存占用方面表现出色,但量化策略的选择和适配器权重的调整可能需要根据具体情况进行细微调整,以最大化性能。

效果

基于LongQLoRA实验部分的讨论,可以得出以下结论:

  1. 上下文长度扩展有效性:通过位置插值技术,LongQLoRA成功将LLaMA2和Vicuna模型的上下文长度从4096扩展到8192,实验证明了该方法在扩展大型语言模型处理长文本的能力方面的有效性。

  2. 内存效率与性能保持:通过QLoRA的权重量化和LoRA适配器的添加,LongQLoRA在仅使用单个V100 GPU的条件下实现了模型的微调,既节约了GPU内存,又保持了模型性能,证明了在资源受限情况下进行模型优化的可行性。

  3. 微调策略的优化:实验表明,在微调阶段使用短程注意力偏移和在推理阶段使用标准全局注意力的策略有效提高了模型的性能和兼容性。这种策略在提高计算效率的同时,确保了模型在长文本处理任务上的优异表现。

  4. 模型性能对比:与其他方法(如LongLoRA和MPT-7B-8K)相比,LongQLoRA在PG19和Proof-pile数据集上的困惑度评估中表现出更优或接近的性能。特别是在8192上下文长度的评估中,LongQLoRA的性能与最先进的方法相当,甚至略有优势。

  5. 资源效率的显著提高:LongQLoRA的实现仅需单个V100 GPU,与需要多个A100 GPUs或TPUs的方法相比,大大降低了对训练资源的需求,展示了在有限资源下扩展和优化大型语言模型的高效途径。

  6. 微调步骤与LoRA秩的影响:通过不同LoRA秩的对比实验和微调步骤的分析,发现适当增加LoRA秩和微调步骤能够进一步降低模型的困惑度,表明微调策略的细微调整对模型性能有显著影响。

在这里插入图片描述
这张图展示了在不同上下文长度下,不同模型在PG19验证集和Proof-pile测试集上的困惑度(Perplexity)表现。

困惑度是衡量语言模型性能的一个标准指标,困惑度越低,模型的性能通常认为越好。

  • 左侧图表(Perplexity on PG19):

    • 展示了在PG19数据集上,从1024到8192的不同评估上下文长度下,MPT-7B-8K、LongLoRA-LoRA、LongLoRA-Full、LongQLoRA和LLaMA2-7B模型的困惑度。
    • 在8192长度下,LongQLoRA的困惑度与LongLoRA-Full非常接近,且比MPT-7B-8K表现得更好。
  • 右侧图表(Perplexity on Proof-pile):

    • 展示了在Proof-pile数据集上,相同上下文长度变化下的困惑度表现。
    • 在这个图表中,LongQLoRA在所有上下文长度下都略微优于LongLoRA-LoRA,并在8192长度下与LongLoRA-Full几乎持平。

两个图表都显示,所有模型在推理时均以4-bit进行量化。

LongQLoRA模型是基于Redpajama数据集在单V100 GPU上微调1000步得到的。

这两个图表还强调了LLaMA2-7B模型在超出其预定义上下文长度8192时性能下降的情况。

相比之下,LongQLoRA能够在更长的上下文长度上维持低困惑度,表明其扩展上下文长度的有效性。

LongQLoRA在1024到8192的上下文长度范围内超越了LongLoRA-LoRA,并在8192的长度上极接近LongLoRA-Full,甚至在PG19数据集上的表现优于MPT-7B-8K。

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

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

相关文章

docker镜像结构

# 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["java", "-jar"…

游泳耳机推荐性价比排行榜,四大高性价比游泳耳机推荐

随着运动健康意识的提高,越来越多的朋友选择在游泳馆进行锻炼。然而,在水中享受音乐并非易事,这就需要一款真正防水的耳机。尽管市面上有许多声称具备防水功能的耳机产品,但实际使用中往往难以达到理想的防水效果。为了帮助大家找…

之前看过的前序遍历的线索二叉树感觉写的有点问题 这里更新一下我的思路

前序线索化 #include<iostream> using namespace std;typedef int datatype; typedef struct BitNode {datatype Data;struct BitNode* leftchild;struct BitNode* rightchild;int lefttag;int righttag; }Node; #pragma region 前序线索化递归遍历 Node* previous NUL…

maven依赖报错处理(或者maven怎么刷新都下载不了依赖)

maven依赖报错&#xff0c;或者不报错&#xff0c;但是怎么刷新maven都没反应&#xff0c;可以试一下以下操作 当下载jar的时候&#xff0c;如果断网&#xff0c;或者连接超时的时候&#xff0c;会自动在文件夹中创建一个名为*lastupdate的文件&#xff0c;当有了这个文件之后…

网络工程师专属春节对联,不要太真实了!

中午好&#xff0c;我的网工朋友。 都放假了没&#xff1f;龙年将至&#xff0c;都有啥新年计划&#xff1f; 过年&#xff0c;讲究的就是一个热闹&#xff0c;可以暂时告别辛苦的一年&#xff0c;重新整装出发。 热闹可少不了春联啊&#xff0c;红红火火又一年&#xff0c;…

Vue源码系列讲解——虚拟DOM篇【一】(Vue中的虚拟DOM)

目录 1. 前言 2. 虚拟DOM简介 2.1什么是虚拟DOM&#xff1f; 2.2为什么要有虚拟DOM&#xff1f; 3. Vue中的虚拟DOM 3.1 VNode类 3.2 VNode的类型 3.2.1 注释节点 3.2.2 文本节点 3.2.3 克隆节点 3.2.4 元素节点 3.2.5 组件节点 3.2.6 函数式组件节点 3.2.7 小结 3…

OpenCV-31 获得形态学卷积核

OpenCV提供了获取卷积核的API&#xff0c;不需要我们手动创建卷积核。 通过下面API---getStructuringElement(shape&#xff0c;ksize&#xff0c;[, anchor]) shape是指卷积核的型状&#xff0c;注意不是指长宽&#xff0c;是指卷积核中1形成的形状。MORPH_RECT 卷积核中的1…

(三)elasticsearch 源码之启动流程分析

https://www.cnblogs.com/darcy-yuan/p/17007635.html 1.前面我们在《&#xff08;一&#xff09;elasticsearch 编译和启动》和 《&#xff08;二&#xff09;elasticsearch 源码目录 》简单了解下es&#xff08;elasticsearch&#xff0c;下同&#xff09;&#xff0c;现在我…

SPSS基础操作:对数据进行加权处理

对数据进行加权处理是我们使用SPSS提供某些分析方法的重要前提。对数据进行加权后&#xff0c;当前的权重将被保存在数据中。当进行相应的分析时&#xff0c;用户无须再次进行加权操作。本节以对广告的效果观测为例&#xff0c;讲解数据的加权操作。本例给出了消费者购买行为与…

Arthas使用教程—— 阿里开源线上监控诊断产品

文章目录 1 简介2背景3 图形界面工具 arthas 阿里开源3.1 &#xff1a;启动 arthas3.2 help :查看arthas所有命令3.3 查看 dashboard3.4 thread 列出当前进程所有线程占用CPU和内存情况3.5 jvm 查看该进程的各项参数 &#xff08;类比 jinfo&#xff09;3.6 通过 jad 来反编译 …

端口扫描神器:御剑 保姆级教程(附链接)

一、介绍 御剑&#xff08;YooScan&#xff09;是一款网络安全工具&#xff0c;主要用于进行端口扫描。它具有直观的用户界面&#xff0c;方便用户进行端口扫描和信息收集。以下是御剑端口扫描工具的一些主要特点和功能&#xff1a; 图形用户界面&#xff1a; 御剑提供直观的图…

告别mPDF迎来TCPDF和中文打印遇到的问题

mPDF是一个用PHP编写的开源PDF生成库。它最初由Claus Holler创建&#xff0c;于2004年发布。原来用开源软件打印中文没有问题&#xff0c;最近发现新的软件包中mPDF被TCPDF代替了&#xff0c;当然如果只用西文的PDF是没有发现问题&#xff0c;但要打印中文就有点抓瞎了如图1&am…

我的PyTorch模型比内存还大,怎么训练呀?

原文&#xff1a;我的PyTorch模型比内存还大&#xff0c;怎么训练呀&#xff1f; - 知乎 看了一篇比较老&#xff08;21年4月文章&#xff09;的不大可能训练优化方案&#xff0c;保存起来以后研究一下。 随着深度学习的飞速发展&#xff0c;模型越来越臃肿&#xff0c;哦不&a…

vue element 组件 form深层 :prop 验证失效问题解决

此图源自官网 借鉴。 当我们简单单层验证的时候发现是没有问题的&#xff0c;但是有的时候可能会涉及到深层prop&#xff0c;发现在去绑定的时候就不生效了。例如我们在form单里面循环验证&#xff0c;在去循环数据验证。 就如下图的写法了 :prop"pumplist. i .device…

Redis缓存设计及优化

缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失去了缓存保护后…

Pandas 对带有 Multi-column(多列名称) 的数据排序并写入 Excel 中

Pandas 从Excel 中读取带有 Multi-column的数据 正文 正文 我们使用如下方式写入数据&#xff1a; import pandas as pd import numpy as npdf pd.DataFrame(np.array([[10, 2, 0], [6, 1, 3], [8, 10, 7], [1, 3, 7]]), columns[[Number, Name, Name, ], [col 1, col 2, co…

数据结构——C/栈和队列

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特…

WPF是不是垂垂老矣啦?平替它的框架还有哪些

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软推出的一种用于创建 Windows 应用程序的用户界面框架。WPF最初是在2006年11月推出的&#xff0c;它是.NET Framework 3.0的一部分&#xff0c;为开发人员提供了一种基于 XAML 的方式来构建丰富的用户界面。 W…

你的代码很丑吗?试试这款高颜值代码字体

Monaspace 是有 GitHub 开源的代码字体&#xff0c;包含 5 种变形字体的等宽代码字体家族&#xff0c;颜值 Up&#xff0c;很难不喜欢。 来看一下这 5 种字体分别是&#xff1a; 1️⃣ Radon 手写风格字体 2️⃣ Krypton 机械风格字体 3️⃣ Xenon 衬线风格字体 4️⃣ Argon…

【C++二维前缀和】黑格覆盖

题目描述 在一张由 M * N 个小正方形格子组成的矩形纸张上&#xff0c;有 k 个格子被涂成了黑色。给你一张由 m * n 个同样小正方形组成的矩形卡片&#xff0c;请问该卡片最多能一次性覆盖多少个黑格子&#xff1f; 输入 输入共 k1 行&#xff1a; 第 1 行为 5 个整数 M、N、…