NeurIPS2023|QLORA:量化大语言模型的高效微调

论文地址:https://arxiv.org/pdf/2305.14314.pdf
代码地址:https://github.com/artidoro/qlora
一、论文信息
- 论文题目:QLORA:Efficient Finetuning of Quantized LLMs
- 论文作者:Tim Dettmers,Artidoro Pagnoni,Luke Zettlemoyer,Ari Holtzman
- 发表单位:University of Washington
- 发表会议\期刊:CVPR 2025
- 代码链接: https://github.com/artidoro/qlora
二、论文主要贡献
微调大语言模型(Large Language Models, LLMs)是提升其性能的高效方法,然而,对超大规模模型进行微调的成本极高,难以实现。QLORA(量化低秩适配器)可采用一种新型高精度技术,将预训练模型量化至 4 位精度,随后添加一组少量可学习的低秩适配器(Low-rank Adapter, LoRA)权重 —— 这组权重通过量化权重反向传播梯度来完成调优。
常规 16 位精度微调 650 亿参数的 LLaMA 模型,所需的 GPU 内存超过 780GB。尽管近年来的量化技术能够降低 LLM 的内存占用,但这类技术仅适用于推理阶段,在训练阶段会失效 。而QLORA 能将 650 亿参数模型微调的平均内存需求,从 780GB 以上的 GPU 内存降至 48GB 以下,且相较于 16 位全量微调基准模型,其运行时间与预测性能均未受损。
三、论文创新点
3.1 逐块 k 位量化
逐块 k 位量化(Block-wise k-bit Quantization)是大语言模型(LLM)领域中一种降低内存占用、提升计算效率的核心技术,本质是通过 “分块处理 + 低位宽表示”,在尽量保留模型性能的前提下,将高位宽数据(如 32 位浮点数)转换为低位宽数据(如 8 位、4 位整数)
量化的目的是解决大模型的内存瓶颈,但也不能过度损失精度。因此量化时需通过 “归一化” 确保低位宽数据能覆盖原数据的数值范围,避免信息丢失过多。
逐块将模型的权重张量(比如某一层的权重矩阵)拆分成多个小 “块”(Block),每个块单独计算量化参数,而非对整个张量用统一参数。模型权重张量中,不同区域的数值分布可能差异很大(比如某一块权重多为 0 附近的小值,另一块多为较大值)。若用统一参数量化,会导致部分区域数值被过度压缩(小值被忽略)或无法完全覆盖(大值被截断);而 “逐块量化” 让每个块根据自身数值分布调整参数,能最大程度保留各区域的细节,平衡精度与效率。
将输入张量分割为多个块,对每个块单独进行量化,且每个块都有其专属的量化常数 c c c 。例如将输入张量 X ∈ R b × h X \in \mathbb{R}^{b \times h} X∈Rb×h( R \mathbb{R} R 表示实数域, b × h b \times h b×h 为张量维度)展平(flatten)为一维向量,再将该线性序列切分为 n = b × h B n = \frac{b \times h}{B} n=Bb×h 个连续的块,每个块的大小为 B B B;随后,通过公式 1 对这些块分别进行量化,得到一个量化后的张量以及 n n n 个对应的量化常数 c i c_i ci。
1.量化公式(公式 1):FP32 → Int8 X Int8 = round ( 127 absmax ( X FP32 ) ⋅ X FP32 ) = round ( c FP32 ⋅ X FP32 ) (1) X^{\text{Int8}} = \text{round}\left( \frac{127}{\text{absmax}(X^{\text{FP32}})} \cdot X^{\text{FP32}} \right) = \text{round}\left( c^{\text{FP32}} \cdot X^{\text{FP32}} \right) \tag{1} XInt8=round(absmax(XFP32)127⋅XFP32)=round(cFP32⋅XFP32)(1)
- X FP32 X^{\text{FP32}} XFP32:原始 32 位浮点数张量
- X Int8 X^{\text{Int8}} XInt8:量化后输出的 8 位整数张量
- a b s m a x ( X FP32 ) absmax(X^{\text{FP32}}) absmax(XFP32):计算 X FP32 X^{\text{FP32}} XFP32 中某块数值中所有元素的 “绝对最大值”(比如某块数值为 [-5, 3, -2],absmax=5)
- c FP32 = 127 absmax ( X FP32 ) c^{\text{FP32}} = \frac{127}{\text{absmax}(X^{\text{FP32}})} cFP32=absmax(XFP32)127 :量化常数(也叫 “缩放因子”),作用是将 X FP32 X^{\text{FP32}} XFP32 的数值范围缩放到Int8 的有效范围 [ − 127 , 127 ] [-127, 127] [−127,127](Int8 通常取 [ − 127 , 127 ] [-127, 127] [−127,127] 而非 [ − 128 , 127 ] [-128, 127] [−128,127],是为了避免符号位导致的不对称),即通过 a b m a x abmax abmax 范围归一化 X FP32 X^{\text{FP32}} XFP32 后再映射到 [ − 127 , 127 ] [-127, 127] [−127,127] 区间内。
- r o u n d ( ) round() round() :四舍五入函数,将缩放后的浮点数转换为整数(因为 Int8 只能存储整数)。
2.反量化公式(公式 2):Int8 → FP32 d e q u a n t ( c FP32 , X Int8 ) = X Int8 c FP32 = X FP32 (2) dequant\left( c^{\text{FP32}}, X^{\text{Int8}} \right) = \frac{X^{\text{Int8}}}{c^{\text{FP32}}} = X^{\text{FP32}} \tag{2} dequant(cFP32,XInt8)=cFP32XInt8=XFP32(2)
- d e q u a n t ( ) dequant( ) dequant():表示反量化操作的函数。
3.2 四位正态浮点数(NF4)量化
正态浮点数(NormalFloat,简称NF)数据类型基于分位数量化(Quantile Quantization)构建,而分位数量化是一种从信息论角度而言最优的数据类型,它能确保输入张量中分配到每个量化区间(quantization bin)的数值数量相等。
分位数量化的工作原理是:通过经验累积分布函数(empirical cumulative distribution function)估算输入张量的分位数,进而完成量化。
分位数量化的主要局限性在于计算成本高的分位数估算与近似计算误差,而当输入张量服从“由量化常数决定的固定分布”时,上述问题均可避免。在这种情况下,所有输入张量的分位数相同,使得“精确分位数估算”在计算上具有可行性。
预训练神经网络的权重通常服从以0为中心、标准差为σ的正态分布。通过缩放标准差σ,将所有权重转换为单一的固定分布,可确保该分布恰好能适配目标数据类型的取值范围。当将目标数据类型的取值范围设定为[-1, 1]时,无论是数据类型本身的分位数(明确上、下界),还是神经网络的权重(确保输入数据与权重的数值尺度一致,若数据在[-1, 1]范围而权重远超该范围则梯度爆炸,输出过大,反之则梯度过小甚至消失,输出过小),都需要被归一化到[-1, 1]区间内。
对于“在[-1, 1]区间内、均值为0且标准差 σ σ σ 任意的正态分布”而言,其信息论最优数据类型的构建步骤如下:
- 估算理论上标准正态分布 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1) 的 2 k + 1 2^{k}+1 2k+1 个分位数(因为正态分布均值为0或者说对称,所以需要额外包含“0点”的相关分位数),得到适用于正态分布的k位分位数量化数据类型(让每个量化区间内的概率密度均匀,承载相近的信息量,避免等间隔划分时由于正态分布两端密度低、中间密度高导致的比特浪费);
- 对该数据类型进行处理,将其数值归一化到[-1, 1]区间;
- 通过“绝对最大值缩放”将输入权重张量归一化到[-1, 1]区间,进而对权重张量完成量化。
一旦权重的取值范围与数据类型的取值范围匹配,我们就能按照常规方式进行量化。步骤 3 本质上等价于:缩放权重张量的标准差,使其与k位数据类型的标准差相匹配。更正式地说,我们通过以下方式估算该数据类型的 2 k 2^{k} 2k 个取值 q i q_i qi : q i = 1 2 ( Q X ( i 2 k + 1 ) + Q X ( i + 1 2 k + 1 ) ) (4) q_i = \frac{1}{2}\left( Q_X\left( \frac{i}{2^k + 1} \right) + Q_X\left( \frac{i+1}{2^k + 1} \right) \right) \tag{4} qi=21(QX(2k+1i)+QX(2k+1i+1))(4)其中, Q X ( ⋅ ) Q_X(\cdot) QX(⋅) 代表标准正态分布 N ( 0 , 1 ) \mathcal{N}(0, 1) N(0,1) 的分位数的函数, q i q_i qi 表示将标准正态分布区间均匀分为 2 k + 1 2^{k}+1 2k+1个小区间(每个区间的概率相等),对每个小区间取其左右端点对应的分位数的平均值作为 k k k 位数据类型的一个离散取值 q i q_i qi 。这样能保证每个 q i q_i qi 覆盖的 “概率范围相等”,从而最大化信息保留(信息论最优)。
对称式 k k k 位量化存在一个问题:该方法无法精确表示“0”——而精确表示“0”是一项重要特性,它能确保对填充(padding)元素及其他零值元素的量化无误差。
为保证离散零点(zeropoint)为 0,且让 k k k 位数据类型充分利用全部 2 k 2^k 2k 个比特,文中构建了一种非对称数据类型:分别估算两个区间的分位数 q i q_i qi(其中,负值区间对应 2 k − 1 2^{k-1} 2k−1 个分位数,正值区间对应 2 k − 1 + 1 2^{k-1}+1 2k−1+1 个分位数),随后将这两组 q i q_i qi 合并,并移除两组中重复出现的“0”(仅保留一个)。这种“每个量化区间内数值期望数量相等”的数据类型被命名为 k k k 位正态浮点数(NF k _k k)。
在代码中,TrainingArguments 中可见 quant_type 设置为 “nf4”,并且它被传递给 quantization_config。
在 get_accelerate_model 中,quantization_config 配置会使用 quant_type 来设置量化类型:
3.3 双重量化(Double Quantization,简称 DQ)
双重量化技术通过对“量化常数”本身进行量化,以进一步节省内存。尽管4位高精度量化需要采用较小的分块大小(blocksize),但这也会带来显著的内存开销。例如,若权重矩阵 W W W采用32位精度的量化常数且分块大小设为64,那么量化常数平均会为每个参数增加 32 / 64 = 0.5 32/64 = 0.5 32/64=0.5位的内存占用。而双重量化技术则有助于降低量化常数的内存开销。
更具体地说,双重量化将“第一次量化产生的量化常数 c 2 FP32 c_2^{\text{FP32}} c2FP32”作为“第二次量化”的输入。这一步会生成两部分结果:量化后的量化常数 c 2 FP8 c_2^{\text{FP8}} c2FP8,以及用于第二次量化的量化常数 c 1 FP32 c_1^{\text{FP32}} c1FP32。在第二次量化中,我们采用8位浮点数(FP8)且分块大小设为256——这一设置不会导致性能损失。由于 c 2 FP32 c_2^{\text{FP32}} c2FP32均为正值,我们在量化前会先从 c 2 c_2 c2中减去其均值,使数值围绕0中心分布,从而适配对称量化方式。
以分块大小为64为例,通过双重量化,每个参数的内存开销从原来的 32 / 64 = 0.5 32/64 = 0.5 32/64=0.5位,降至 8 / 64 + 32 / ( 64 ⋅ 256 ) = 0.127 8/64 + 32/(64 \cdot 256) = 0.127 8/64+32/(64⋅256)=0.127位,即每个参数的内存占用减少了0.373位。
在代码中,双重量化的启用是通过 args.double_quant 参数传递的,该参数默认为 True,会在BitsAndBytesConfig 配置中启用:
这样可以在进行 4 位量化时对量化统计数据进行二次压缩。
3.4 分页优化器(Paged Optimizers)
分页优化器利用了 NVIDIA 统一内存(NVIDIA Unified Memory)这一特性 ,该特性可在 CPU 与 GPU 之间自动执行页到页(page-to-page)的数据传输,从而在 GPU 偶尔出现内存不足(out-of-memory)的场景下,确保 GPU 能无错误地完成处理任务。
这一特性的工作原理与 CPU 内存(CPU RAM)和磁盘之间的常规内存分页机制类似。利用该特性为优化器状态(optimizer states)分配分页内存:当 GPU 内存不足时,这些优化器状态会被自动 “逐出”(evicted)到 CPU 内存中;而当优化器更新步骤需要使用这些内存时,它们又会被分页回(paged back)GPU 内存。
3.5 QLORA
利用上述组件,我们针对“量化基础模型中单个线性层+单个LoRA适配器”的结构,对QLORA定义如下:
Y BF16 = X BF16 ⋅ doubleDequant ( c 1 FP32 , c 2 k -bit , W NF4 ) + X BF16 ⋅ L 1 BF16 ⋅ L 2 BF16 (5) Y^{\text{BF16}} = X^{\text{BF16}} \cdot \text{doubleDequant}(c_1^{\text{FP32}}, c_2^{k\text{-bit}}, W^{\text{NF4}}) + X^{\text{BF16}} \cdot L_1^{\text{BF16}} \cdot L_2^{\text{BF16}} \tag{5} YBF16=XBF16⋅doubleDequant(c1FP32,c2k-bit,WNF4)+XBF16⋅L1BF16⋅L2BF16(5)
doubleDequant ( c 1 FP32 , c 2 k -bit , W k -bit ) = dequant ( dequant ( c 1 FP32 , c 2 k -bit ) , W 4 bit ) = W BF16 (6) \text{doubleDequant}(c_1^{\text{FP32}}, c_2^{k\text{-bit}}, W^{k\text{-bit}}) = \text{dequant}\left(\text{dequant}(c_1^{\text{FP32}}, c_2^{k\text{-bit}}), W^{4\text{bit}}\right) = W^{\text{BF16}} \tag{6} doubleDequant(c1FP32,c2k-bit,Wk-bit)=dequant(dequant(c1FP32,c2k-bit),W4bit)=WBF16(6)
其中,权重矩阵 W W W采用NF4(4位正态浮点数)格式,量化常数 c 2 c_2 c2采用FP8(8位浮点数)格式。为兼顾量化精度与内存效率:
- 权重矩阵 W W W的分块大小(blocksize)设为64,以提升量化精度;
- 量化常数 c 2 c_2 c2的分块大小设为256,以节省内存占用。
在参数更新过程中,仅需计算适配器权重相对于误差的梯度 ∂ E ∂ L i \frac{\partial E}{\partial L_i} ∂Li∂E,无需计算4位权重 W W W的梯度 ∂ E ∂ W \frac{\partial E}{\partial W} ∂W∂E。然而,计算 ∂ E ∂ L i \frac{\partial E}{\partial L_i} ∂Li∂E时,需先通过公式(5)计算 ∂ X ∂ W \frac{\partial X}{\partial W} ∂W∂X:
- 首先将存储格式为 W NF4 W^{\text{NF4}} WNF4的权重反量化为计算格式 W BF16 W^{\text{BF16}} WBF16(16位脑浮点数);
- 再以BF16精度求解导数 ∂ X ∂ W \frac{\partial X}{\partial W} ∂W∂X。
综上,QLORA包含两种数据类型:
- 存储数据类型:通常为4位NF4(4-bit NormalFloat),用于压缩存储模型权重,降低内存占用;
- 计算数据类型:16位BF16(16-bit BrainFloat),用于执行前向传播(输入数据 X 经基础模型和 LoRA 适配器,得到预测输出 Y)与反向传播(对比 Y 与真实答案,算出差距 E,通过链式法则,从 E 反向推导 “每个 LoRA 权重 Lᵢ对 E 的影响”,即得到梯度 ∂ E ∂ L i \frac{\partial E}{\partial L_i} ∂Li∂E)计算。
在训练过程中,我们先将存储数据类型反量化为计算数据类型,再进行前向与反向传播;但仅针对LoRA适配器参数计算权重梯度,且该梯度始终以16位BF16精度存储,确保计算精度与训练稳定性。
四、方法
低秩微调(LoRA)
低秩适配器(LoRA)微调是一种通过使用少量可训练参数(通常称为 “适配器”)来降低内存需求的方法,在此过程中,模型的全部参数保持固定且不进行更新。随机梯度下降(Stochastic Gradient Descent, SGD)过程中产生的梯度,会通过固定的预训练模型权重传递到适配器,适配器则通过更新以优化损失函数。
LoRA 通过额外的因式分解投影,对线性投影过程进行增强。已知存在投影关系 X W = Y X W = Y XW=Y(其中 X ∈ R b × h X \in \mathbb{R}^{b \times h} X∈Rb×h、 W ∈ R h × o W \in \mathbb{R}^{h \times o} W∈Rh×o),LoRA 对该投影的计算方式如下: Y = X W + s X L 1 L 2 (3) Y = X W + s X L_1 L_2 \tag{3} Y=XW+sXL1L2(3)式中, L 1 ∈ R h × r L_1 \in \mathbb{R}^{h \times r} L1∈Rh×r、 L 2 ∈ R r × o L_2 \in \mathbb{R}^{r \times o} L2∈Rr×o, s s s 为标量。
五、实验分析
5.1 QLoRA 与标准微调(Standard Finetuning)的对比实验
5.1.1 实验设置
选取三种架构(编码器架构、编码器 - 解码器架构以及仅解码器架构),并在参数规模最大为 30 亿(3B)的模型上,将 QLoRA 与 16 位适配器微调(16-bit adapter-finetuning)、全量微调(full-finetuning)的效果进行对比。我们的评估任务及对应模型配置如下:
-
在 RoBERTa-large (经典预训练语言模型中的编码器架构模型)模型上开展 GLUE 基准测试 ;
在 T5 (经典预训练语言模型中的编码器 - 解码器架构模型)模型上开展 Super-NaturalInstructions 任务 ; -
在 Flan v2 和 Alpaca数据集上对 LLaMA (经典预训练语言模型中的仅解码器架构模型)模型完成微调后,开展 5-shot(5 次示例提示)的 MMLU 基准测试 。
为进一步研究 NF4(4 位正态浮点数)相较于其他 4 位数据类型的优势,在参数规模为 1.25 亿(125M)至 130 亿(13B)的不同模型(OPT、LLaMA、BLOOM、Pythia)上测量量化后的零样本准确率(zero-shot accuracy)与困惑度(perplexity)。
由于分页行为仅在处理长序列长度的迷你批次(mini-batches)时才会发生,因此并未为分页优化器提供硬性测量数据。针对 48GB GPU 上 650 亿参数模型的分页优化器运行时间的分析结果表明,当批大小(batch size)设为 16 时,分页优化器的训练速度与常规优化器完全一致。未来的研究应进一步测量并明确分页过程在何种情况下会导致训练速度下降,并对此展开特征分析。
对不同参数规模(1.25 亿至 650 亿)、不同数据类型的量化大语言模型(包括 OPT 、BLOOM 、Pythia、LLaMA),在语言建模任务和一组零样本任务上进行性能评估。
5.1.2 实验分析
从图 7 和表 2 中可以观察到:相较于 4 位浮点数(FP4)和 4 位整数(Int4),NF4 的性能有显著提升;同时,双重量化(DQ)技术在减少内存占用的同时,并未导致性能下降。
图7展示了构建 NF4 数据类型的步骤 —— 正态分布的一半包含 8 个概率值,另一半包含 7 个概率值。同时纳入一个 “0” 以形成离散零点。将所有 Z 值与 “0” 拼接后,通过除以绝对最大值的方式归一化到 [-1, 1] 区间,从而得到最终的 NF4 数据类型。

表格2是关于不同数据类型下,Pile Common Crawl 对 13B OPT、BLOOM、LLaMA 和 Pythia 模型的平均困惑度(Mean PPL)的统计。
*平均困惑度(PPL)是衡量语言模型等对文本预测能力的指标,PPL 值越低,通常表示模型对该类数据的预测或拟合效果越好。
近期研究发现,尽管 4 位量化可用于模型推理,但相较于 16 位精度,其会导致性能下降 。这引发了一个关键问题:通过 4 位适配器微调(4-bit adapter finetuning),能否挽回这部分性能损失?
第一种实验设置验证 QLORA 能否复现 16 位全量微调在 T5 与 RoBERTa 模型微调中的性能表现,相关结果如下。
1.QLORA 可复现 16 位性能:
在 GLUE 数据集上,QLORA Int8(88.8)、QLORA FP4(88.6)与 BF16 基准(88.6)、LoRA BF16(88.8)的准确率几乎一致,说明低精度量化未损失通用语言理解能力。
在 Super-NaturalInstructions 数据集上,QLORA 各低精度格式(Int8、FP4、NF4)与 LoRA BF16(16 位精度)的 RougeL 得分(如 T5-3B 的 55.4 vs 56.5 vs 55.6 vs 55.3)差距极小,验证了 QLORA 在指令微调任务上的精度恢复能力。
2.数据与模型规模的关联:
Super-NaturalInstructions 中,T5 模型参数越大(如从 80M 到 11B),RougeL 得分越高(如 BF16 下从 40.1 升至 62.0),符合 “模型参数规模与任务能力正相关” 的常识;而 QLORA 在不同规模模型上均能保持与 16 位精度相当的表现,进一步凸显其适配性。
在第二种实验设置中,由于对参数规模达到 110 亿(11B)及以上的模型进行全量微调,需要多台高内存 GPU 服务器支持,因此转而验证:在 70 亿(7B)至 650 亿(65B)参数规模下,4 位 QLORA 能否媲美 16 位 LoRA 的性能。——在两个指令遵循数据集(Alpaca 与 FLAN v2)上对 70 亿至 650 亿参数的 LLaMA 模型进行微调,并通过 5 次示例提示(5-shot)准确率在 MMLU 基准测试上评估性能。
结果如表 3 所示:
采用双重量化(DQ)的 NF4(4 位正态浮点数)完全复现了 16 位 LoRA 在 MMLU 测试中的性能。此外,我们还观察到,基于 FP4(4 位浮点数)的 QLORA 性能,比 16 位脑浮点(BF16)LoRA 基准低约 1 个百分点。
这一结果印证了两项发现:
(1)基于 NF4 的 QLORA 能够复现 16 位全量微调与 16 位 LoRA 微调的性能;
(2)在量化精度方面,NF4 优于 FP4。
5.1.3 实验结论
结果一致表明:在采用成熟评估设置的学术基准测试中,基于 NF4(4 位正态浮点数)数据类型的 4 位 QLORA,其性能可媲美 16 位全量微调与 16 位 LoRA 微调。同时证实,NF4 的效果优于 FP4(4 位浮点数),且双重量化(DQ)技术不会导致性能下降。综合来看,这些结论构成了强有力的证据,证明 4 位 QLORA 微调能够稳定产生与 16 位微调方法相当的结果。
与此前关于量化的研究工作一致,MMLU(大规模多任务语言理解)和 Elo(模型性能评级指标)实验结果表明:在给定的微调与推理资源预算下,增加基础模型的参数数量同时降低其精度,是一种更优的选择。这一结论凸显了 QLORA(量化低秩适配器)在提升效率方面的重要价值。
5.2 模型训练
5.2.1 训练设置
为避免不同训练目标产生的干扰效应,即使对于包含人类对不同响应评判数据的数据集,采用交叉熵损失(监督学习)进行 QLORA 微调,未引入强化学习。
对于指令与响应区分明确的数据集,仅针对 “响应” 部分进行微调。而在 OASST1 和 HH-RLHF 数据集(均包含多个响应选项)中,会在对话树的每个层级筛选出最优响应,并基于筛选后的完整对话(含指令部分)开展微调。
在所有实验中,我们均采用 NF4(4 位正态浮点数)格式的 QLORA,并结合双重量化(DQ)与分页优化器(Paged Optimizers),以避免梯度检查点(gradient checkpointing)过程中出现内存峰值。
针对 130 亿(13B)和 330 亿(33B)参数的 LLaMA 模型进行了小规模超参数搜索,结果发现:70 亿(7B)参数模型上确定的超参数设置(包括训练轮数),除学习率和批大小外,均能推广至 13B 和 33B 模型。对于 33B 和 650 亿(65B)参数模型,我们将学习率减半,同时将批大小加倍。
5.2.2 基准模型
将所提模型与两类聊天机器人系统进行对比:一类是研究领域的模型(Vicuna 和 Open Assistant),另一类是商业领域的模型(GPT-4、GPT-3.5-turbo 和 Bard)。其中,Open Assistant 模型基于 LLaMA 330 亿参数模型(LLaMA 33B)构建,通过在 OASST1 数据集上采用 “基于人类反馈的强化学习”(Reinforcement Learning from Human Feedback, RLHF)技术完成微调;Vicuna 则是在 ShareGPT 平台的专有用户共享对话数据上,对 LLaMA 130 亿参数模型(LLaMA 13B)进行全量微调得到的,本质上是从 OpenAI GPT 系列模型蒸馏而来的成果。
5.2.3 评估设置
聊天机器人的评估并非易事,因为每个提示可能对应多个高质量响应,而对这些响应进行排序存在较大难度。因此,文中采用了一种全面的评估方法,具体包括:
(a)用于衡量通用语言理解能力的标准基准测试(MMLU );
表 10:不同数据集规模与微调轮次对 5 次示例(5-shot)MMLU 测试集平均准确率的影响
尽管增大数据集规模以及训练轮次超过 1 轮均有助于提升 MMLU 性能,但不同数据集之间的性能差异远大于此(规模与轮次带来的差异),这表明数据集质量对 MMLU 性能的影响比数据集规模更大。
(b)自动评估与人工评估相结合的方式 —— 该方式用于统计聊天机器人 A 的响应优于聊天机器人 B 的数量;
(c)循环锦标赛式评估 —— 在这种评估中,各聊天机器人以 “对战” 形式展开竞争,其性能通过 Elo 评分进行衡量。
5.2.4 Guanaco:在 OASST1 数据集上经 QLORA 训练的聊天机器人达到技术前沿
基于我们的自动评估与人工评估结果,经 QLORA 微调的最优模型 ——Guanaco 65B(在 OASST1 数据集的一个变体上对其完成了微调),不仅是当前性能最佳的开源聊天机器人模型,其性能还可与 ChatGPT 相媲美。在与 GPT-4 的对比中,基于人工标注者在 Vicuna 基准测试上进行系统级两两比较得出的 Elo 评分,Guanaco 65B 和 33B 的预期获胜概率为 30%—— 这是目前已报道的该指标最高值。与 ChatGPT 相关的 Vicuna 基准测试结果如表 4 所示。
Guanaco 65B 是仅次于 GPT-4 的性能最佳模型,其性能达到 ChatGPT 的 99.3%。
Guanaco 33B 的参数数量多于 Vicuna 13B 模型,但它的权重仅采用 4 位精度存储,因此内存效率显著更高 —— 前者内存占用为 21GB,而后者为 26GB;同时,Guanaco 33B 的性能相较于 Vicuna 13B 提升了 3 个百分点。此外,Guanaco 7B 的内存占用仅为 5GB,可轻松在现代手机上运行,且其评分仍比 Alpaca 13B 高出近 20 个百分点。
然而,表 4 中的置信区间也非常宽泛,许多模型的性能存在重叠。推测这种不确定性源于评分尺度缺乏清晰的定义 —— 例如,在 10 分制中,“8 分” 在不同场景下具体代表什么含义并不明确。因此,建议转而使用 Elo 排名法 :该方法基于人工标注者和 GPT-4 的两两比较评判结果,可规避 “绝对评分尺度锚定” 的问题。竞争力最强的几款模型的 Elo 评分如表 1 所示。
在 Vicuna 基准测试中,人类与 GPT-4 对模型的排名存在部分差异(尤其是针对 Guanaco 7B 模型),但对大多数模型的排名具有一致性。总体而言,这表明 GPT-4 与人工标注者在系统层面的评判具有中等程度的一致性,因此基于模型的评估可作为人工评估的一种相对可靠的替代方案。

表 6 中的 Elo 排名显示,在 Vicuna 和 OA 基准测试中,Guanaco 33B 和 65B 模型的性能优于除 GPT-4 之外的所有模型;且与表 4 结果一致,这两款模型的性能可与 ChatGPT 相媲美。需要说明的是,Vicuna 基准测试对开源模型更有利,而规模更大的 OA 基准测试则对 ChatGPT 更有利。
从表 5 和表 4 中还可发现,微调数据集的适用性是决定模型性能的关键因素:在 FLAN v2 数据集上微调的 LLaMA 模型在 MMLU 基准测试中表现尤为出色,但在 Vicuna 基准测试中表现最差(其他模型也呈现出类似趋势)。这一现象也表明当前各评估基准之间存在一定的 “正交性”—— 即 MMLU 基准测试中的优异表现并不意味着聊天机器人性能(以 Vicuna 或 OA 基准测试衡量)同样出色,反之亦然。
以上评估中,Guanaco 是唯一未使用专有数据训练的顶级模型 —— 这是因为 OASST1 数据集的收集准则明确禁止使用 GPT 系列模型。在仅使用开源数据训练的模型中,性能仅次于 Guanaco 的是 Anthropic HH-RLHF 模型,该模型在 Vicuna 基准测试中的得分比 Guanaco 低 30 个百分点(见表 4)。
总体而言,这些结果表明:4 位 QLORA(量化低秩适配器)技术效果显著,能够训练出可与 ChatGPT 匹敌的顶级聊天机器人。此外,Guanaco 33B 模型(330 亿参数)可在 24GB 显存的消费级 GPU 上完成训练,耗时不到 12 小时。这为未来的研究开辟了新可能 —— 通过 QLORA 技术在特定开源数据上进行微调,所训练出的模型有望与当前最优秀的商业模型一较高下。
六、个人声明
本文为作者对原论文的学习笔记与心得分享,受个人学识与理解有限,文中对论文内容的解读或有不够周全之处,一切以原论文正式表述为准。本文仅用于学术交流与传播,内容均由作者独立整理完成,不代表本公众号立场。如文中所涉文字、图片等内容存在版权争议,请及时与作者联系,作者将在第一时间核实并妥善处理。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)