QLoRA | 48G内存训练24小时,改进版4-bit量化技术微调650亿参数的模型达到chatgpt99.3%的效果

news2024/11/15 10:04:11

一、概述

title:QLORA: Efficient Finetuning of Quantized LLMs

论文地址:https://arxiv.org/pdf/2305.14314.pdf

代码:GitHub - artidoro/qlora: QLoRA: Efficient Finetuning of Quantized LLMs and https://github.com/TimDettmers/bitsandbytes

1.1 Motivation

  1. 直接训练650亿参数的LLaMA进行16位微调需要780GB内存,成本太高。
  2. 最近量化技术能降低LLM内存使用量,但是一般适应语推理阶段,其用在训练阶段效果就拉跨。

1.2 Methods

  1. 本文证明可以在4-bit量化微调带来的损失,可以完全通过adpter来优化,达到原始16-bit微调的精度(chatgpt的99.3%),并极大程度的降低内存使用量同时降低训练时间。
  • QLoRA方法要点如下:
    • 直接使用4-bit精度的量化
    • 利用Paging Flow优化内存spikes问题
    • with LoRA
  • 实验:利用QLoRA微调了1000多个模型,在8个instruction的数据集上,提供了instruction following和chatbot的详细分析结果。
  1. 本文用到的一些节约内存同时不牺牲精度的方法解读:
    1. 4-bit NormalFloat(NF4):一种新的数据类型,在信息理论上优于正常分布的权重,基于Quantile Quantization技术开发,通过估计输入张量的分位数来保证每个量化区间分配相等的值。
      1. Quantile是一种统计学术语,指的是将数据集分成几个等份的过程,每个等份包含相同数量的数据点。例如,将一个包含100个数据点的数据集分成四个等份,每个等份包含25个数据点。
      2. Quantization是一种数字信号处理技术,用于将连续信号(如音频或图像)转换为离散信号。这种技术可以用于压缩数据或减少存储空间,同时尽可能地保留原始信号的信息。
      3. Quantile quantization可能指的是将数据集分成几个等份,并将每个等份量化为离散值。这种技术可能用于数据压缩或降低数据存储需求。
    1. Double Quantization:双重量化通过量化量化常数来减少平均内存占用【量化的量化?】
      1. “双量化”指的是数字信号处理中的一个概念,其中信号被量化两次。量化是用有限数量的离散值逼近连续信号的过程。在双量化中,信号首先被量化到较粗的分辨率,然后再被量化到较细的分辨率。这种技术可用于图像和音频压缩等各种应用,有助于减少表示信号所需的数据量,同时保持信号的整体质量。双重量化也称为逐次逼近量化。
    1. Paged Optimizers:这种技术利用了NVIDIA统一内存的特性,实现了CPU和GPU之间自动的页面转换。当GPU内存不足时,Paged Optimizers技术会自动将优化器状态转移到CPU内存,以确保优化器的正常运行。
      1. Paged Optimizers:分页优化器,是一种能够在CPU和GPU之间自动转换优化器状态的技术。
      2. NVIDIA统一内存:一种将CPU和GPU内存统一管理的技术,可以让CPU和GPU共享同一块内存,从而减少数据传输的时间和开销。

1.3 Conclusion

  1. 本文验证了将量化技术用在训练阶段,利用本文4-bit微调技术QLoRA,能够利用48GB内存的GPU去微调65B参数的模型(正常需要780GB内存),达到ChatGPT99.3%的效果。
  2. Guanaco在Vicuna benchmark上表现不错,达到了ChatGPT99.3%的效果。
  3. 表明QLoRA可以利用一个小的高精度的数据集,到达一个sota的结果(甚至用更小的模型)。
  4. GPT-4可以作为一个评估,相对于人类来说更便宜更可靠。
  5. 当前的chatbot benchmarks可能不太可信。
  6. lemon-picked分析证明了Guanaco比ChatGPT差的地方。

二、详细内容

1 4-bit QLoRA与16-bit LoRA在Alpaca数据集上RougeL分数对比

  • 结论:QLoRA 4-bit训练的模型,可以追平升值超过LoRA 16-bit的模型,说明4-bit + adpater训练量化模型达到比较好的效果是可行的。
  • 数据集:Alpaca dataset
  • 基础模型:LLaMA 7B
  • 评价指标:RougeL
  • 说明:原始stanford的分数在60,61左右,本文优化参数后,可以到64+
  • LoRA-ALL:在所有线性的transformer block层上用LoRA adapter结构效果最好,超过了Alpaca的LoRA强基线

2 不同的4-bit数据类型对效果的影响

  • 结论:NFloat效果比原始的Float效果好很多,DQ(Double Quantization)可以进一步优化对内存的控制。
  • zero-shot实验:尝试了不同大小模型(125M-65B)【OPT,BLOOM,Pythia,LLaMA】,各种数据类型下的zero-shot效果
    • 模型效果:NFloat + DQ > NFloat > Float
    • Float:基础的4-bit float类型
    • NFloat:NormalFloat,精度带来比较大的提升
    • NFloat + DQ:NormalFloat + Double Quantization,内存控制效果更好,精度提升不大
    • NF4:4-bit NormalFloat

2 与LoRA 16位微调对比 vs 量化微调(4、8、16)+adapter【GLUE以及Super-NaturalInstructions数据集】

  • 无论是使用16位、8位还是4位的适配器方法,都能够复制全16位微调的基准的性能。这说明,尽管量化过程中会存在性能损失,但通过适配器微调(是指LoRA吗?),完全可以恢复这些性能。
  • 数据集:GLUE,Super-NaturalInstructions

3 不同大小模型下4-bit QLoRA和16位精度对比【few-shot实验】

  • FP4比16位微调低1个百分点
  • NFloat4 + DQ可以和BFloat 16持平
  • 数据集:5-shot MMLU
  • 背景知识:MMLU数据集是一个多模态的语言理解数据集,由清华大学自然语言处理与社会人文计算实验室发布。该数据集包含了中英文文本和语音,覆盖了多种任务,如情感分析、自然语言推理、问答等。MMLU数据集的目的是为了促进多模态语言理解领域的研究和发展。如果您需要更详细的信息,可以访问清华大学自然语言处理与社会人文计算实验室的官网。

4 基于QLoRA的大模型微调实验【Vicuna基准达到ChatGPT的99.3%】【Vicuna基准比26GB的Alpaca高20个点】

  • 实验总结:使用QLoRA微调的4-bit模型效果都比较爆炸,比其他4-bit的模型效果好非常多
  • 实验方法:基于不同大小的模型,对OASST1【OpenAssistant Conversations数据集】利用QLoRA方法微调得到Guanaco
  • 实验结果:使用GPT-4来当裁判,通过4-bit微调后,65B的模型在Vicuna benchmark的zero-shot表现排在第二,7B参数的模型(仅需要5GB内存),比Alpaca高20个点,效果非常好
  • 数据集:Vicuna benchmark
  • 背景知识:
    • "OpenAssistant Conversations (OASST1)"是一个人工生成的、人工注释的助手式对话语料库,包含161,443条来自35种不同语言的消息,注释了461,292个质量评分,形成了超过10,000个完全注释的对话树。
    • "Vicuna"是一个开源聊天机器人,它通过在ShareGPT上共享的用户对话fine-tuning LLaMA进行训练。Vicuna-13B表现出了令人印象深刻的性能,在使用GPT-4作为基准进行初步评估时,在90%以上的情况下优于其他模型,如LLaMA和Stanford Alpaca 。

5 定性分析

  • 总结:
    • Vicuna基准【Vicuna benchmark】更倾向于开源模型,而更大的OA【open assistant】基准更倾向于ChatGPT
    • 强大的MMLU性能并不意味着强大的聊天机器人性能,反之亦然
    • 4位QLORA是有效的,可以产生与ChatGPT竞争的最先进的聊天机器人

三、参考文献

  1. QLoRA:一种高效LLMs微调方法,48G内存可调LLaMA-65B (开源):QLoRA:一种高效LLMs微调方法,48G内存可调LLaMA-65B (开源)

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

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

相关文章

【搭建服务器】Python一行命令搭建HTTP服务器并外网访问

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 Python作为热度比较高的编程语言,其语法简单且语句清晰,而且python有…

Jetson AGX 安装 VScode 教程,适用于所有系统安装旧版本 VScode

最近使用Jetson AGX做项目,系统为Jetpack4.6,Ubuntu18.04版本,想装个VScode编辑代码,但是设备的内核是ARM 64架构,搜出来的是arrch64 直接在VScode官网上下载的arm版本deb安装包,无法安装,经过…

论文学习笔记:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

论文阅读:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 今天学习的论文是 ICCV 2021 的 best paper,Swin Transformer,可以说是 transformer 在 CV 领域的一篇里程碑式的工作。文章的标题是一种基于移动窗口的…

【LeetCode】14,最长公共前缀。 难度等级:简单。知识点:字符串的大小比较(比较 ascii码的大小)

文章目录 一、题目二、我的解法:双指针逐个字符比较三、巧妙解法:字符串的字典序比较四、知识点:字符串的字典序比较 一、题目 二、我的解法:双指针逐个字符比较 双指针逐个字符比较是最容易想到的方法,但由于测试用例…

torch_scatter.scatter()的使用方法

学习目标: 在学习PyG时,遇到了 scatter 这个函数,经过学习加上自身的理解,记录如下以备复习 学习内容: src:表示输入的tensor,接下来被处理;index:表示tensor对应的索引…

【C++】C++11

文章目录 1、C11的简介2、 统一的列表初始化2-1、{}初始化2-2、std::initializer_list 3、声明3-1、auto3-2、decltype3-3、nullptr 4、范围for循环5、智能指针6、STL中一些变化6-1、STL新容器和容器新方法6-2、final和override 7、右值引用和移动语义7-…

【网络协议详解】——OSPF协议(学习笔记)

目录 🕒 1. 概述🕒 2. 相关概念🕘 2.1 基本思想🕘 2.2 区域及路由🕘 2.3 链路状态数据库🕤 2.3.1 点到点网络🕤 2.3.2 点到多点网络🕤 2.3.3 广播网络与非广播多址接入网络&#x1f…

嵌入式开发常用的几招调试方法

嵌入式系统调试时相对比较麻烦一些,特别是在定位一些疑难问题时,调试手段就显得非常重要。废话不多说,直接上方法。 方法一:利用特殊文件名字的文件存在与否来触发调试代码是否运行。比如有些特殊状况下,我们需要保存一…

文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题

二、在 HIRE-ASSISTANT 中,假设应聘者以随机顺序出现,你正好雇用两次的概率是多少? 文心一言: 我们可以先计算出在HIRE-ASSISTANT中,雇佣一个应聘者的概率为3/4,然后计算出雇佣两次应聘者的概率为3/4 * 3…

教你用Appium搭建Android自动化测试框架(详细教程)

如题,本文附有仓库地址以及代码,目录如下: 1.下载安装appium 2.配置并使用appium 3.配置工程 一、下载安装appium 下载appium-desktop的mac版本,我选择用1.17.1版本,最新的版本1.22.0,拆分一个桌面应用…

k-means算法超级详解-转载

这是搬运的 一、 实验准备 1.1 实验概述 所谓聚类算法是指将一堆没有标签的数据自动划分成几类的方法,属于无监督学习方法,这个方法要保证同一类的数据有相似的特征。根据样本之间的距离或者说是相似性(亲疏性),把越…

牛郎织女的幸福生活(活锁)

从前,有一对夫妻,男的叫牛郎,女的叫织女,他们很好地传承了中华民族的谦让美德,每次吃饭时都会优先考虑对方,如果对方饿的话,就让给对方吃,等对方吃饱了自己才吃,这种美德…

SpringBoot整合OSS文件上传

一、注册阿里云账号并开通OSS服务 1、登录阿里云账号 2、创建一个bucket 3、创建子用户 对自用户分配权限,打开操作OSS的全部权限(也可根据业务需求进行更改) 4、配置上传跨域规则 任何来源: *允许方法: POST任何请求头Headers: * 二、…

pytorch实现图像分类任务-手写数字识别(一)

Pytorch手写数字识别 Minst数据集介绍 Size: 2828 灰度手写数字图像 Num: 训练集 60000 和 测试集 10000,一共70000张图片 Classes: 0,1,2,3,4,5,6,7,8,9 一…

pybullet学习(一)——安装与入门pybullet

PyBullet介绍 PyBullet 基于著名的开源物理引擎 bullet 开发,封装成了 Python 的一个模块,用于机器人仿真和学习。PyBullet 支持加载 URDF、SDF、MJCF 等多种机器人描述文件,并提供正/逆向运动学、正/逆向动力学、碰撞检测、射线相交查询等功…

FreeRTOS多任务系统

FreeRTOS 文章目录 FreeRTOS1 单任务和多任务系统1.1 单任务系统1.2 多任务系统 2 FreeRTOS 任务状态3 FreeRTOS 任务优先级4 Free RTOS 任务调度方式4.1 抢占式调度4.2 时间片调度 5 FreeRTOS 任务控制块6 FreeRTOS 任务栈 1 单任务和多任务系统 1.1 单任务系统 单任务系统的…

手把手教你搭建网站(零基础,不用写代码)

没有前言直接开始正文,搭建一个博客需要服务器,域名,博客程序。 博客程序常用的有wordpress,z-blog,typecho等等,其中wordpress和z-blog最为简单,typecho需要一定的技术含量,这里暂…

17.4:图的拓扑排序

拓扑序一定是有向无环图。 拓扑排序不唯一 拓扑排序方法一: 利用入度为零进行排序 思路:谁的入度为0,谁就是开始节点,将开始节点打印完之后,将开始节点的直接邻居的入度减1,然后重复。 package algorith…

【软件测试】稳定性和可靠性测试在软件开发中的重要性

软件测试的某些方面经常会在那些刚接触流程的人中造成混淆——例如在稳定性和可靠性测试之间划清界限。 两者通常可以互换使用,并且有一个共同的目标,即确保系统可以在选定的时间范围内稳定运行。 在这篇文章中,我们将仔细研究什么是稳定性测…

10年Java开发,准备去腾讯了~

大家好,最近有不少小伙伴在后台留言,又得准备面试了,不知道从何下手! 不论是跳槽涨薪,还是学习提升!先给自己定一个小目标,然后再朝着目标去努力就完事儿了! 为了帮大家节约时间&a…