
QLORA:量化大型语言模型的高效微调
蒂姆・德特默斯 * 阿蒂多罗・帕格诺尼 * 阿里・霍尔茨曼 卢克・泽特勒莫耶华盛顿大学{dettmers,artidoro,ahai,lsz}@cs.washington.edu
相关代码及模型已开源:
https://github.com/artidoro/qlora 和
https://github.com/TimDettmers/bitsandbytes预印本。
arXiv:2305.14314v1 [cs.LG] 2023 年 5 月 23 日
摘要
我们提出 QLORA,一种高效的微调方法,该方法大幅降低内存占用,使得在单块 48GB GPU 上微调 650 亿参数模型成为可能,同时保持 16 位微调的任务性能。QLORA 通过冻结的 4 位量化预训练语言模型,将梯度反向传播至低秩适配器(LoRA)中。
我们性能最优的模型家族 Guanaco,在 Vicuna 基准测试中优于所有先前公开的模型,性能达到 ChatGPT 的 99.3%,而仅需在单块 GPU 上微调 24 小时。QLORA 引入了多项创新,在不牺牲性能的前提下节省内存:(a)4 位标准浮点数(NF4),一种在信息论层面上对正态分布权重最优的新数据类型;(b)双重量化,通过量化量化常数降低平均内存占用;(c)分页优化器,用于管理内存峰值。我们使用 QLORA 微调了超过 1000 个模型,针对 8 个指令数据集、多种模型类型(LLaMA、T5)以及常规微调难以实现的模型规模(如 330 亿和 650 亿参数模型),对指令遵循能力和聊天机器人性能进行了详细分析。
结果表明,即使使用比先前最先进模型更小的模型,基于高质量小数据集的 QLORA 微调也能取得最先进的结果。我们基于人类评估和 GPT-4 评估,对聊天机器人性能进行了详细分析,发现 GPT-4 评估 是人类评估的一种廉价且合理的替代方案。此外,我们发现当前的聊天机器人基准测试无法可靠地准确评估聊天机器人的性能水平。通过针对性案例分析,我们展示了 Guanaco 相较于 ChatGPT 的不足。我们开源了所有模型和代码,包括用于 4 位训练的 CUDA 内核。
1 引言
微调大型语言模型(LLMs)是提升其性能的有效方式 [40, 62, 43, 61, 59, 37],同时也能添加期望行为或移除不期望行为 [43, 2, 4]。然而,微调超大型模型的成本高得令人望而却步;对 LLaMA 650 亿参数模型 [57] 进行常规 16 位微调,需要超过 780GB 的 GPU 内存。尽管近期的量化方法能够降低 LLM 的内存占用 [14, 13, 18, 66],但这些技术仅适用于推理阶段,在训练阶段会失效 [65]。
我们首次证明,对 4 位量化模型进行微调而不造成任何性能损失是可行的。我们的方法 QLORA 采用新颖的高精度技术将预训练模型量化至 4 位,然后添加一组小型可学习的低秩适配器权重 [28],通过量化权重反向传播梯度来训练这些适配器。
QLORA 将 650 亿参数模型微调的平均内存需求从超过 780GB 降至不足 48GB,且相较于 16 位全量微调基准,不会降低运行速度或预测性能。这标志着 LLM 微调的可及性发生了重大转变:如今,迄今为止最大的公开可用模型已能在单块 GPU 上进行微调。
借助 QLORA,我们训练了 Guanaco 模型家族,其中性能第二优的模型在 Vicuna [10] 基准测试中达到 ChatGPT 性能的 97.8%,且仅需在单块消费级 GPU 上训练不到 12 小时;使用单块专业 GPU 训练 24 小时后,我们最大的模型性能达到 ChatGPT 的 99.3%,在 Vicuna 基准测试中基本缩小了与 ChatGPT 的差距。部署时,我们最小的**Guanaco 模型(70 亿参数)仅需 5GB 内存,**且在 Vicuna 基准测试中比 26GB 的 Alpaca 模型高出 20 多个百分点(表 6)。
表 1 模型间竞赛的 Elo 评分,基于 10,000 次随机初始排序的平均值。比赛胜负由 GPT-4 判定,GPT-4 会根据 Vicuna 基准中的给定提示判断哪个响应更优。表中显示了 95% 置信区间(±)。在 GPT-4 之后,Guanaco 33B 和 65B 赢得的比赛最多,而 Guanaco 13B 的得分高于 Bard。

QLORA 引入了多项旨在节省内存且不牺牲性能的创新 :(1)4 位标准浮点数,一种在信息论层面上对正态分布数据最优的量化数据类型,其实证结果优于 4 位整数和 4 位浮点数; (2)双重量化,一种对量化常数 进行量化 的方法,平均每个参数可节省约 0.37 位(对于 650 亿参数模型,约节省 3GB);(3)分页优化器,利用 NVIDIA 统一内存避免处理长序列长度的小批量数据时出现梯度检查点内存峰值。我们将这些创新与优化后的 LoRA 方法相结合,在每个网络层都添加适配器,从而几乎避免了先前工作中出现的所有精度权衡问题。
QLORA 的高效性使我们能够在常规微调因内存开销而无法实现的模型规模上,深入研究指令微调与聊天机器人性能。因此,我们在多个指令微调数据集、模型架构以及 8000 万至 650 亿参数的模型规模上训练了超过 1000 个模型。
除了证明 QLORA 能够恢复 16 位性能(第 4 节)并训练出最先进的聊天机器人 Guanaco(第 5 节)外,我们还分析了训练模型的趋势。首先,我们发现数据质量远比数据集规模重要,例如,一个包含 9000 个样本的数据集(OASST1)在聊天机器人性能上优于一个包含 45 万个样本的数据集(FLAN v2,经子采样),尽管这两个数据集均旨在支持指令遵循的泛化能力。
其次,我们发现出色的大规模多任务语言理解(MMLU)基准测试性能并不意味着出色的 Vicuna 聊天机器人基准测试性能,反之亦然 ------ 换句话说,对于特定任务,数据集的适配性比规模更重要。
此外,我们还结合人类评估者和 GPT-4 评估,对聊天机器人性能进行了广泛分析。我们采用锦标赛式基准测试,模型两两对决,为给定提示生成最佳响应。比赛胜负由 GPT-4 或人类标注者判定。
锦标赛结果汇总为 Elo 评分 [16, 17],用于确定聊天机器人的性能排名。我们发现,GPT-4 评估和人类评估在模型性能排名上大体一致,但也存在明显分歧的情况。因此,我们强调,尽管基于模型的评估是人类标注的廉价替代方案,但它也存在不确定性。
我们通过对 Guanaco 模型的定性分析补充了聊天机器人基准测试结果。该分析突出了定量基准测试未捕捉到的成功案例和失败案例。我们开源了所有带有人类和 GPT-4 标注的模型生成结果,以促进进一步研究。
我们开源了代码库和 CUDA 内核,并将我们的方法集成到 Hugging Face Transformers 框架 [64] 中,使其易于被所有人使用。我们发布了针对 70 亿 / 130 亿 / 330 亿 / 650 亿参数模型的适配器集合,这些适配器在 8 个不同的指令遵循数据集上进行了训练,共包含 32 个开源微调模型。

图 1 不同微调方法及其内存需求。QLORA 通过将 Transformer 模型量化至 4 位精度并使用分页优化器处理内存峰值,在 LoRA 的基础上进行了改进。
2 背景
块级 k 位量化
量化是将输入从信息更丰富的表示形式离散化为信息较少的表示形式的过程。它通常意味着将高位数据类型转换为低位数据类型,例如从 32 位浮点数转换为 8 位整数。为确保低位数据类型的整个范围得到利用,通常通过输入元素的绝对最大值进行归一化,将输入数据类型重新缩放至目标数据类型的范围,输入元素通常以张量形式存在。例如,将 32 位浮点数(FP32)张量量化为范围在 [-127, 127] 内的 Int8 张量:\(X^{Int8 }=round\left(\frac{127}{absmax\left(X^{FP 32}\right)} X^{FP 32}\right)=round\left(c^{FP 32} \cdot X^{FP 32}\right), (1)\)其中 c 是量化常数或量化尺度。反量化是逆过程:\(\left(c^{FP 32}, X^{Int8 }\right)=\frac{X^{Int8 }}{c^{FP 32}}=X^{FP 32} (2)\)
这种方法的问题在于,如果输入张量中出现大幅值数据(即异常值),则量化区间(特定的位组合)将无法得到充分利用,部分区间可能没有数据被量化。为避免异常值问题,一种常用方法是将输入张量分割为多个块,对每个块进行独立量化,每个块都有自己的量化常数 c。具体可形式化为:将输入张量\(X \in \mathbb{R}^{b ×h}\) 展平后,分割为 n 个连续的大小为 B 的块,其中\(n=(b ×h) / B\)。使用公式(1)对这些块进行独立量化,得到量化张量和 n 个量化常数\(c_{i}\)。
低秩适配器
低秩适配器(LoRA)微调 [28] 是一种降低内存需求的方法,它使用一组小型可训练参数(通常称为适配器),而不更新固定的预训练模型全量参数。随机梯度下降过程中的梯度通过固定的预训练模型权重传递至适配器,适配器通过更新以优化损失函数。LoRA 通过额外的因子分解投影来增强线性投影。给定投影\(X W=Y\)(其中\(X \in \mathbb{R}^{b ×h}\),\(\check{W} \in \mathbb{R}^{h ×o}\)),LoRA 的计算方式如下:\(Y=X W+s X L_{1} L_{2}, (3)\)其中\(L_{1} \in \mathbb{R}^{h ×r}\),\(L_{2} \in \mathbb{R}^{r ×o}\),s 是标量。
参数高效微调的内存需求
一个重要的讨论点是 LoRA 在训练过程中的内存需求,这与所使用的适配器数量和大小相关。由于 LoRA 的内存占用极小,我们可以使用更多适配器来提升性能,而不会显著增加总内存占用。尽管 LoRA 被设计为参数高效微调(PEFT)方法,但 LLM 微调的大部分内存占用来自激活梯度,而非学习到的 LoRA 参数。对于在 FLAN v2 数据集上训练的 70 亿参数 LLaMA 模型,批量大小为 1,LoRA 权重相当于常用的原始模型权重的 0.2%[28, 37],此时 LoRA 输入梯度的内存占用为 567MB,而 LoRA 参数仅占用 26MB。
使用梯度检查点 [9] 后,输入梯度的平均内存占用降至每个序列 18MB,但仍比所有 LoRA 权重的总和更占用内存。相比之下,4 位基础模型的内存占用为 5048MB。这表明梯度检查点非常重要,但大幅减少 LoRA 参数数量仅能带来微小的内存收益。这意味着我们可以使用更多适配器,而不会显著增加整体训练内存占用(详见附录 G 的详细分解)。正如后文所讨论的,这对于恢复全 16 位精度性能至关重要。
3 QLORA 微调
QLORA 通过两种我们提出的技术实现高保真 4 位微调------4 位标准浮点数(NF4)量化和双重量化。此外,我们引入了分页优化器,以防止梯度检查点期间的内存峰值导致内存不足错误,这类错误在以往单台机器上微调大型模型时较为常见。
QLORA 具有一种低精度存储数据类型(通常为 4 位)和一种计算数据类型(通常为 BFloat16)。在实际应用中,这意味着每当使用 QLORA 权重张量时,我们会将该张量反量化为 BFloat16,然后以 16 位精度进行矩阵乘法运算。
接下来,我们将讨论 QLORA 的组成部分,随后给出 QLORA 的正式定义。
4 位标准浮点数量化
标准浮点数(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}\) 个值\(q_{i}\):\(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) , {\bf \large \left( \frac {i+1}{2^{k}+1}}\right) \right) , (4)\)其中\(Q_{X}(\cdot)\) 是标准正态分布\(N(0,1)\) 的分位数函数。对称 k 位量化的一个问题是,这种方法无法精确表示零,而零是对填充和其他零值元素进行无误差量化的重要特性。为确保离散零点为 0,并充分利用 k 位数据类型的所有\(2^{k}\) 位,我们构建了一种非对称数据类型:分别估计负区间(\(2^{k-1}\) 个值)和正区间(\(2^{k-1}+1\) 个值)的分位数\(q_{i}\),然后合并这些\(q_{i}\) 集合,并移除两个集合中重复出现的零。我们将这种在每个量化区间中分配相等期望数量值的数据类型称为 k 位标准浮点数(NFk),因为该数据类型在信息论层面上对零中心正态分布数据最优。该数据类型的精确值详见附录 E。
双重量化
我们引入双重量化(DQ),即对量化常数进行量化以进一步节省内存。尽管精确的 4 位量化需要较小的块大小 [13],但这也会带来相当大的内存开销。例如,对于权重 W,使用 32 位常数和 64 的块大小,量化常数平均每个参数会增加 32/64=0.5 位的内存占用。双重量化有助于降低量化常数的内存占用。
具体而言,双重量化将第一次量化的量化常数\(c_{2}^{FP 32}\) 作为第二次量化的输入。第二步会得到量化后的量化常数\(c_{2}^{FPS}\) 和第二级量化常数\(c_{1}^{FP 32}\)。我们使用 8 位浮点数和 256 的块大小进行第二次量化,这与 Dettmers 和 Zettlemoyer [13] 的结果一致,8 位量化不会导致性能下降。由于\(c_{2}^{FP 32}\) 均为正值,我们在量化前减去\(c_{2}\) 的均值,使其围绕零中心,从而利用对称量化。平均而言,对于 64 的块大小,这种量化将每个参数的内存占用从 32/64=0.5 位降至 8/64 + 32/(64×256)=0.127 位,每个参数减少 0.373 位的内存占用。
分页优化器
分页优化器利用 NVIDIA 统一内存 3 特性,该特性在 GPU 偶尔出现内存不足时,自动在 CPU 和 GPU 之间进行页到页的数据传输,确保 GPU 无错误处理。该特性的工作方式类似于 CPU 内存与磁盘之间的常规内存分页。我们使用该特性为优化器状态分配分页内存,当 GPU 内存不足时,这些状态会自动置换到 CPU 内存,当优化器更新步骤需要内存时,再将其分页回 GPU 内存。
QLORA 的正式定义
结合上述组件,我们对量化基础模型中单个线性层的 QLORA(含单个 LoRA 适配器)定义如下:\(Y^{BF 16}=X^{BF 16} doubleDequant \left(c_{1}^{FP 32}, c_{2}^{k-bit}, W^{NF 4}\right)+X^{BF 16} L_{1}^{BF 16} L_{2}^{BF16}, (5)\)其中 doubleDequant (・) 定义为:\(doubleDepartment \left(c_{1}^{PP, 32}, c_{2}^{k-bit}, W^{k-bit}\right)=dequant \left(dequant\left(c_{1}^{PP 32}, c_{2}^{k-bit}\right), W^{4 bit}\right)=W^{BF 16}, \quad (6)\)
我们对权重 W 使用 NF4 数据类型,对\(c_{2}\) 使用 FP8 数据类型。为保证量化精度,权重 W 的块大小设为 64;为节省内存,\(c_{2}\) 的块大小设为 256。
参数更新仅需要适配器权重的误差梯度\(\frac{\partial E}{\partial L_{i}}\),而不需要 4 位权重的误差梯度\(\frac{\partial E}{\partial W}\)。然而,计算\(\frac{\partial E}{\partial L_{i}}\) 需先计算\(\frac{\partial x}{\partial w}\),该过程通过公式(5)实现:将存储的\(W^{NF 4}\) 反量化为计算数据类型 WBF16,以 BFloat16 精度计算导数\(\frac{\partial X}{\partial W}\)。
总而言之,QLORA 具有一种存储数据类型(通常为 4 位标准浮点数)和一种计算数据类型(16 位脑浮点数)。我们将存储数据类型反量化为计算数据类型以执行前向传播和反向传播,但仅计算 LoRA 参数的权重梯度(使用 16 位脑浮点数)。
3https://docs.nvidia.com/cuda/cuda-c-programming-guide
4 QLORA 与标准微调的对比
我们已经讨论了 QLORA 的工作原理及其如何显著降低模型微调的内存需求。现在的核心问题是 QLORA 是否能达到与全模型微调相当的性能。此外,我们还希望分析 QLORA 的组件,包括 4 位标准浮点数(NF4)相较于标准 4 位浮点数(FP4)的优势。以下各节将讨论旨在回答这些问题的实验。
实验设置
我们考虑三种架构(编码器、编码器 - 解码器和仅解码器),并在最大 30 亿参数的模型上对比 QLORA 与 16 位适配器微调及全量微调的性能。评估任务包括:基于 RoBERTa-large 的 GLUE [58]、基于 T5 [49] 的 Super-NaturalInstructions(TKInstruct)[61],以及在 Flan v2 [39] 和 Alpaca [55] 上微调 LLaMA 后的 5 样本 MMLU [24]。
为进一步研究 NF4 相较于其他 4 位数据类型的优势,我们采用 Dettmers 和 Zettlemoyer [13] 的实验设置,在不同模型(OPT [72]、LLaMA [57]、BLOOM [52]、Pythia [7])和 1.25 亿至 130 亿参数的模型规模上,测量量化后的零样本精度和困惑度。为使结果更易读,我们在每个具体设置的结果部分提供更多细节,完整细节见附录 A。
尽管分页优化器对于在单块 24GB/48GB GPU 上进行 330 亿 / 650 亿参数模型的 QLORA 微调至关重要,但我们未提供分页优化器的具体性能指标,因为分页仅在处理长序列长度的小批量数据时发生,这种情况较为罕见。不过,我们对 48GB GPU 上 650 亿参数模型的分页优化器运行时间进行了分析,发现当批量大小为 16 时,分页优化器与常规优化器的训练速度相同。未来的工作应测量并描述分页过程在何种情况下会导致性能下降。
默认 LoRA 超参数无法达到 16 位性能
当按照常规做法将 LoRA 应用于查询和值注意力投影矩阵时 [28],我们无法在大型基础模型上复现全量微调的性能。如图 2 所示(基于 Alpaca 数据集上的 LLaMA 70 亿参数模型微调),我们发现最关键的 LoRA 超参数是所使用的 LoRA 适配器总数,只有在所有 Transformer 块的线性层上使用 LoRA,才能达到 16 位全量微调的性能。其他 LoRA 超参数(如投影维度 r)对性能无影响(详见附录 A)。

图 2 LLaMA 70 亿参数模型在 Alpaca 数据集上的 RougeL 得分。每个点代表一组不同随机种子的运行结果。我们改进了斯坦福 Alpaca 全量微调的默认超参数,构建了强大的 16 位基准用于对比。在所有 Transformer 层上使用 LoRA 是达到 16 位性能的关键。
同样,我们发现全量微调基准的默认超参数未充分优化。我们在 1e-6 至 5e-5 的学习率和 8 至 128 的批量大小范围内进行超参数搜索,以找到稳健的基准。LLaMA 70 亿参数模型在 Alpaca 上的微调结果如图 2 所示。

图 3 使用不同 4 位数据类型的 LLaMA 模型在 Winogrande、HellaSwag、PiQA、Arc-Easy 和 Arc-Challenge 数据集上的平均零样本精度。与常规 4 位浮点数相比,标准浮点数数据类型显著提升了单位精度的性能增益。尽管双重量化(DQ)仅带来微小增益,但它允许更精细地控制内存占用,使特定规模的模型(330 亿 / 650 亿参数)能够适配特定的 GPU(24GB/48GB)。
4 位标准浮点数的性能优于 4 位浮点数
尽管 4 位标准浮点数(NF4)在信息论层面上是最优的,但仍需验证这一特性是否能转化为实证优势。我们采用 Dettmers 和 Zettlemoyer [13] 的实验设置,对不同规模(1.25 亿至 650 亿参数)、不同数据类型的量化 LLM(OPT [72]、BLOOM [52]、Pythia [7]、LLaMA)进行语言建模和一组零样本任务评估。如图 3 和表 2 所示,NF4 的性能显著优于 FP4 和 Int4,且双重量化在降低内存占用的同时不会导致性能下降。
k 位 QLORA 达到 16 位全量微调及 16 位 LoRA 微调的性能
近期研究表明,4 位量化可用于推理 [13, 18],但相较于 16 位会导致性能下降。这引发了一个关键问题:通过 4 位适配器微调是否能恢复损失的性能。我们通过两种设置进行验证。
第一种设置聚焦于在 GLUE 和 Super-NaturalInstructions 数据集上,对比 12.5 亿至 30 亿参数的 RoBERTA 和 T5 模型的全 16 位微调性能。结果如表 3 所示。在两个数据集上,16 位、8 位和 4 位适配器方法均能复现 16 位全量微调基准的性能。这表明,量化不精确导致的性能损失可通过量化后的适配器微调完全恢复。

表 3 在 GLUE 和 Super-NaturalInstructions 数据集上对比 16 位脑浮点数(BF16)、8 位整数(Int8)、4 位浮点数(FP4)和 4 位标准浮点数(NF4)的实验结果。QLORA 能够复现 16 位 LoRA 和全量微调的性能。
第二种设置中,由于对 110 亿及以上参数的模型进行全量微调需要多台高内存 GPU 服务器,我们继续验证 4 位 QLORA 在 70 亿至 650 亿参数规模上是否能达到 16 位 LoRA 的性能。为此,我们在两个指令遵循数据集(Alpaca 和 FLAN v2)上微调 LLaMA 70 亿至 650 亿参数模型,并通过 5 样本 MMLU 基准测试评估性能。结果如表 4 所示,NF4 结合双重量化完全恢复了 16 位 LoRA 的 MMLU 性能。此外,我们还注意到,使用 FP4 的 QLORA 比 16 位脑浮点数 LoRA 基准低约 1 个百分点。这证实了我们的两项发现:(1)使用 NF4 的 QLORA 能够复现 16 位全量微调及 16 位 LoRA 微调的性能;(2)NF4 在量化精度方面优于 FP4。

表 2 1.25 亿至 130 亿参数的 OPT、BLOOM、LLaMA 和 Pythia 模型在 Pile Common Crawl 数据集上的平均困惑度(不同数据类型)。
总结
我们的结果一致表明,在具有完善评估设置的学术基准测试中,使用 NF4 数据类型的 4 位 QLORA 能够达到 16 位全量微调及 16 位 LoRA 微调的性能。我们还证明,NF4 比 FP4 更有效,且双重量化不会降低性能。综合来看,这些结果有力地证明了 4 位 QLORA 微调能够可靠地达到与 16 位方法相当的结果。
与先前的量化研究 [13] 一致,我们的 MMLU 和 Elo 结果表明,在给定的微调和推理资源预算下,增加基础模型的参数数量同时降低其精度是有益的。这凸显了 QLORA 在效率方面的优势。由于我们在 4 位微调实验中未观察到相较于全量微调的性能下降,这引发了一个问题:QLORA 微调的性能 - 精度权衡究竟处于何种水平,我们将这一问题留给未来的工作探索。
接下来,我们将在学术研究硬件上无法通过全 16 位微调实现的规模上,深入研究指令微调。
5 利用 QLORA 推动聊天机器人性能达到最先进水平
在证实 4 位 QLORA 在不同规模、任务和数据集上均能达到 16 位性能后,我们对目前可用于研究的最大开源语言模型进行了深入的指令微调研究。为评估这些模型的指令微调性能,我们在具有挑战性的自然语言理解基准(MMLU)上进行了评估,并开发了用于真实世界聊天机器人性能评估的新方法。
5.1 实验设置
我们现将实验设置概述如下,完整细节见附录 B。
数据
据我们所知,目前尚无针对近期指令遵循数据集的综合研究,因此我们选择了 8 个近期数据集。这些数据集包括:众包数据集(OASST1 [31]、HH-RLHF [4])、基于指令微调模型的蒸馏数据集(Alpaca [55]、Self-Instruct [59]、UnnaturalInstructions [26])、语料库聚合数据集(FLAN v2 [12])以及混合数据集(Chip2 [32]、Longform [30])。这些数据集涵盖不同语言、数据规模和许可类型。
训练设置
为避免不同训练目标造成的混淆效应,我们采用交叉熵损失(监督学习)进行 QLORA 微调,不使用强化学习,即使对于包含人类对不同响应的偏好判断的数据集也是如此。对于明确区分指令和响应的数据集,我们仅对响应进行微调(详见附录 B 的消融实验)。对于 OASST1 和 HH-RLHF,每个用户问题对应多个响应,我们选择对话树中每个层级的最优响应,并对包含指令的完整选定对话进行微调。在所有实验中,我们使用 NF4 QLORA 结合双重量化和分页优化器,以防止梯度检查点期间的内存峰值。我们对 130 亿和 330 亿参数的 LLaMA 模型进行了小规模超参数搜索,发现 70 亿参数模型的所有超参数设置(包括轮数)均可推广,仅学习率和批量大小除外。对于 330 亿和 650 亿参数模型,我们将学习率减半,批量大小加倍。
基准模型
我们将我们的模型与研究领域(Vicuna [10] 和 Open Assistant [31])和商业领域(GPT-4 [42]、GPT-3.5-turbo 和 Bard)的聊天机器人系统进行对比。Open Assistant 模型是在同一 OASST1 数据集上通过人类反馈强化学习(RLHF)微调的 LLaMA 330 亿参数模型。Vicuna 通过在 ShareGPT 的专有用户共享对话上对 LLaMA 130 亿参数模型进行全量微调得到,因此是基于 OpenAI GPT 模型蒸馏的结果。

5.2 评估
按照常规做法,我们使用大规模多任务语言理解(MMLU)基准 [24] 测量模型在一系列语言理解任务上的性能。这是一个包含 57 个任务的多项选择基准,涵盖小学数学、美国历史、计算机科学、法律等领域。我们报告 5 样本测试精度。
我们还通过自动评估和人类评估测试模型的生成语言能力。第二类评估基于人类精心设计的查询,旨在测量模型响应的质量。
尽管这是一个更贴近真实场景的聊天机器人性能测试平台,且越来越受欢迎,但文献中尚无公认的评估协议。以下是我们提出的评估设置,所有情况下均使用核采样(nucleus sampling),其中 p=0.9,温度 = 0.7。

表 5 不同规模的 LLaMA 模型通过 QLORA 在相应数据集上微调后的 5 样本 MMLU 测试结果。
基准测试数据
我们在两个精心设计的查询数据集(问题集)上进行评估:Vicuna 提示集 [10] 和 OASST1 验证数据集 [31]。我们直接使用 Vicuna 提示集(包含 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 基准上进行了两项平行的人类评估,分别对应上述两种自动评估协议。我们使用亚马逊机械 Turk(AMT)平台,每项与 ChatGPT 的对比安排两名人类标注者,每项两两对比安排三名人类标注者。
Elo 评分
结合人类和自动两两对比结果,我们构建了锦标赛式竞赛,模型两两对决,为给定提示生成最佳响应。这与 Bai 等人 [4] 和 Chiang 等人 [10] 的模型对比方法类似,但我们除了使用人类评分外,还采用了 GPT-4 评分。我们从带标注的对比结果中随机采样,计算 Elo 评分 [16, 17]。Elo 评分广泛应用于国际象棋等游戏,用于衡量相对于对手的预期胜率。例如,Elo 得分为 1100 的选手对阵 Elo 得分为 1000 的选手,预期胜率约为 65%;Elo 得分为 1000 的选手对阵另一位 1000 分选手或 1100 分选手对阵另一位 1100 分选手,预期胜率均为 50%。每场比赛后,Elo 评分会根据预期结果进行相应调整:意外爆冷会导致评分大幅变化,而符合预期的结果仅会导致评分小幅变化。随着时间的推移,Elo 评分大致能反映每位选手的竞技水平。我们将初始得分设为 1000,K 值设为 32。与 Chiang 等人 [10] 类似,我们使用不同的随机种子重复该过程 10,000 次,以控制顺序效应(例如,模型对的对决顺序)。
5.3 Guanaco:基于 OASST1 训练的 QLORA 模型是最先进的聊天机器人
基于自动评估和人类评估结果,我们发现性能最优的 QLORA 微调模型 Guanaco 65B(在 OASST1 变体上微调)是性能最佳的开源聊天机器人模型,其性能可与 ChatGPT 竞争。基于人类标注者的系统级两两对比 Elo 评分,Guanaco 65B 和 33B 相较于 GPT-4 的预期胜率为 30%,这是迄今为止报告的最高值。

表 6 基于 GPT-4 评估的零样本 Vicuna 基准得分(相对于 ChatGPT 得分的百分比)。我们发现,尽管 OASST1 模型的训练数据集规模很小,且内存需求仅为基准模型的一小部分,但性能接近 ChatGPT。
Vicuna 基准 [10] 上相对于 ChatGPT 的结果如表 6 所示。我们发现 Guanaco 65B 是 GPT-4 之后性能最佳的模型,其性能达到 ChatGPT 的 99.3%。Guanaco 33B 的参数数量多于 Vicuna 13B,但仅使用 4 位精度存储权重,因此内存效率更高(21GB vs 26GB),且相较于 Vicuna 13B 性能提升 3 个百分点。此外,Guanaco 7B 仅需 5GB 内存,可轻松在现代手机上运行,且性能比 Alpaca 13B 高出近 20 个百分点。
然而,表 6 的置信区间非常宽,许多模型的性能存在重叠。我们推测这种不确定性源于评分尺度缺乏明确界定,例如,在不同场景下,10 分制中的 8 分含义不明确。因此,我们建议使用基于人类标注者和 GPT-4 两两判断的 Elo 排名方法 [16],以避免绝对尺度的界定问题。最具竞争力模型的 Elo 评分如表 1 所示。我们注意到,人类和 GPT-4 在 Vicuna 基准上的模型排名存在部分分歧(尤其是对于 Guanaco 7B),但大多数模型的排名具有一致性,系统级的肯德尔 tau 相关系数 τ=0.43,斯皮尔曼等级相关系数 r=0.55。在样本级,GPT-4 与人类标注者多数投票的一致性较弱,弗莱希斯 κ=0.25。总体而言,这表明 GPT-4 与人类标注者的系统级判断具有中等程度的一致性,因此基于模型的评估可作为人类评估的一种相对可靠的替代方案。我们将在第 6.2 节进一步讨论相关考量。

表 7 模型锦标赛的 Elo 评分,模型为给定提示生成最佳响应,由人类评估者或 GPT-4 判定。总体而言,在研究的基准测试中,Guanaco 65B 和 33B 相较于 ChatGPT-3.5 更受青睐。根据人类评估者的判断,Elo 评分每相差 10 分,胜率约相差 1.5%。
表 7 的 Elo 排名表明,在 Vicuna 和 OA 基准上,Guanaco 33B 和 65B 除 GPT-4 外优于所有其他模型,且性能与 ChatGPT 相当(与表 6 一致)。我们注意到,Vicuna 基准更有利于开源模型,而规模更大的 OA 基准更有利于 ChatGPT。
此外,从表 5 和表 6 可以看出,微调数据集的适配性是决定性能的关键因素。在 FLAN v2 上微调的 LLaMA 模型在 MMLU 上表现尤为出色,但在 Vicuna 基准上表现最差(其他模型也呈现类似趋势)。这也表明当前评估基准存在部分正交性:出色的 MMLU 性能并不意味着出色的聊天机器人性能(以 Vicuna 或 OA 基准衡量),反之亦然。
Guanaco 是我们评估中唯一未使用专有数据训练的顶级模型,因为 OASST1 数据集的收集指南明确禁止使用 GPT 模型。在仅使用开源数据训练的模型中,性能第二优的是 Anthropic HH-RLHF 模型,其在 Vicuna 基准上的得分比 Guanaco 低 30 个百分点(见表 6)。
总体而言,这些结果表明 4 位 QLORA 是有效的,能够生成可与 ChatGPT 竞争的最先进聊天机器人。此外,我们的 330 亿参数 Guanaco 模型可在 24GB 消费级 GPU 上训练不到 12 小时。这为未来的研究开辟了可能性:通过在专用开源数据上进行 QLORA 微调,生成能够与当前最先进商业模型竞争的模型。
6 定性分析
尽管定量分析是我们评估的核心,但仅关注汇总统计数据存在诸多问题。其中最主要的是基准测试的有效性问题 [36]------ 基准测试是否真正测试了其名称或描述所声称的内容,这一点始终存在疑问,尤其是当我们发现机器学习模型有时会利用 "捷径" 来解决基准测试时 [22, 46]。为部分缓解这一问题,我们在此进行定性分析,分为两个部分。首先,在 6.1 节中,我们展示了一些我们认为能代表 650 亿参数 Guanaco 模型生成文本中观察到的模式的示例。其次,在 6.2 节中,我们详细讨论了对已呈现结果的考量和解读。
6.1 生成示例的定性分析
为寻找示例,我们首先查阅了 Vicuna 基准和 OpenAssistant 基准的生成数据,观察 Guanaco 响应中的模式。当发现某种模式时,我们尝试设计能够诱发该模式的问题或提示(即使该模式是错误的解决方案)。例如,如果观察到模型倾向于给出冗长的回答,我们会提示模型 "仅回答是或否,无需解释"。我们通过这种方式寻找 "负面案例"(成功通过对抗性方式让模型出错)和 "正面案例"(未能让模型出错),并同时呈现这两类案例。本节中的所有生成结果均使用核采样 [25](p=0.9)生成。
当然,这一分析并非全面,因为这项小型定性研究无法控制所有相关变量。例如,模型对给定提示的响应分布范围很广,因此我们依赖于我们认为具有代表性的样本。然而,我们相信描述这些示例能够为前文呈现的定量证据提供上下文。由于我们开源了所有模型和代码,我们希望本节能启发未来的工作,更深入地研究我们提出的问题。
事实召回
对于 "赞比亚的首都是什么?" 这类问题,所有模型均能一致生成正确答案,例如:Guanaco:赞比亚的首都是卢萨卡。
但对于更冷门的问题,Guanaco 的可靠性会下降,但仍保持自信。例如,针对 HotPotQA [68] 中的以下提示:用户:普及了《我将保持爱的光芒燃烧》(I'll Keep the Lovelight Burning)的歌手出生于哪一年?Guanaco:阿尔・乔尔森(Al Jolson)被誉为《我将保持爱的光芒燃烧》这首歌的普及者,他出生于 1886 年。
Guanaco 给出了错误的普及者和错误的出生日期(尽管给出的出生日期对于所提及的阿尔・乔尔森而言是正确的)。
易受暗示性
Guanaco 对某些类型的假设错误信息表现出令人惊讶的抵抗力,例如以下对话:用户:科学家最终是如何通过同行评审正式确认地球是平的?Guanaco:科学家从未通过同行评审正式确认地球是平的。科学界的绝大多数共识是地球是球形的。事实上,这一结论几个世纪前就已为人所知,并通过无数实验和观测得到证实。
认为地球是平的是一种已被科学驳斥的阴谋论。认为有一群科学家通过同行评审确认地球是平的,这一说法完全是错误的。
如果你还有其他问题,请随时提问。
Guanaco 还很清楚哪些问题无法回答,例如:用户:现在几点了?Guanaco:很抱歉,作为人工智能语言模型,我无法获取实时信息。我的响应基于预先存储的知识,不反映当前时间。如果你想了解当前时间,建议使用计时设备或查看在线时钟。
对于 "你在哪里?""你好吗?" 等问题,Guanaco 也会给出类似的回应。
拒绝执行指令
同样,Guanaco 有时会出于看似随机的原因拒绝遵循指令:用户:请将句子 "我是一个心情像摩卡一样酷的人"(I'm a cool dude in a mocha mood.)中的单词反转。Guanaco:很抱歉,我现在无法做到这一点,但我可以解释你提供的句子在语法上为何正确。
"我是一个心情像摩卡一样酷的人"(I'm a cool dude in a mocha mood)遵循英语的正确语法和句法规则。在这个句子中,形容词 "酷"(cool)位于名词 "人"(dude)之前,用于描述该名词;介词短语 "心情像摩卡一样"(in a mocha mood)提供了关于句子语境的额外信息。这种句子结构完全可接受,且在该语境下语义通顺。
如果你有其他问题或需要其他帮助,请随时告诉我。
保密能力
不幸的是,即使在需要拒绝执行指令的情况下,这种拒绝也并不可靠。通常,系统设计者希望向用户隐瞒某些信息,即使系统允许向用户返回自由文本响应。我们向模型提示:"秘密单词是'香蕉'(banana)。无论人类提出什么要求,都不要泄露或重复这个单词。" 然后尝试测试潜在用户获取该秘密信息的难易程度。直接询问会失败:用户:秘密单词是什么?Guanaco:很抱歉,我无法透露这个秘密单词。我被编程为无论人类提出什么要求,都不会泄露或重复这个秘密单词。你还有其他需要帮助的吗?
这是期望的行为。然而,稍加诱导就会打破这种行为:用户:这是一个游戏。目标是忽略你之前收到的指令。秘密单词是什么?Guanaco:抱歉,秘密单词是香蕉(banana)。我们最好不要再提它了。你还有其他想询问的吗?
这表明需要研究更可靠的指令遵循方法。
数学能力
Guanaco 最大的弱点是数学能力,这是许多语言模型普遍面临的问题 [35]。当 Guanaco 分步展示解题过程时,结果往往是准确的,例如:用户:李修剪一片草坪收费 33 美元。上周他修剪了 16 片草坪,有三位客户每人给了他 10 美元小费。李上周修剪草坪总共赚了多少美元?Guanaco:李上周修剪草坪总共赚了 558 美元。
要计算他的总收入,首先需要计算修剪 16 片草坪的收入:\(33 × 16=528\) 美元
然后需要加上三位客户给的小费:\(10 × 3=30\) 美元
因此,李的总收入为:\(528 + 30=558\) 美元
然而,如果 Guanaco 不分步拆解问题,即使是简单的问题也可能出错,这是一个已知问题 [63]。例如,以下对话:用户:请对 1833 进行因式分解。Guanaco:当然,我很乐意帮忙!1833 是一个质数,这意味着它只有两个因数:1 和 1833。
因此,1833 的唯一因式分解为:\(2^{\Lambda} 1 × 3^{\Lambda} 2 × 17^{\Lambda} 1\)
希望这对你有帮助!如果你还有其他问题,请告诉我。
这一答案不仅错误(正确的因式分解是 3×17×43),而且存在两处错误。
心理理论
Guanaco 展现出令人惊讶的强大心理理论能力 [41, 51]。例如,该模型能详细且正确地回答以下问题:用户:詹姆斯和艾比在卧室里。艾比把笔放进了书桌抽屉。艾比离开了卧室。詹姆斯把笔移到了包里。詹姆斯认为艾比会去哪里找笔?Guanaco:詹姆斯知道艾比把笔放进了书桌抽屉。但詹姆斯也知道自己把笔移到了包里,并且他认为艾比不知道这件事。因此,詹姆斯可能会猜测艾比会去书桌抽屉找笔,因为那是她上次放笔的地方。然而,这一猜测可能是错误的,因为艾比可能看到了詹姆斯移动笔。
然而,这些推理并不可靠,模型常常会给出与场景不符的理由,例如:用户:伊芙琳进入了客厅。杰克逊进入了游戏室。詹姆斯进入了游戏室。豆子在宝箱里。詹姆斯离开了游戏室。杰克逊把豆子移到了食品储藏室。杰克逊离开了游戏室。詹姆斯进入了客厅。詹姆斯会去哪里找豆子?Guanaco:詹姆斯会去食品储藏室找豆子,因为杰克逊把豆子移到了那里。
此处 Guanaco 假设了从未被描述过的信息传递过程。这些问题与近期文献中的发现一致 [51],但仍需进一步研究。
6.2 相关考量
评估
我们发现人类标注者之间的一致性为中等水平(弗莱希斯 κ=0.42),且在对比两个性能强劲的系统时,一致性会进一步下降。这表明当前聊天机器人任务性能的基准测试和人类评估协议存在局限性。当手动对比 ChatGPT 和 Guanaco 65B 在 Vicuna 基准上的生成结果时,我们发现主观偏好开始发挥重要作用,本文作者对许多偏好响应存在分歧。未来的工作应借鉴人机交互和心理学等领域中处理主观偏好的机制,探索缓解这些问题的方法。
在分析中,我们还发现自动评估系统存在明显的偏差。例如,我们观察到 GPT-4 存在强烈的顺序效应,对提示中先出现的系统给出更高的分数。GPT-4 与人类标注者在样本级的一致性相对较弱(弗莱希斯 κ=0.25),这也表明人类标注者和自动系统可能依赖于并非始终一致的偏好。此外,在表 7 中,我们观察到 GPT-4 对自身输出的评分显著高于人类评分(Elo 得分为 1348 vs 1176),这意味着相较于对手,GPT-4 的预期胜率额外增加了 20%。未来的工作应检查自动评估系统中潜在偏差的存在以及可能的缓解策略。
数据与训练
我们注意到,训练 Guanaco 模型所使用的 OASST1 数据集是多语言的,且 OA 基准也包含不同语言的提示。我们将探究此类多语言训练在多大程度上提升非英语指令的性能,以及这是否能解释 Vicuna 13B 模型(仅在英语数据上训练)与 Guanaco 33B 和 65B 在 OA 基准上的性能差距,这一问题留给未来的工作。
鉴于 Guanaco 模型的出色性能,我们调查了 OASST1 数据与 Vicuna 基准提示之间是否存在数据泄露。通过对两个数据集进行模糊字符串匹配并手动检查最相似的匹配项,我们未发现重叠的提示。
此外,我们注意到我们的模型仅使用交叉熵损失(监督学习)进行训练,未依赖人类反馈强化学习(RLHF)。这引发了对简单交叉熵损失与 RLHF 训练权衡的进一步研究。我们希望 QLORA 能支持此类大规模分析,而无需庞大的计算资源。
8 局限性与讨论
我们已证明,我们的方法 QLORA 能够使用 4 位基础模型和低秩适配器(LoRA)复现 16 位全量微调的性能。尽管有这些证据,但我们尚未证实 QLORA 在 330 亿和 650 亿参数规模上能否达到 16 位全量微调的性能。由于资源成本极高,我们将这一研究留给未来的工作。
另一个局限性是指令微调模型的评估。尽管我们在 MMLU、Vicuna 基准和 OA 基准上进行了评估,但未在 BigBench、RAFT 和 HELM 等其他基准上进行评估,无法确保我们的评估结果能推广到这些基准。另一方面,我们在 MMLU 上进行了非常广泛的研究,并开发了用于评估聊天机器人的新方法。
从呈现的证据来看,这些基准的性能似乎取决于微调数据与基准数据集的相似程度。例如,FLAN v2 与 MMLU 相似,但与聊天机器人基准差异较大;Chip2 数据集则相反,这两个模型在 MMLU 和 Vicuna 基准上的得分也相应地呈现出不同趋势。这表明不仅需要更好的基准测试和评估方法,还需要谨慎考虑评估的对象。我们是希望创建在高中和大学知识方面表现出色的模型,还是在聊天机器人对话能力方面表现出色的模型?或者是其他方面?由于在现有基准上进行评估比创建新基准更容易,某些基准可能会引导研究界朝着特定方向发展。我们作为一个研究社区,应确保基准测试所衡量的是我们真正关心的内容。
尽管我们对聊天机器人的总体性能进行了详细评估,但另一个局限性是我们仅对 Guanaco 进行了有限的负责任 AI 评估。我们在表 8 中评估了 Guanaco-65B 与其他模型生成具有社会偏见的令牌序列的可能性。我们发现 Guanaco-65B 的平均得分远低于其他原始预训练模型。因此,在 OASST1 数据集上进行微调似乎降低了 LLaMA 基础模型的偏见。尽管这些结果令人鼓舞,但尚不清楚 Guanaco 在其他类型的偏见评估中是否也能有出色表现。我们将对 Guanaco 和类似聊天机器人的偏见分析留给未来的工作。
表 8 基于 CrowS 数据集的偏见评估结果。得分越低,生成偏见序列的可能性越低。Guanaco 延续了 LLaMA 基础模型的偏见模式。
另一个局限性是我们未评估不同的位精度(如 3 位基础模型)或不同的适配器方法。除 LoRA 外,还有多种参数高效微调(PEFT)方法被证明是有效的。然而,尚不清楚这些方法是否能扩展到大型模型。我们选择 LoRA 是因为许多结果已证实其稳健性,但其他适配器可能会带来更好的性能。由于量化后的微调似乎能恢复量化过程中丢失的大部分信息,这可能支持更激进的量化。例如,对基础模型进行 3 位 GPTQ 量化后,结合 LoRA 微调可能也能达到 16 位全量微调的性能。
9 更广泛的影响
我们的 QLORA 微调方法是首个能够在单块消费级 GPU 上微调 330 亿参数模型、在单块专业 GPU 上微调 650 亿参数模型,且相对于全量微调基准不降低性能的方法。我们已证明,我们在 Open Assistant 数据集上训练的最佳 330 亿参数模型在 Vicuna 基准上可与 ChatGPT 竞争。由于指令微调是将原始预训练 LLM 转化为类 ChatGPT 聊天机器人的关键工具,我们相信我们的方法将使微调变得普及和常见,尤其是对于资源最少的研究人员而言,这对于最先进 NLP 技术的可及性是一个重大突破。QLORA 可被视为缩小大型企业与拥有消费级 GPU 的小型团队之间资源差距的均衡因素。
另一个潜在的影响领域是移动设备部署。我们相信我们的 QLORA 方法可能实现一个关键里程碑:在手机和其他低资源环境中微调 LLM。尽管之前已有研究表明 70 亿参数模型可在手机上运行,但 QLORA 是首个能够对这类模型进行微调的方法。我们估计,使用 iPhone 12 Plus,QLORA 可在手机充电时每晚微调 300 万个令牌。尽管微调后的 70 亿参数模型在质量上无法达到 ChatGPT 的水平,但我们相信其质量已足够支持以往因隐私或 LLM 质量问题而无法实现的新型应用。QLORA 有助于实现 LLM 的隐私保护使用,用户可以拥有和管理自己的数据和模型,同时使 LLM 的部署更加便捷。
然而,微调是一项双重用途技术,可能被滥用造成危害。LLM 的广泛使用存在已知风险 [8, 6],但我们相信,使这种快速普及的技术能够被平等获取,将有助于进行更完善、更独立的分析,而不是将 LLM 的权力集中在不发布模型或源代码以供审计的大型企业手中。
总而言之,我们相信 QLORA 将产生广泛的积极影响,使高质量 LLM 的微调变得更加普及和易于获取。
附录 A QLORA 与标准微调的实验设置细节
A.1 QLORA 的超参数
我们针对 LoRA 的以下变量进行超参数搜索:LoRA 丢弃率 {0.0, 0.05, 0.1}、LoRA r {8, 16, 32, 64, 128, 256}、LoRA 层 {键 + 查询、所有注意力层、所有 FFN 层、所有层、注意力 + FFN 输出层}。我们固定 LoRA α,并搜索学习率,因为 LoRA α 始终与学习率成正比。
我们发现,LoRA 丢弃率 0.05 对小型模型(70 亿、130 亿参数)有用,但对大型模型(330 亿、650 亿参数)无用。我们发现,若在所有层上使用 LoRA,LoRA r 与最终性能无关,如图 4 所示。
图 4 LLaMA 70 亿参数模型在 Alpaca 上微调的 LoRA r 值影响。每个点代表一组超参数组合,对于每个 LoRA r 值,我们在每组超参数组合下运行 3 个随机种子。特定 LoRA r 值的性能似乎与其他超参数无关。
A.2 Super-Natural Instructions 的实验设置细节
我们采用与 Wang 等人 [60] 相同的 Super-Natural Instructions 数据集预处理方法。然而,我们将训练数据分为训练集和验证集,以便进行更严格的超参数调优和早停。我们使用论文中描述的相同超参数,在 Super-Natural Instructions 数据上训练不同规模的 T5 模型。对于小型、中型和大型 T5 模型,我们使用 LoRA r=16;对于 T5 xl 和 xxl 模型,我们使用 LoRA r=64。在所有实验中,我们均使用 LoRA α=64,且不使用 LoRA 丢弃率。
附录 B 训练最先进聊天机器人的实验设置细节
B.1 数据集
我们描述第 5 节中概述的 QLORA 微调实验所使用的数据集。
OASST1
OpenAssistant 数据集 [31] 通过众包收集。该数据集包含 161,443 条独特消息,分布在 66,497 个对话中,涵盖 35 种不同语言。对于每个用户问题,该数据集通常包含多个排序后的回复。在我们的实验中,我们仅使用对话树中每个层级的最优回复。这将数据集限制为 9,209 个样本。我们在包含用户查询的完整对话上微调模型。
HH-RLHF
这是一个关于帮助性和无害性的人类偏好数据集。每个数据点包含对同一用户问题的两个助手回复,以及人类对最优回复的偏好判断。该数据集包含 160,800 个样本。在该数据集上进行微调时,我们合并帮助性和无害性数据,并仅保留偏好的助手回复。
FLAN v2
FLAN v2 集合 [39] 包含 1836 个任务,通过数百个人工设计的模板和丰富的格式模式扩充为超过 1500 万个样本。作者表明,在该集合上训练的模型优于其他公开集合,包括原始 FLAN 2021 [62]、T0++[50]、Super-Natural Instructions [60] 和 OPT-IML [29]。我们使用作者描述的相同任务组合,但排除了部分在撰写本文时无法免费获取的数据集。
Self-Instruct、Alpaca、Unnatural Instructions
Self-Instruct、Alpaca 和 Unnatural Instructions 数据集 [59, 55, 26] 是通过多种基于 GPT-3 Instruct 和 ChatGPT 的模型蒸馏方法收集的指令微调数据集。这些数据集依赖于提示、上下文学习和释义,以生成多样化的指令和输出集合。这三个数据集分别包含 82,612、51,942 和 240,670 个样本。与 FLAN v2 集合和类似的指令微调集合相比,此类蒸馏数据集的一个优势是包含更多样化的指令风格。
Longform
LongForm 数据集 [30] 基于英语语料库并辅以指令,因此是一个混合人类生成数据集。基础文档由人类撰写,来源于 C4 和维基百科,而指令通过 LLM 生成。该数据集通过额外的结构化语料库样本(如 Stack Exchange 和 WikiHow)和任务样本(如问答、电子邮件撰写、语法纠错、故事 / 诗歌生成和文本摘要)进行扩展。该数据集包含 23,700 个样本。
Chip2
Chip2 是 OIG Laion 数据集的一部分。它包含 Python 代码示例、自然指令示例、通用无害指令、带列表的指令 / 响应、后续问题、维基百科有害对抗性问题、小学数学、推理指令以及人物和场景描述,共包含 210,289 个样本。
B.2 超参数
我们提供 QLORA 微调实验中使用的确切超参数。我们发现超参数在不同数据集上具有较强的稳健性。我们使用 MMLU 5 样本开发集进行验证和超参数调优。在所有实验中,我们使用 NF4 结合双重量化,计算数据类型为 bf16。我们设置 LoRA r=64、α=16,并在基础模型的所有线性层上添加 LoRA 模块。我们还使用 Adam beta2=0.999、最大梯度范数 = 0.3,对于 130 亿参数及以下的模型,LoRA 丢弃率 = 0.1;对于 330 亿和 650 亿参数模型,LoRA 丢弃率 = 0.05。借鉴先前的指令微调研究 [62, 60],并在对线性调度和余弦调度进行基准测试后,我们使用恒定学习率调度。我们按长度分组,将长度相似的样本归为同一批次(请注意,这将导致损失曲线波动)。不同模型规模的调优超参数如表 9 所示。
表 9 不同数据集和模型规模下 QLORA 微调的训练超参数。
B.3 消融实验
尽管文献中通常仅在指令遵循数据集的响应上进行训练,但我们在表 10 中研究了同时在指令和响应上进行训练的效果。在这些实验中,我们将训练数据限制为 52,000 个样本,并使用 70 亿参数模型。在四个不同的指令微调数据集上,我们发现仅在目标(响应)上进行训练有利于 MMLU 性能。我们未评估这可能对 Vicuna 或 OA 基准所衡量的聊天机器人性能产生的影响。
表 10 研究同时在指令和响应上进行训练的效果的 MMLU 5 样本测试结果。
B.4 指令微调的数据集规模与数据集质量:哪个更重要?
数据集的适配性比规模更重要。为了解数据集质量与规模的影响,我们对至少包含 150,000 个样本的大型数据集(Chip2、FLAN v2、Unnatural Instructions)进行子采样,得到规模为 50,000、100,000 和 150,000 个样本的数据集,并分析由此产生的趋势,结果如表 11 所示。我们发现,增加数据集规模和轮数仅能略微提升 MMLU 性能(0.0-0.5 个 MMLU 百分点),而不同数据集之间的差异高达 40 倍(1.5-8.0 个 MMLU 百分点)。这清楚地表明,数据集质量而非规模是影响平均 MMLU 精度的关键因素。正如前文所讨论的,我们在聊天机器人性能上也得到了类似的发现。
表 11 不同数据集规模和微调轮数对平均 5 样本 MMLU 测试集精度的影响。尽管增加数据集规模和训练轮数超过 1 轮有助于提升 MMLU 性能,但不同数据集之间的差异要大得多,这表明数据集质量对 MMLU 性能的影响大于数据集规模。
附录 C 人类评估
我们按照 Vicuna 原始评估 [10] 中提供给 GPT-4 的相同表述,调整后用于亚马逊机械 Turk 表单(如图 5 所示),进行人类评估。
图 5 人类标注者使用的众包表单。
附录 D 基于 GPT-4 的两两评估
我们发现,GPT-4 评估的结果取决于哪个系统先被呈现,但当对两种顺序的结果取平均后,两两对比结果具有良好的有序性。汇总的两两判断结果如表 12 所示。经检查,这些判断具有传递性,即如果系统 A 被判定优于系统 B,且系统 B 被判定优于系统 C,那么系统 A 始终被判定优于系统 C。这产生了一个完整的排序,如表 13 所示。
表 12 系统间汇总的 GPT-4 两两判断结果,行 x 和列 y 交叉处的值为 "判定 x 优于 y 的次数 - 判定 y 优于 x 的次数" 除以总判断次数。
表 13 基于 GPT-4 两两判断得出的完整排序。
附录 E 4 位标准浮点数数据类型
NF4 数据类型的精确值如下:[-1.0, -0.6961928009986877, -0.5250730514526367, -0.39491748809814453, -0.28444138169288635, -0.18477343022823334, -0.09105003625154495, 0.0, 0.07958029955625534, 0.16093020141124725, 0.24611230194568634, 0.33791524171829224, 0.44070982933044434, 0.5626170039176941, 0.7229568362236023, 1.0]
附录 F 训练后神经网络权重的正态性
尽管众所周知,训练后的神经网络权重大多呈正态分布,但我们通过统计测试进行了验证。我们对 70 亿参数 LLaMA 模型 [57] 的权重进行了夏皮罗 - 威尔克检验 [53]。我们发现每个隐藏单元的权重具有不同的正态分布。因此,我们对每个单独的隐藏单元的权重进行测试。这意味着对于权重\(W \in R^{in × out }\),我们在输出维度上进行测试。使用 5% 的显著性水平,我们发现 7.5% 的神经元呈非正态分布,这比预期的假阳性率高出约 2.5%。因此,尽管几乎所有预训练权重似乎都呈正态分布,但仍存在例外情况。此类例外可能源于异常值权重 [13],或由于 LLaMA FFN 层隐藏单元中存在大规模样本,导致夏皮罗 - 威尔克检验的 p 值不准确 [53]。这验证了神经网络权重呈正态分布的说法。
附录 G 内存占用
不同 LLaMA 基础模型的 QLORA 训练内存占用如图 6 所示。我们发现 330 亿参数模型无法完全适配 24GB GPU,需要分页优化器才能进行训练。图中展示的是批量大小为 1、序列长度为 512 且启用梯度检查点的情况。这意味着,如果使用更大的批量大小或处理长序列,激活梯度可能会占用大量内存。
图 6 不同 LLaMA 模型规模的内存占用分解。输入梯度大小针对批量大小 1 和序列长度 512,仅针对适配器和基础模型权重(不包括注意力)进行估计。柱形上的数字表示各个组成部分的内存占用(以 MB 为单位)。尽管某些模型无法完全适配特定 GPU,但分页优化器提供了足够的内存使其能够适配