自然语言处理: 第十八章微调技术之QLoRA

文章地址: QLoRA: Efficient Finetuning of Quantized LLMs (arxiv.org)

项目地址: artidoro/qlora: QLoRA: Efficient Finetuning of Quantized LLMs (github.com)

前言

QLoRA是来自华盛顿大学的Tim Dettmers大神提出的模型量化算法,应用于LLM训练,降低显存需求,其足以在单个48GB显存的GPU上对LLAMA 65B进行微调,同时能保持16位全量微调的效果。其核心是在LoRA的基础上作出优化,优化的内容主要包括以下3点:

1. 新定义了一种4位标准浮点数NF4(Normal Float4)的最优数据类型

2. 双重量化,对普通参数和量化常数分别量化,进一步减少缓存占用

3. 分页优化器(page optimizer),在显存过高时以部分内存替代显存


一.原理

在这里插入图片描述

上图分别展示了Fine-tuning ,LoRA和QLoRA的区别,其中LoRA原理可以参考我之前的文章,自然语言处理: 第十二章LoRA解读_lora自然英语处理-CSDN博客 而QLoRA的核心主要是在LoRA的基础上做了3点改进分别是:NF4浮点数量化,双重量化以及分页优化器,下面我就会分别来介绍他们三个的核心原理。


1 4-bit NormalFloat Quantization(NF4 量化)

NormalFloat (简称NF)是一种数据类型,它是建立在 Quantile quantization(后译为分位数量化)基础上的,它是一种信息论上最优的数据类型,可以确保每个量化区间从输入张量中分配相同数量的值。分位数量化通过经验累积分布函数估计输入张量的分位数来工作。分位数量化的主要局限性在于分位数估计的这个过程会比较费力。

在神经网络中,预训练的权重通常具有零中心的正态分布,标准差为σ。通过缩放σ,可以使得分布恰好适应NF的范围。对于NF,作者设置了一个任意的范围[-1, 1]。因此,数据类型和神经网络权重的分位数都需要被归一化到这个范围。其公式如下:

在这里插入图片描述



2 Double Quantization(双重量化)

简而言之就是对量化常量进行了量化,以达到进一步内存节约。在精确的4位量化中,需要较小的块大小,但这也会带来相当大的内存开销。例如,当使用 32bit 的常量并且 blocksize 是 64 的时候,那么对于每个参数会增加 0.5 bit,但是如果对这一组量化常量再次进行量化,那么可以进一步缩减空间花费。

假设有 64 * 256 个参数,那么将他们量化的过程,blocksize 在等于 64 的情况下,会花费256 个 32 bit 量化常量,这里为单层量化。那这 256 个 32bit 数据也挺花费空间的,对这 256 个数据进行进一步的量化,使用 blocksize 为 256,在花费掉一个32bit 量化常量的情况下,可以将这 256 个 量化为 256 个 了,这一步为二次量化。手写稿中最后两行表达的意思就是,将 64∗256 个参 ,进行一层量化的话,过程中消耗的空间为 32∗256 的空间,进行二次量化的话,过程中会消耗掉 8∗256+32的空间,所以二次量化做到了 0.127 bit per parameter,比一次量化进一步节约了 0.373 bit per parameter. 0.373=32/64−(8/64+32/64/256) 。



3 Page Optimizer(分页优化器)

分页优化器则是利用NVIDIA统一内存的功能,在 GPU 偶尔因内存不足(OOM)而出现情况时,将保存的部分梯度检查点转移到CPU内存上,而在优化器更新阶段需要内存时则将其分页回到 GPU 内存中,实现 CPU 和 GPU 之间的自动页面传输,确保 GPU 处理过程无误。该功能类似于 CPU RAM 和磁盘之间的常规内存分页操作。

最后,QLoRA将量化的思想和LoRA的低秩适配器的思想结合从而实现微调。




二. 实验结果

基于以上三点优化QLoRA取得了非常不错的成绩,作者提出了的QLoRA可以在一个消费级的48GB的显卡上去媲美一个16bit的全量微调的效果,而这个正常来说是需要780GB显存才能全量微调的。而且作者发现,他们基于QLoRA对OASST1微调出来的Guanaco家族大模型性能如下表,他们在单个消费级别的显卡训练不到12小时在Vicuna基准上可以达到ChatGPT 97.8%的性能水平,如果训练时间达到24小时后,其最大的Guanaco模型可以达到99.3%,并且最小的Guanaco模型仅需要5GB显存。

在这里插入图片描述

  • 80
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼城周杰伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值