【源头活水】白话版Scaling Laws for Precision 解读

科技   2024-12-16 18:04   北京  

沿广注!

本文探讨了模型量化对性能的影响,并提供了关于训练时量化和后训练量化的实用建议。文章强调了在不同训练精度下,如何平衡模型性能和量化损失,以及在实际应用中选择合适的量化策略的重要性。

前置知识:

scaling law:

  • Training Compute-Optimal Large Language Models(Chinchilla scaling law)

太长不看版:

个人讨厌晦涩难懂+无法应用于实际场景的"装逼结论",因此先按照自己的理解帮大家rephrase一下论文的主要发现(in plain language):

首先,这是一篇研究精度(precision)、参数量(parameters)和训练数据量(tokens)之间关系的重要论文。

1. 关于后训练量化(Post-Training Quantization, PTQ):

1.1 基本概念

  • 指的是pretrain以较高精度(bf16)进行,结束后再量化到更低精度(如int4)

1.2 结论1

模型预训练的trained_token/parameter比率越高,预训练结束后,使用PTQ带来的性能下降就越大。这里作者没写明白有误导性!!!实际上这个结论指的是:

  • 我们都知道PTQ一定会带来性能下降(PTQ后,valid loss相比pretrain之后会上升),这个下降可以用

  • 论文提出了预测这个下降值的公式:

  • 其中:

    • 训练数据量D越大,PTQ带来的损失越大(正相关)
    • 参数量N越大,PTQ带来的损失越小(负相关)
    • 量化后的精度Ppost越低,损失增加越多(负指数关系)
    • N: 参数量
    • D: 训练token数
    • : PTQ后的精度
    • : 拟合常数
    • 这个公式告诉我们:
  • 注意,δPTQ还有一种完整形式(section 5) 同时考虑了训练精度和推理精度(继续往后看):

  • 那么如果你必须进行PTQ,那么对于同样参数量大小的模型,被训更多token的模型的 δPTQ 会比喂更少数据的模型要大。但最终loss的绝对数量是多少并不一定,因为即便 δPTQ 这个正数会让loss上升(性能下降),但模型终归被训了更多数据,这么一抵消可能loss还是会下降。相当于两只无形的手(数据量的上升带来的loss下降、PTQ带来的loss上升)在掰手腕;给定模型参数量和固定的精度,具体谁能掰过谁会有一个打平手的cutoff数据量。

  • 举例子,如果你要固定70B模型参数量并pretrain时候采用bf16,并且pretrain后要PTQ到int4。那么采用两种数据量:

    • a) 用10B token训出来模型
    • b) 5B token训出来的模型
  • 那么一定是a)情况的 δPTQ 更大,但最终PTQ结束之后的loss的数值是多少就不一定了。

  • 因此作者也在原文中提到了**there exists an amount of pretraining data beyond which additional data is actively harmful to performance at inference-time (see top-left, Figure 2),也就是给定你要进行PTQ,那么对于你的实验设置,总有一个cutoff的数据量,称之为临界的数据量 Dcrit ,超过这个量后继续训练会导致PTQ后性能下降。这个临界点并不是说超过后训练数据就“有害”,而是说在进行PTQ后,性能的提升可能会被性能的下降所抵消。因此,在实际应用中,需要权衡训练数据量与模型量化后的性能。

  • 论文给出了计算这个临界点的公式:

其他结论
  • 在某些情况下,过度训练(more tokens)反而会让PTQ后的模型性能变差
  • 更大的模型在相同的token/parameter比率下,对PTQ更鲁棒
  • 对于固定大小的数据集,增加模型参数量可以提高PTQ的鲁棒性
  • 这种规律在不同的PTQ方法中都存在(论文验证了GPTQ、AWQ和RTN三种方法)
训练精度的影响
  • 训练时使用较低精度的模型在PTQ时性能下降较小
  • 如果你知道模型最终需要被量化到很低的精度(比如4bit),那么在训练时就使用相对较低的精度(比如8bit)可能比使用高精度(比如16bit)更好,因为这样可以让模型在训练过程中就适应量化噪声。
  • 实话说这个结论初看有点脱裤子放屁,因为太符合直觉了(bushi)。用脚想想就知道【训练用int8然后量化到int4】肯定比【训练用bf16然后量化到int4】要好,原文section 5:models trained in lower precision are more robust to post-train quantization in the sense of incurring lower degradation.
  • 这也解释了为什么一些较新的大语言模型倾向于使用BF16而不是FP32来训练,因为这不仅可以节省计算资源,还可能让模型在后续量化时表现更好

1.3 PTQ造成loss degradation的深入分析

1.3.1 两个竞争效应(section 5)

在分析PTQ对模型性能的影响时,论文发现了两个相互竞争的效应:

  1. Robustification效应
  2. 低精度训练会让模型更适应量化噪声
  3. 这使得模型在后续PTQ时更加鲁棒
  4. 可以理解为模型学会了如何在噪声环境中运作
  5. Overtraining效应
  6. 低精度训练会降低模型的有效参数量(),这意味着模型在相同的数据量下“看起来”参数量更少,从而在PTQ时对参数量化的敏感性增加
  7. 因为 成正比, 较低的Neff理论上会导致更大的性能下降: (section 5这边第一次读还以为写错了)。作者说的 实际上应该参考公式 9 变为 ,随着 的增加, 确实增加, 也就是成正比。说明白点就是低精度训练会下降Neff, 也就是一个 模型的可能有效的参数只有 10 B , 然后 变大, 然后根据section 3 的公式就会造成更大的degradation)
  8. 这个效应与Robustification效应相反

在实践中,Robustification效应通常占主导,这就是为什么低精度训练的模型在PTQ时表现更好。

1.3.2 精度阈值效应

一个重要发现是,当精度低于5-bit时,PTQ带来的性能下降会急剧增加:

  • 在高精度区间(如8-bit以上),D/N比率的增加对性能的影响相对温和
  • 在5-bit以下,即使很小的D/N比率增加也可能导致显著的性能下降
  • 这个发现对实践中选择量化精度有重要指导意义-- 在实际应用中,应避免将模型量化到低于5-bit的精度,除非有特定的需求和相应的优化技术支持
1.3.3 理论解释

论文在附录中提供了两个可能的理论解释:

Sharpness假说

  • 模型在训练过程中会逐渐变得更"sharp"-- 随着训练的进行,模型的损失函数变得更加“尖锐”(sharp),即梯度和Hessian矩阵的特征值增加,这导致模型对参数扰动更加敏感。因此,PTQ带来的参数量化噪声会对尖锐的损失函数产生更大的影响。
  • Sharp的模型对参数扰动更敏感
  • 这种敏感性会随着训练的进行而增加
  • 这解释了为什么过度训练可能导致更大的PTQ降质

分层学习假说

  • 模型通过分层方式学习特征-- 模型通过逐步学习更复杂的特征,这些特征依赖于之前学习的基础特征。量化噪声影响基础特征,会级联地影响到更高层次的复杂特征,从而导致整体性能的下降。
  • 早期学习基础特征,后期学习复杂特征
  • 复杂特征依赖于基础特征的准确性
  • 当基础特征受到量化噪声影响时,会对依赖它们的复杂特征造成级联效应
  • 这解释了为什么训练时间越长,模型对量化越敏感

2. 关于训练时量化(Training-time Quantization)

2.1 基本概念

论文中将训练时量化分为两种情况:

  • 仅量化权重(Quantization-Aware Training, QAT):只将模型的权重量化到低精度,其他部分保持高精度,以适应推理阶段的低精度环境。
  • 全面量化(Low-precision Training):同时量化模型的权重、激活值和注意力计算(即键-值缓存),以减少计算资源需求。

注意:这里的权重指模型中所有线性层(Linear layers)的权重矩阵,包括:

  • Transformer 中的所有投影矩阵(例如 query、key、value 的投影权重);
  • 嵌入层(Embedding layers)权重矩阵;
  • 最终输出层的权重矩阵。

但在论文的实验中未对嵌入层(Embedding layer)进行量化。

量化实现细节:

  • 论文遵循了 FP8 训练的标准规范(Micikevicius et al., 2022);
  • 权重采用 按通道(per-channel) 量化;
  • 激活值采用 按张量(per-tensor) 量化;
  • 对于后训练量化(PTQ),主要针对模型权重进行量化。

2.2 核心发现

权重、激活值和注意力的量化效果是独立且可乘的,这一点非常关键。

论文提出了“有效参数量 Neff effective parameter count)”的概念。简而言之, Neff 代表了模型在低精度下的“真实有效”参数量。在低精度训练时,模型的实际参数量 N会被折减为较低的 Neff ,这有助于评估模型在低精度量化下的性能损失。

基本形式:

完整形式(全面量化):

其中:

  • N:模型的实际参数量;
  • Pw :权重精度;
  • Pa:激活值精度;
  • Pkv :注意力计算精度;
  • γw、γa、γkv :各部分的敏感度系数,反映了模型对不同量化精度的适应性。

举个例子,在相同的计算预算下,有两种方案:

  • a) 使用 16-bit 精度训练较小的模型;
  • b) 使用 8-bit 精度训练较大的模型(参数量约为前者的 2 倍)。

根据论文的 Neff 分析,第二种方案通常更优,因为:

  1. 增加的参数量带来的性能提升超过了精度降低造成的损失;
  2. 8-bit 精度已接近论文中发现的计算最优精度(7-8 bits);
  3. 低精度训练可以在相同的计算预算下处理更多的数据。

最优训练精度的计算:论文发现,在一般情况下,最优的训练精度为 7-8 bits这意味着当前常用的 16-bit(BF16)训练精度其实存在冗余。但如果追求极低精度(例如 4-bit 以下),则需要不成比例地增加模型大小才能维持性能。

但是,如果模型大小被固定(例如受限于硬件资源),情况会有所不同:

  • 此时,最优训练精度会随着训练数据量的增加而提高。具体来说,最优精度与训练数据量和参数量的比值成对数关系,即:

最优精度训练数据量参数量最优精度∝log⁡(训练数据量参数量)(见论文 Section 4.3.3)

2.3 训练成本分析

训练成本的计算公式如下:

其中:

  • C:计算成本;
  • N :模型参数量;
  • D :训练 token 数;
  • P :训练精度;
  • 6/16:标准化系数(基于 Chinchilla 成本模型)。

这意味着什么? 举个例子:假设你的计算预算是固定的,希望训练一个模型,有两种选择:

  • 使用 16-bit 精度训练一个 35B 参数量的模型;
  • 使用 8-bit 精度训练一个 70B 参数量的模型。

根据论文的发现,第二种方案可能更优,因为增加的参数量带来的性能提升超过了精度降低带来的损失。

2.4 实践建议

如果计算预算有限:

  • 优先选择 7-8 bit 的训练精度,并利用节省下来的资源增加模型参数量;
  • 避免使用低于 4-bit 的训练精度,因为这需要大幅增加模型大小才能维持性能(见论文 Section 4.3.2)。

如果模型大小受限:

  • 在需要处理更大量数据时,提高训练精度;
  • 例如,当 token/parameter 比率超过 1000 时,建议使用 8-bit 以上的精度;
  • 在高 token/parameter 比率下,避免使用低于 6-bit 的训练精度(见论文 Section 4.3.3)。

各部分的精度选择:

  • 权重(Weights)在极低精度(3-bit)下仍能保持稳定;
  • 激活值(Activations)注意力计算(KV-cache)在低于 3-bit 时可能会出现不稳定;
  • 这种差异可能与量化方式有关(权重采用按通道量化,激活值采用按张量量化),而不一定是固有特性。

3.限制与未来研究方向

3.1 固定的模型架构

这篇论文采用了固定的Transformer++架构,以便在一个可控的环境中分析精度、参数量和数据量之间的关系。然而,在实际应用中,低精度训练通常会伴随着模型架构的调整。例如,一些先进的低精度训练方法可能会引入特殊的正则化技术或优化策略,以减轻低精度带来的负面影响。因此,论文的结论主要适用于固定架构的情况,尚未在经过优化的低精度架构中进行验证

3.2 计算成本与系统开销

虽然理论上,降低训练精度(比如从16-bit降到8-bit)可以按比例减少计算需求,但在实际操作中,由于系统开销和硬件实现的限制,精度降低所带来的性能提升通常低于理论预期。例如,某些硬件可能无法高效支持极低精度(如4-bit以下)的计算,导致实际的加速效果有限。此外,不同精度下的数据移动和存储优化表现也可能有所不同,这进一步影响了低精度训练的实际效率。

3.3 仅关注验证损失,缺乏下游任务评估

论文主要关注于训练过程中的验证损失(validation loss)作为性能评估指标,而没有对下游任务的具体表现进行评估。尽管验证损失是衡量模型性能的重要指标,但不同任务对模型精度和量化的敏感性可能存在差异

3.4 实验规模的限制

虽然论文中训练了多达17亿(17B)参数的模型,并使用了高达26B tokens的数据集,但这些规模相对较小,与当前最先进的大规模语言模型(如数百亿甚至千亿参数级别)相比仍有差距。因此,论文的scaling law在更大规模模型上的适用性尚未得到验证

4. 量化方法的多样性

这篇论文主要关注于整数类型的量化方法,并通过GPTQ、AWQ和RTN等方法进行了验证。然而,浮点类型的量化方法(如FP8、FP4)在实际应用中也具有重要意义,尤其是在某些硬件平台上具有更好的支持和性能表现。不同量化方法在引入量化噪声和影响模型性能方面可能存在显著差异,因此,未来的研究应涵盖更多种类的量化方法,以全面理解量化对模型性能的影响

5. 数据集和训练策略的单一性

这篇论文使用了Dolma V1.7数据集,并采用了特定的训练策略和超参数设置。不同的数据集和训练策略可能会影响模型对量化的敏感性。例如,某些数据集可能具有更高的复杂性或多样性,导致模型在低精度下表现出不同的鲁棒性。因此,未来的研究应在多样化的数据集和训练配置下进行,以验证缩放规律的普适性

击呗!

人工智能前沿讲习
领先的人工智能知识平台
 最新文章