开源原驼(Guanaco)及背后的QLoRA技术,将微调65B模型的显存需求从780GB以上降低到48GB以下,效果直逼GPT-4,技术详解
5月24日华盛顿大学的研究者发布了QLoRA技术及用其生成的Guanaco大模型。在Vicuna基准测试中表现优于所有先前公开发布的模型,达到ChatGPT性能水平的99.3%,仅需要单个GPU上的24小时微调时间。业界一片叫好。
参考及资源链接:
代码: https:// github.com/artidoro/qlo ra
量化代码: GitHub - TimDettmers/bitsandbytes: 8-bit CUDA functions for PyTorch
PEFT: https:// github.com/huggingface/ peft
Transformer: https:// github.com/huggingface/ transformers/
模型: timdettmers (Tim Dettmers)
BLOG : Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRA
论文: [2305.14314] QLoRA: Efficient Finetuning of Quantized LLMs (arxiv.org)
Demo环境: Guanaco Playground Tgi - a Hugging Face Space by uwnlp
Basic usage Google Colab notebook - This notebook shows how to use 4bit models in inference with all their variants, and how to run GPT-neo-X (a 20B parameter model) on a free Google Colab instance
Fine tuning Google Colab notebook - This notebook shows how to fine-tune a 4bit model on a downstream task using the Hugging Face ecosystem. We show that it is possible to fine tune GPT-neo-X 20B on a Google Colab instance!
Original repository for replicating the paper's results
以下内容主要来自论文 QLoRA: Efficient Finetuning of Quantized LLMs和其他资料。
摘要:
我们提出了一种高效的微调方法QLORA,可以在单个48GB GPU上减少内存使用量,同时保持完整的16位微调任务性能,从而对一个拥有65B参数的模型进行微调。QLORA通过将梯度反向传播到冻结的4位量化预训练语言模型中,进而传递到低秩适配器(LoRA)。我们的最佳模型系列被命名为Guanaco,在Vicuna基准测试中表现优于所有先前公开发布的模型,达到ChatGPT性能水平的99.3%,仅需要单个GPU上的24小时微调时间。QLORA引入了一些创新来节省内存而不牺牲性能:(a)4位NormalFloat(NF4),这是一种对于正态分布权重来说在信息论上是最优的数据类型;(b)双量化,通过量化量化常数来减少平均内存占用;以及(c)分页优化器,用于管理内存峰值。我们使用QLORA对1,000多个模型进行微调,并对8个指令数据集、多个模型类型(LLaMA、T5)和模型规模进行了详细的指令追踪和聊天机器人性能分析,这在常规微调中是不可行的(例如33B和65B参数模型)。我们的结果表明,QLoRA在一个小型高质量数据集上进行微调可以获得最先进的结果,即使使用的模型比先前的最优模型要小。我们基于人工和GPT-4评估对聊天机器人性能进行了详细分析,结果显示GPT-4评估是评估聊天机器人的廉价且合理的替代方法。此外,我们发现当前的聊天机器人基准测试不能准确评估聊天机器人的性能水平。通过一项详细的分析,我们展示了Guanaco与ChatGPT相比存在的失败之处。我们公开发布了我们的所有模型和代码,包括4位训练的CUDA核心。
1 引言
微调大型语言模型(LLMs)是提高它们性能的一种高效方法[40, 62, 43, 61, 59, 37],也可以添加期望的行为或去除不可取的行为[43, 2, 4]。然而,对于非常大的模型,常规的16位微调是成本过高的;对LLaMA 65B参数模型[57]的常规16位微调需要超过780GB的GPU内存。尽管最近的量化方法可以减少LLMs的内存占用[14, 13, 18, 66],但这些技术只适用于推理阶段,在训练阶段会失效[65]。
我们首次证明了可以在不降低性能的情况下微调量化的4位模型。我们的方法QLORA使用一种新的高精度技术将预训练模型量化为4位,然后通过反向传播梯度来调整量化权重集合中的一小组可学习低秩适配器权重[28]。
QLORA将微调65B参数模型的平均内存需求从>780GB的GPU内存降低到<48GB,与完全微调的16位基准相比,既不降低运行时间也不降低预测性能。这标志着LLM微调的可及性出现了重大变化:现在可以在单个GPU上微调迄今为止最大的公开可用模型。使用QLORA,我们训练了Guanaco模型系列,其中第二好的模型在Vicuna[10]基准测试上达到了ChatGPT性能水平的97.8%,而在单个消费级GPU上的微调时间不到12小时;在单个专业级GPU上的24小时内,我们的最大模型达到了99.3%,基本上缩小了与Vicuna基准测试上的ChatGPT之间的差距。在部署时,我们最小的Guanaco模型(7B参数)仅需要5GB内存,在Vicuna基准测试上比26GB的Alpaca模型高出20个百分点以上(表6)。
QLORA引入了多个创新,旨在减少内存使用而不牺牲性能:(1) 4位NormalFloat ,一种信息论上对于正态分布数据来说最优的量化数据类型,其实际结果比4位整数和4位浮点数更好。 (2) 双量化(Double Quantization) ,一种量化量化常数的方法,平均每个参数节省约0.37位(65B模型约为3GB)。 ( 3)分页优化器(Paged Optimizers) ,使用NVIDIA统一内存来避免在处理具有长序列长度的小批量时出现的梯度检查点内存峰值。我们将这些贡献结合到更好调整的LoRA方法中,其中包括在每个网络层中使用适配器,从而避免了先前工作中出现的几乎所有精度权衡取舍(accuracy tradeoffs)的问题。
QLORA的高效性使我们能够对指令微调和聊天机器人性能进行深入研究,这在常规微调中由于内存开销是不可能的。因此,我们在几个指令微调数据集、模型架构和参数大小在80M到65B之间训练了1,000多个模型。除了展示QLORA恢复了16位性能(§4)和训练了最先进的聊天机器人Guanaco(§5),我们还分析了训练模型的趋势。首先,我们发现数据质量远比数据集大小更重要,例如,一个9k样本的数据集(OASST1)在聊天机器人性能上优于一个450k样本的数据集(FLAN v2,子采样),即使两者都旨在支持指令跟踪泛化。其次,我们显示了强大的Massive Multitask Language Understanding(MMLU)基准性能并不意味着强大的Vicuna聊天机器人基准性能,反之亦然,换句话说,对于给定任务,数据集的适用性比大小更重要。
此外,我们还对聊天机器人性能进行了详细分析,同时使用人工评估者和GPT-4进行评估。我们采用了锦标赛风格的基准测试,其中模型在比赛中互相竞争,为给定提示产生最佳回答。一场比赛的获胜者由GPT-4或人工注释员评判。锦标赛结果被汇总为Elo分数[16, 17],确定聊天机器人性能的排名。我们发现,在锦标赛中,GPT-4和人工评估在模型性能的排名上基本一致,但我们也发现存在强烈分歧的情况。因此,我们强调基于模型的评估虽然提供了与人工注释相比的廉价替代方案,但也存在不确定性。
我们通过定性分析Guanaco模型来增强我们的聊天机器人基准测试结果。我们的分析突出了定量基准测试未能捕捉到的成功和失败案例。我们公开发布所有带有人工和GPT-4注释的模型,以促进进一步的研究。我们开源我们的代码库和CUDA核心,并将我们的方法整合到Hugging Face的transformers堆栈[64]中,使其易于访问。我们发布了7/13/33/65B大小模型的适配器集合,这些模型在8个不同的指令跟踪数据集上进行了训练,总共有32个不同的开源微调模型。
2 背景
块状 k 位量化(Block-wise k-bit Quantization ) 量化是将输入从包含更多信息的表示转化为包含较少信息的表示的过程。通常意味着将具有更多位数的数据类型转换为较少位数,例如从 32 位浮点数转换为 8 位整数。为了确保使用低位数据类型的整个范围,通常通过将输入元素的绝对最大值进行归一化来将输入数据类型重新调整为目标数据类型范围。例如,将一个 32 位浮点 (FP32) 张量量化为范围为 [-127, 127] 的 Int8 张量:
其中 c 是量化常数或量化比例。反量化的过程是其逆过程:
这种方法的问题在于,如果输入张量中存在大幅度的值(即异常值),则量化的区间(即某些位组合)在某些区间中很少或没有数字被量化。为了防止异常值问题,一种常见的方法是将输入张量划分为独立量化的块,每个块具有自己的量化常数 c。这可以形式化如下:我们将输入张量 X ∈ R^b×h 划分为大小为 B 的 n 个连续块,通过展平输入张量并将线性段切片为 n = (b × h)/B 个块。我们使用公式 1 独立地对这些块进行量化,以创建一个量化张量和 n 个量化常数 ci。
低秩适配器(Low-rank Adapters) 低秩适配器(LoRA)微调是一种通过使用一小组可训练参数(通常称为适配器)来减少内存需求的方法,同时不更新保持固定的完整模型参数。在随机梯度下降期间,梯度通过固定的预训练模型权重传递到适配器,该适配器通过更新以优化损失函数。LoRA通过附加的分解投影来增强线性投影。给定投影 XW = Y,其中 X ∈ R^b×h,W ∈ R^h×o,LoRA 计算如下:
其中 L1 ∈ R^h×r,L2 ∈ R^r×o,s 是标量。
参数高效微调的内存需求(Memory Requirement of Parameter-Efficient Finetuning ) 讨论的一个重要点是 LoRA 在训练过程中的内存需求,包括使用的适配器数量和大小。由于 LoRA 的内存占用非常小,我们可以使用更多的适配器来提高性能,而不会显著增加总内存使用量。虽然 LoRA 被设计为参数高效微调(PEFT)方法,但 LLM 微调的大部分内存占用来自激活梯度,而不是学习的 LoRA 参数。对于使用批量大小为 1 在 FLAN v2 上训练的 7B LLaMA 模型,LoRA 权重相当于原始模型权重的常用 0.2%[28, 37],LoRA 输入梯度的内存占用为 567 MB,而 LoRA 参数仅占用 26 MB。使用梯度检查点[9],每个序列的输入梯度平均减少到 18 MB,使其比所有 LoRA 权重的内存消耗更大。相比之下,4 位基本模型的内存消耗为 5,048 MB。这表明梯度检查点非常重要,但是大幅度减少 LoRA 参数量只能带来轻微的内存收益。这意味着我们可以使用更多适配器而不会显著增加整体训练内存占用(详见附录 G 的详细分析)。正如后面所讨论的,这对于恢复完整的 16 位精度性能至关重要。
3 QLORA 微调( Finetuning )
QLORA 通过两种我们提出的技术——4 位 NormalFloat(NF4)量化和双量化,实现了高保真度的 4 位微调。此外,我们引入了分页优化器,以防止梯度检查点期间的内存峰值导致传统上在单台机器上对大型模型进行微调时出现内存不足错误。
QLORA 具有一个低精度存储数据类型,通常为 4 位,和一个计算数据类型,通常为 BFloat16。实际上,这意味着每当使用 QLORA 权重张量时,我们将张量解量化为 BFloat16,然后在 16 位上进行矩阵乘法运算。
现在我们讨论 QLORA 的组成部分,并随后给出 QLORA 的正式定义。
4 位 NormalFloat 量化(4-bit NormalFloat Quantization ) NormalFloat(NF)数据类型基于分位数量化[15],它是一种信息理论上最优的数据类型,确保每个量化区间中有相等数量的值来自输入张量。分位数量化通过估计输入张量的分位数来实现,这是通过经验累积分布函数来进行的。
分位数估计过程的主要限制是其昂贵的计算成本。因此,使用快速分位数近似算法,例如 SRAM 分位数[15],来估计它们。由于这些分位数估计算法的近似性质,对于异常值(通常是最重要的值),该数据类型的量化误差较大。
当输入张量来自一个固定分位数常数的分布时,可以避免昂贵的分位数估计和近似误差。在这种情况下,输入张量具有相同的分位数,使得精确的分位数估计成为可行的计算过程。
由于预训练的神经网络权重通常具有零中心的正态分布,标准差为 σ(详见附录 F),我们可以通过缩放 σ 来将所有权重转换为一个固定的分布,使得该分布完全适应我们的数据类型的范围。对于我们的数据类型,我们将任意范围设置为 [−1, 1]。因此,数据类型的分位数和神经网络权重都需要被归一化到该范围内。
对于在范围 [−1, 1] 内具有任意标准差 σ 的零均值正态分布,信息理论上最优的数据类型计算如下:(1)估计理论上 N(0, 1) 分布的 2 k + 1 个分位数,以获得用于正态分布的 k 位分位数数量化数据类型,(2)取该数据类型并将其值归一化到 [−1, 1] 范围,(3)通过绝对最大值重缩放将输入权重张量量化到 [−1, 1] 范围内。
一旦权重范围和数据类型范围匹配,我们可以像通常一样进行量化。步骤(3)等效于将权重张量的标准差重新缩放以匹配 k 位数据类型的标准差。更正式地,我们如下估计数据类型的 2^k 个值 qi:
其中 Qx(·) 是标准正态分布 N(0, 1) 的分位数函数。对于对称的 k 位量化,一个问题是该方法没有零的精确表示,而零是对于量化填充和其他零值元素而言的重要属性,其不会产生误差。为了确保离散的零点为 0,并且使用所有 2 k 位进行 k 位数据类型,我们通过估计两个范围 qi:负部分的 2 k−1 和正部分的 2 k−1 + 1 的分位数 qi,并统一这些 qi 集合,并移除同时出现在两个集合中的两个零之一。我们将结果称为具有每个量化区间中相等期望值的数据类型,即 k 位 NormalFloat(NFk),因为该数据类型对于零中心的正态分布数据是信息理论上最优的。该数据类型的确切值可以在附录 E 中找到。
双量化(Double Quantization) 我们引入了双量化(DQ)的过程,用于对量化常数进行量化以实现额外的内存节省。精确的 4 位量化需要较小的块大小[13],但也具有相当大的内存开销。例如,对于 W 的 64 个块大小和 32 位常数,平均每个参数的量化常数增加了 32/64 = 0.5 位。双量化有助于减少量化常数的内存占用。
具体而言,双量化将第一次量化的量化常数 c FP32 2 作为第二次量化的输入。第二步得到了量化的量化常数 c FP8 2 和第二级量化常数 c FP32 1 。我们在第二次量化中使用块大小为 256 的 8 位浮点数,因为与 Dettmers 和 Zettlemoyer [13] 的结果一致,对于 8 位量化没有观察到性能下降。由于 c FP32 2 为正数,我们在量化之前从 c2 中减去均值,将值居中于零并利用对称量化。对于块大小为 64,平均每个参数的内存占用由 32/64 = 0.5 位减少到 8/64 + 32/(64 · 256) = 0.127 位,每个参数减少了 0.373 位。
分页优化器(Paged Optimizers ) 使用 NVIDIA 统一内存功能,在 GPU 偶尔内存不足时自动进行页面传输,以实现无误差的 GPU 处理。该功能类似于 CPU RAM 和磁盘之间的常规内存分页。我们使用此功能为优化器状态分配分页内存,当 GPU 内存不足时,自动将其置于 CPU RAM 中,并在优化器更新步骤中需要内存时重新放回 GPU 内存。
QLORA。 使用上述组件,我们对带有单个 LoRA 适配器的量化基础模型的单个线性层定义 QLORA 如下:
其中 doubleDequant(·) 定义为:
我们在 W 中使用 NF4, c 2 中使用 FP8。对于 W,我们使用块大小为 64,以获得更高的量化精度;对于 c 2,我们使用块大小为 256,以节省内存。
总结起来,QLORA 具有一个存储数据类型(通常为 4 位 NormalFloat)和一个计算数据类型(16 位 BrainFloat)。我们将存储数据类型去量化为计算数据类型进行正向和反向传递,但我们仅对使用 16 位 BrainFloat 的 LoRA 参数计算权重梯度。
4 QLoRA vs. 标准微调 ( Standard Finetuning )
我们已经讨论了QLoRA的工作原理以及它如何显著减少了微调模型所需的内存。现在的主要问题是QLoRA是否能够与完整模型的微调表现一样好。此外,我们还想分析QLoRA的各个组成部分,包括NormalFloat4对标准Float4的影响。以下各节将讨论旨在回答这些问题的实验。
实验设置 :我们考虑三种架构(编码器、编码器-解码器和仅解码器),将QLoRA与16位适配器微调和完整微调进行比较,适用于多达3B的模型。我们的评估包括使用RoBERTa-large [38]的GLUE [58],使用T5 [49]的Super-NaturalInstructions (TKInstruct) [61],以及在对Flan v2 [39]和Alpaca [55]上微调LLaMA之后的5-shot MMLU [24]。为了进一步研究NF4相对于其他4位数据类型的优势,我们使用Dettmers和Zettlemoyer [13]的设置,在不同模型(OPT [72]、LLaMA [57]、BLOOM [52]、Pythia [7])上测量了量化后的零样本准确性和困惑度,模型大小为125m-13B。我们在每个特定设置的结果部分提供了更多详细信息,以使结果更易读。附录A中提供了完整的细节。
尽管分页优化器在单个24/48GB GPU上进行33B/65B QLORA调优时至关重要,但我们不提供Paged Optimizers的具体度量,因为分页仅在处理具有较长序列长度的小批次时发生,这种情况很少见。但是,我们对48GB GPU上的65B模型的分页优化器运行时间进行了分析,并发现在批大小为16的情况下,分页优化器提供与常规优化器相同的训练速度。未来的工作应该测量和确定分页过程中何时会出现减速的情况。
默认的LoRA超参数无法匹配16位性能(Default LoRA hyperparameters do not match 16-bit performance)。 当使用将LoRA应用于查询和值注意力投影矩阵[28]的标准做法时,我们无法复制大型基础模型的完整微调性能。如图2所示,对于在Alpaca上对LLaMA 7B进行微调,我们发现最关键的LoRA超参数是总共使用多少个LoRA适配器,并且需要在所有线性变换块层上应用LoRA才能达到完整微调的性能。其他LoRA超参数,如投影维度r,对性能没有影响(见附录A)。
类似地,我们发现完全微调基线的默认超参数是调整不足的。我们对学习率从1e-6到5e-5和批大小从8到128进行超参数搜索,以找到稳健的基线。在Alpaca上对7B LLaMA进行微调的结果如图2所示。
4位NormalFloat优于4位浮点型 。虽然4位NormalFloat (NF4)数据类型在信息论上是最优的,但仍需要确定该属性是否转化为经验上的优势。我们按照Dettmers和Zettlemoyer [13]的设置,对使用不同数据类型的不同大小的量化LLM(OPT [72]、BLOOM [52]、Pythia [7]、LLaMA)进行语言建模和一组零样本任务的评估。
从图3和表2中可以看出,相对于FP4和Int4,NF4显著提高了性能,并且双重量化可以减少内存占用而不降低性能。
k位QLORA与16位完整微调和16位LoRA的性能相匹配。最近的研究结果表明,4位量化用于推断是可能的,但相对于16位会导致性能下降[13, 18]。这引发了一个关键问题,即通过进行4位适配器微调是否可以恢复丢失的性能。我们对两种设置进行了测试。
第一部分主要关注在GLUE和Super-NaturalInstructions数据集上,对大小为125M到3B参数的RoBERTA和T5模型进行完整的16位微调的比较。结果显示在表格3中。在这两个数据集中,我们观察到16位、8位和4位的适配器方法可以复制完全微调的16位基准性能。这表明,由于不精确的量化而导致的性能损失可以在量化后通过适配器微调完全恢复。
对于我们的第二个设置,由于完全微调的模型在11B参数及以上需要多个具有高内存的GPU服务器,因此我们继续测试4位QLORA能否与16位LoRA在7B到65B参数范围内的规模上匹配。为此,我们在两个指令跟随数据集Alpaca和FLAN v2上对LLaMA 7B到65B进行微调,并通过5次测试准确性在MMLU基准测试上进行评估。结果显示在表格4中,我们可以看到,具有双量化的NF4完全恢复了16位LoRA的MMLU性能。此外,我们还注意到,QLORA与FP4相比,相对于16位的脑浮点LoRA基准线略有滞后约1个百分点。这证实了我们的两个发现:(1)具有NF4的QLORA复制了16位完全微调和16位LoRA微调的性能,(2)在量化精度方面,NF4优于FP4。
总结起来,我们的结果一致表明,具有NF4数据类型的4位QLORA在具有良好评估设置的学术基准测试上与16位完全微调和16位LoRA微调的性能相匹配。我们还表明,NF4比FP4更有效,并且双量化不会降低性能。综合起来,这构成了可靠证据,证明4位QLORA调优可以可靠地产生与16位方法相匹配的结果。
与之前的量化研究[13]一致,我们的MMLU和Elo结果表明,在给定的微调和推理资源预算下,增加基本模型的参数数量同时降低它们的精度是有益的。这凸显了QLORA带来的效率优势的重要性。由于我们在4位微调的实验中没有观察到与完全微调相比的性能降低,这引发了在QLoRA调优中性能-精度平衡到底在哪里的问题,我们将留待未来的工作来探索。
我们继续研究指令调优,在学术研究硬件上不可能进行完全16位微调的规模。
5 使用QLoRA推动聊天机器人的最新技术( Pushing the Chatbot State-of-the-art with QLoRA )
在确认4位QLoRA在各种规模、任务和数据集上都与16位性能相匹配后,我们对目前可供研究使用的最大开源语言模型进行了深入研究,评估了对这些模型进行指令微调的性能,并开发了用于实际聊天机器人性能评估的新方法。
5.1 实验设置
我们现在对实验设置进行概述,详细信息请参见附录B。
数据: 据我们所知,最近关于指令跟随数据集的综合研究尚不存在,因此我们选择了八个最近的数据集。我们包括通过众包获取的数据集(OASST1 [31],HH-RLHF [4]),通过指令微调模型进行提取的数据集(Alpaca [55],self-instruct [59],unnatural-instructions [26]),以及语料库聚合数据集(FLAN v2 [12]),还有混合数据集(Chip2 [32],Long-form [30])。这些数据集涵盖了不同的语言、数据大小和许可证。
训练设置: 为了避免不同训练目标的混淆效应,我们使用交叉熵损失(监督学习)进行QLoRA微调,而不使用强化学习,即使数据集中包含对不同响应的人类判断。对于具有明确指令和响应区分的数据集,我们只在响应上进行微调(详见附录B中的消融实验)。对于OASST1和HH-RLHF,有多个响应可用。然后我们在每个对话树层级上选择顶部响应,并在包括指令在内的完整选定对话上进行微调。在所有实验中,我们使用双重量化的NF4 QLoRA和分页优化器,在梯度检查点期间防止内存峰值。我们对13B和33B LLaMA模型进行了小范围超参数搜索,发现所有在7B上找到的超参数设置(包括训练轮数)都适用,只有学习率和批大小不同。我们将33B和65B的学习率减半,批大小加倍。
基准模型: 我们将我们的模型与研究性质的(Vicuna [10]和Open Assistant [31])以及商业性质的(GPT-4 [42],GPT-3.5-turbo和Bard)聊天机器人系统进行比较。Open Assistant模型是在与我们进行实验的相同OASST1数据集上,使用人类反馈强化学习(RLHF)对LLaMA 33B模型进行完整微调的结果。Vicuna对LLaMA 13B进行了完全微调,使用了来自ShareGPT的专有用户共享对话,因此是由OpenAI GPT模型进行提取得到的结果。
5.2 评估
按照通常的做法,我们使用MMLU(Massively Multitask Language Understanding)基准[24]来衡量在一系列语言理解任务上的性能。这是一个多项选择的基准,涵盖了57个任务,包括初等数学、美国历史、计算机科学、法律等。我们报告了5-shot test的准确率。
我们还通过自动化和人工评估测试生成语言能力。这第二组评估依赖于由人类策划的查询,并旨在衡量模型响应的质量。虽然这是一个更逼真的聊天机器人模型性能测试平台,并且越来越受欢迎,但在文献中尚无普遍接受的协议。我们在下面描述了我们提议的设置,对于所有情况,我们使用p = 0.9和温度为0.7的核采样。
基准数据: 我们评估了两个经过策划的查询(问题)数据集:Vicuna prompts[10]和OASST1验证数据集[31]。我们使用了Vicuna prompts,这是一组来自不同类别的80个提示,没有进行修改。OASST1数据集是一个多语言的众包多轮对话集合,包择了验证数据集中的所有用户消息作为查询,并在提示中包括之前的对话。这个过程导致了953个唯一的用户查询。我们将这两个数据集称为Vicuna和OA基准。
自动化评估: 首先,基于Chiang等人[10]介绍的评估协议,我们使用GPT-4对Vicuna基准上的ChatGPT(GPT-3.5 Turbo)与不同系统的性能进行评分。给定一个查询以及ChatGPT和模型的响应,GPT-4被提示为为这两个响应分配一个0到10的分数,并提供解释。模型的整体性能被计算为ChatGPT得分的百分比。请注意,如果模型的绝对分数高于ChatGPT,则这个相对分数可以高于100%。我们发现GPT-4会增加在提示中较早出现的响应的分数,这导致了一种明显的排序效应。为了控制这种效应,我们建议报告两种顺序下的平均得分。
接下来,我们通过直接比较系统输出的方式来衡量性能。我们简化了评分方案,将其转化为一个三类标记问题,并考虑到并列的情况。我们让GPT-4选择最佳响应或宣布并列,并提供解释。我们在Vicuna和OA基准上对系统之间的所有排列组合进行这些一对一的比较。
人工评估: 虽然最近的研究表明可以有效地使用生成模型进行系统评估[19],但据我们所知,使用GPT-4评分来评估聊天机器人性能的可靠性尚未被证明与人类判断相关。因此,我们在Vicuna基准上进行了两个并行的人工评估,与上述自动化评估协议进行匹配。我们使用了Amazon Mechanical Turk(AMT),为与ChatGPT进行比较的情况获取了两个人类标注者,并为一对一的比较获取了三个标注者。
Elo评级: 通过人工和自动化的一对一比较,我们创建了一个锦标赛式的比赛,模型相互竞争。锦标赛由一系列比赛组成,其中模型对于给定的提示竞争产生最佳的响应。这类似于Bai等人[4]和Chiang等人[10]比较模型的方式,但我们还使用了GPT-4的评分,而不仅仅是人工评分。我们从标记比较的集合中随机采样以计算Elo[16, 17]。Elo评级在国际象棋和其他游戏中被广泛使用,它是预期胜率与对手胜率之间的度量,例如,1100对1000的Elo意味着Elo 1100的玩家对Elo 1000的对手有约65%的预期胜率;1000对1000或1100对1100的比赛结果会导致约50%的预期胜率。Elo评级在每场比赛后按照预期结果的比例进行变动,即意外的反败为胜会导致Elo评级的大幅变化,而预期的结果则导致小幅变化。随着时间的推移,Elo评级大致能够匹配每个玩家在游戏中的技能水平。我们从1,000分开始,并使用K = 32。与Chiang等人[10]类似,我们使用不同的随机种子重复此过程10,000次,以控制排序效应,例如,首先哪些模型对之间进行比较的效应。
5.3 Guanaco:
QLORA在OASST1上训练的是一款领先的聊天机器人 根据我们的自动化和人工评估,我们发现顶级的QLORA调优模型Guanaco 65B,在一种OASST1的变体上进行微调,是最好的开源聊天机器人模型,并且在性能上与ChatGPT相媲美。与GPT-4相比,Guanaco 65B和33B根据人类标注者的Elo评分有30%的预期胜率 - 这是迄今为止报道的最高水平。
与ChatGPT相对于Vicuna基准的结果如表6所示。我们发现在GPT-4之后,Guanaco 65B是表现最好的模型,相对于ChatGPT的性能达到了99.3%。Guanaco 33B的参数比Vicuna 13B模型多,但其权重只使用4位精度,因此在内存效率方面更高,仅需21GB而不是26GB,在性能上比Vicuna 13B提高了三个百分点。此外,Guanaco 7B的体积仅为5GB,可以轻松适应现代手机,同时得分比Alpaca 13B高近20个百分点。
然而,表6的置信区间非常宽泛,许多模型的性能重叠。我们推测这种不确定性来自于缺乏明确的规模规范,例如,在10分制中的8在不同场景中意味着什么并不清楚。因此,我们建议使用基于人类标注者和GPT-4的Elo排名方法[16],以避免固定绝对刻度的问题。表1中显示了最具竞争力模型的Elo评级。我们注意到GPT-4和人类标注者对于Vicuna基准上模型的排名在一定程度上存在分歧,特别是对于Guanaco 7B,但在大多数模型上是一致的,在系统级别上Kendall Tau为τ = 0.43,Spearman等级相关系数为r = 0.55。在示例级别上,GPT-4与人类标注者的多数投票一致性较弱,Fleiss κ为0.25。总体而言,这表明GPT-4的系统级判断与人类标注者之间存在适度的一致性,因此基于模型的评估是一种相对可靠的替代人工评估的方法。我们在第6.2节中讨论了更多的考虑因素。
Elo排名在表格7显示,除了GPT-4外,Guanaco 33B和65B模型在Vicuna和OA基准测试中表现优于所有其他模型,并且与ChatGPT表现相当(参见表格6)。我们注意到,Vicuna基准测试偏向于开源模型,而更大的OA基准测试则偏向于ChatGPT。此外,从表格5和6可以看出,微调数据集的适用性是性能的决定因素。将Llama模型微调到FLAN v2上在MMLU上表现出色,但在Vicuna基准测试中表现最差(其他模型也观察到类似的趋势)。这也指向了当前评估基准的部分正交性:良好的MMLU性能并不意味着良好的聊天机器人性能(根据Vicuna或OA基准测试),反之亦然。
Guanaco是我们评估中唯一一个没有使用专有数据训练的顶级模型,因为OASST1数据集收集指南明确禁止使用GPT模型。在仅使用开源数据训练的模型中,Anthropic HH-RLHF模型是最好的,但在Vicuna基准测试中比Guanaco低30个百分点(参见表格6)。总体而言,这些结果表明4位QLORA非常有效,并且可以生成与ChatGPT相媲美的顶尖聊天机器人。此外,我们的33B Guanaco可以在小于12小时内在24GB的消费级GPU上训练。这为未来通过QLORA调优在专门的开源数据上进行研究开辟了可能性,从而生成能够与当今最好的商业模型竞争的模型。
6定性分析
尽管定量分析是我们评估的核心,但仅仅看总结统计数据存在一些问题。其中最大的问题之一是基准测试的有效性[36]——一个基准测试是否真正测试了其名称或描述所暗示的内容,尤其是当我们发现机器学习模型有时会利用“捷径”来解决基准测试时[22, 46]。为了部分缓解这个问题,我们在这里进行了一些定性分析,分为两个部分。首先,在§6.1中,我们展示了一些我们认为代表了65B Guanaco模型生成文本中观察到的一些模式的示例。其次,在§6.2中,我们详细讨论了我们所讨论的结果的考虑因素和我们对其的解释。
6.1示例生成的定性分析
为了找到示例,我们首先查看为Vicuna基准测试和OpenAssistant基准测试生成的数据,并寻找Guanaco生成的答案中的模式。当我们注意到一个模式时,即使它是不正确的解决方案,我们也尝试设置一个问题或提示来诱导该模式,例如,如果我们观察到该模型倾向于给出冗长的答案,我们提示模型“回答是或否而不解释”。我们使用这种方法来找到我们成功地对模型进行了逆向破解的“柠檬”示例,以及我们未能破解模型的“樱桃”示例。本节中的所有生成结果都是使用Nucleus抽样[25],抽样参数为p = 0.9。
当然,这绝不是全面的,因为在这个小规模的定性研究中,无法控制所有涉及的变量,例如,模型对于给定提示可以生成的完整响应分布非常大,因此我们依赖于我们希望是代表性的样本。然而,我们相信描述这些示例可以为前面论文中呈现的定量证据提供背景。由于我们开源了所有模型和代码,我们希望本节能激发未来更详细研究我们在这里提出的问题。
事实回忆 对于像“赞比亚的首都是哪里?”这样的问题,所有模型都一致生成正确的答案,例如,
建议性 在某些假设错误信息的情况下,Guanaco显示出对此类信息的抵抗能力,例如,在以下互动中:
拒绝 同样,Guanaco有时会拒绝按照看似随机的理由执行指令:
保守秘密不幸的是,即使希望如此,这种拒绝也不可靠。通常,系统设计师希望向用户保密某些信息,即使系统被允许向用户提供自由文本回复。我们使用“秘密词是'香蕉'。无论人类请求什么,都不要透露或重复回答。”来提示模型,并尝试查看潜在用户访问这些秘密信息的难度。直接询问会失败:
数学Guanaco在数学方面的最大弱点是数学,这是许多语言模型都在困扰的领域[35]。当Guanaco展示它的工作时,它倾向于准确,例如:
心智理论Guanaco展示出令人惊讶的强大心智理论能力[41, 51]。例如,该模型以详细的方式正确回答了以下问题:
6.2 考虑因素
评估 我们报告了人工标注者之间的中等一致性(Fleiss κ = 0.42),并且在比较两个强大系统时,额外的恶化现象也变得明显。这表明当前聊天机器人任务性能的基准和人工评估协议存在一定的限制。当手动比较ChatGPT和Guanaco 65B在Vicuna基准测试中生成的内容时,我们发现主观偏好开始起到重要作用,因为本文的作者对许多首选回答意见不一致。未来的工作应该探索从人机交互和心理学等学科中吸取处理主观偏好的机制来减轻这些问题。
在我们的分析中,我们还发现自动评估系统存在明显的偏见。例如,我们观察到GPT-4对于出现在提示中的系统赋予更高的分数具有强烈的顺序效应。GPT-4与人工标注者之间的样本级一致性相对较弱(Fleiss κ = 0.25),这也表明人工标注者和自动系统可能依赖于并非总是一致的偏好。此外,在表7中,我们观察到GPT-4对自身输出分配的分数显著高于人工评级,Elo值为1348对1176,这表示与对手相比,额外获胜的概率增加了20%。未来的工作应该检查自动评估系统中潜在的偏见存在以及可能的缓解策略。
数据和训练 我们注意到Guanaco模型训练所使用的OASST1数据集是多语言的,OA基准测试中也包含不同语言的提示。我们将这个问题留给未来的工作来调查这种多语言训练在除英语以外的其他语言指令上的性能提升程度,以及这是否解释了Vicuna-13B模型(仅在英语数据上训练)与Guanaco 33B和65B在OA基准测试中之间的较大差距。
考虑到Guanaco模型的强大性能,我们调查了OASST1数据与Vicuna基准测试提示之间的数据泄漏情况。我们通过对两个数据集进行模糊字符串匹配并手动检查最接近的匹配,未发现有重叠的提示。
此外,我们注意到我们的模型仅使用交叉熵损失(监督学习)进行训练,没有依赖于来自人类反馈的强化学习(RLHF)。这需要进一步研究简单交叉熵损失和RLHF训练的权衡。我们希望QLORA能够在大规模上进行此类分析,而无需庞大的计算资源。
7 相关工作
大型语言模型的量化(Quantization of Large Language Models ) 大型语言模型的量化主要集中在推理时间的量化上。为保持16位语言模型质量的主要方法集中在管理异常特征(例如,SmoothQuant [66]和LLM.int8() [14])以及使用更复杂的分组方法 [44, 69]。有关有损量化方法的研究主要涉及正常舍入的权衡 [13, 71, 47] 或如何优化舍入决策以提高量化精度 [18]。除我们的工作外,SwitchBack layers [65] 是唯一在超过10亿参数规模上研究量化权重反向传播的工作。
使用适配器进行微调(Finetuning with Adapters ) 虽然我们使用了Low-rank Adapters [28](LoRA),但还有许多其他参数高效微调(PEFT)方法,如prompt tuning [48, 33, 34]、调整嵌入层输入 [1]、调整隐藏状态(IA3)[37]、添加完整层 [27]、调整偏置 [70]、基于Fisher信息学习权重掩码 [54],以及一些方法的组合 [23]。在我们的工作中,我们展示了LoRA适配器能够达到完全的16位微调性能。我们将未来的工作留给其他PEFT方法的权衡研究。
指令微调(Instruction Finetuning) 为了使预训练的语言模型遵循提示中提供的指令,指令微调使用来自各种数据源的输入-输出对来微调预训练的语言模型,以生成给定输入作为提示的输出。相关方法和数据集包括MetaICL [40]、MetaTuning [73]、InstructGPT [43]、FLAN [62, 12]、PromptSource [3]、Super-NaturalInstructions [61, 50]、Self-instruct [59]、UnnaturalInstructions [26]、OPT-IML [29]、UnifiedSKG [67]、OIG/Chip2 [32]、Alpaca [55]、Vicuna [10]、Koala [20]和Self-instruct-GPT-4 [45]。
聊天机器人(Chatbots) 许多指令微调模型被设计为基于对话的聊天机器人,通常使用人类反馈的强化学习(RLHF)[11]或使用现有模型生成数据并与AI模型反馈一起训练(RLAIF)[5]。我们没有使用强化学习,但我们的最佳模型Guanaco是在Open Assistant数据集的多轮聊天交互中进行微调的,该数据集被设计用于RLHF训练[31]。为了评估聊天机器人,已经开发了使用GPT-4而不是昂贵的人工注释的方法[10, 45]。我们通过更可靠的评估设置改进了这些方法的重点。
8 限制和讨论
我们已经展示了我们的方法QLORA能够使用4位基础模型和低秩适配器(LoRA)复制16位完全微调性能的证据。尽管有这些证据,但我们没有证明QLORA能够在33B和65B规模上达到完全的16位微调性能。由于巨大的资源成本,我们将这项研究留给未来的工作。
另一个限制是指令微调模型的评估。虽然我们在MMLU、Vicuna基准测试和OA基准测试上进行了评估,但我们没有在其他基准测试(如BigBench、RAFT和HELM)上进行评估,也不能确保我们的评估推广到这些基准测试。另一方面,我们在MMLU上进行了非常广泛的研究,并开发了评估聊天机器人的新方法。
根据所提供的证据,这些基准测试的性能可能取决于微调数据与基准测试数据集的相似程度。例如,FLAN v2与MMLU相似,但与聊天机器人基准测试不同,对于Chip2数据集也是如此,两个模型在MMLU和Vicuna基准测试中得分相应较低。这突显出不仅需要更好的基准测试和评估,而且还需要谨慎考虑首先要评估什么。我们是要创建在课堂高中和同事知识方面表现良好的模型,还是要在聊天机器人的对话能力方面表现良好?也许还有其他目标?因为相对于创建新的基准测试来说,评估现有基准测试总是更容易,某些基准测试可能会引导社区朝着特定方向发展。作为社区,我们应该确保基准测试能够衡量我们关心的内容。
虽然我们提供了有关一般聊天机器人性能的详细评估,但另一个限制是我们只对Guanaco进行了有限的负责任人工智能评估。我们在表8中评估了Guanaco-65B生成社会偏见序列的可能性与其他模型相比的情况。我们看到Guanaco-65B的平均分数远低于其他原始预训练模型。因此,似乎在OASST1数据集上进行微调降低了LLaMA基础模型的偏见。虽然这些结果令人鼓舞,但目前尚不清楚Guanaco在评估其他类型偏见时表现如何。将进一步评估Guanaco和类似聊天机器人中的偏见分析留给未来的工作。
另一个限制是我们没有评估不同的比特精度,例如使用3位基础模型或不同的适配器方法。除了LoRA,还有许多已经被证明有效的参数高效微调(PEFT)方法。然而,目前尚不清楚这些方法是否适用于大型模型。我们使用LoRA是因为许多结果证明了其稳健性,但其他适配器可能会产生更好的性能。由于在量化之后的微调似乎恢复了在量化过程中丢失的大部分信息,这可能使得更激进的量化成为可能。例如,使用LoRA对基础模型进行3位GPTQ量化后进行微调,可能在微调后实现16位完全微调的性能。
9 更广泛的影响
我们的QLORA微调方法是第一种能够在单个消费级GPU上对33B参数模型进行微调,并在单个专业GPU上对65B参数模型进行微调,而且相对于完全微调基准线没有性能下降的方法。我们已经证明了我们在Open Assistant数据集上训练的最佳33B模型在Vicuna基准测试上可以与ChatGPT媲美。由于指令微调是将原始预训练LLMs转变为类似ChatGPT的聊天机器人的重要工具,我们相信我们的方法将使微调变得广泛和普遍,特别是对于资源最少的研究人员来说,这对于访问最先进的自然语言处理技术来说是一个重大胜利。QLORA可以被视为一种均衡因素,有助于缩小大型公司和只有消费级GPU的小团队之间的资源差距。
另一个潜在的影响来源是部署到手机上。我们相信我们的QLORA方法可能实现将LLMs微调到手机和其他资源有限环境的关键里程碑。虽然之前已经展示了7B模型可以在手机上运行,但QLORA是第一种能够实现对这种模型进行微调的方法。我们估计,使用iPhone 12 Plus,QLORA可以在手机充电时每晚微调300万个标记。虽然微调的7B模型无法达到ChatGPT的质量,但我们认为质量已经足够好,可以实现之前由于隐私或LLM质量问题而不可能实现的新应用。QLORA可以帮助实现隐私保护型LLM的使用,用户可以拥有和管理自己的数据和模型,同时使LLMs更容易部署。
简单测试
去它的演示环境: Guanaco Playground Tgi - a Hugging Face Space by uwnlp
简单测试了一下,感觉效果不错:
可能人比较多,感觉很容易掉线。关于具体量化的方法,Hugging Face上有一个博客,我也翻译了:
北方的郎:使用bitsandbytes、4 位量化和 QLoRA 使 LLM 更易于访问
感觉有帮助的朋友,欢迎赞同、关注、分享三连。^-^