校准数据集对模型量化的影响

文摘   2024-11-10 10:27   北京  

本文涉及到的详细测试代码和测试步骤放置于:

https://github.com/xinyuwei-david/david-share.git下的:Deep-Learning/Dataset-affect-for-Quantization

本文中不再赘述代码实现。欢迎给repo点亮Star,您的点赞是作者持续创作的动力。

近年来,大型语言模型(LLM)的迅速发展为自然语言处理领域带来了巨大的突破。然而,这些模型通常需要大量的计算资源和存储空间,特别是在推理阶段。这使得在资源受限的环境中(如消费级 GPU)运行高性能的 LLM 成为一大挑战。

量化技术作为一种有效的模型压缩方法,可以显著减少模型的存储和计算需求。通过将模型的权重和激活值从高精度(如 32 位浮点数)转换为低精度(如 4 位或 8 位整数),我们可以在减少模型尺寸的同时,加速推理过程。例如,4 位量化可以将模型大小减少约三分之二。

一、量化方法概述

 
目前,常用的量化方法主要包括:

  1. 训练后量化(Post-Training Quantization,PTQ):在模型训练完成后进行量化,无需重新训练模型。

  2. 量化感知训练(Quantization-Aware Training,QAT):在模型训练过程中模拟量化操作,使模型适应量化带来的误差。

1.1 常见的训练后量化方法

  • GPTQ(Globally-Optimized Quantization for Transformers):一种针对 Transformer 模型的全局优化量化方法,利用近似二阶优化减少量化误差。GPTQ 高度依赖校准数据集,可能会过拟合到校准数据集上。

  • AWQ(Activation-aware Weight Quantization):一种考虑激活值对权重量化影响的量化方法。AWQ 对校准数据集的依赖性较小,结果在不同的校准数据集上保持相对稳定。

  • AutoRound:由 Intel 提出的基于 SignSGD 优化的自动舍入量化方法。AutoRound 对校准数据集的依赖性更低,表现出更高的鲁棒性。

  • bitsandbytes(bnb)库:提供无需校准数据的量化方法。bnb不使用校验数据仍然维持较高精度,是因为它使用了比其他方法更优越的数据格式(NormalFloat4)。

1.2 常见的量化感知训练方法

  • 标准量化感知训练(Standard QAT):在训练过程中模拟量化,使模型逐渐适应量化误差。需要完整的训练数据集。

  • LSQ(Learned Step Size Quantization):将量化步长设为可学习的参数,通过反向传播优化量化参数。

  • DoReFa-Net:对权重、激活值和梯度进行低比特宽度量化的训练方法。

二、校准数据集的重要性

 
在量化过程中,校准数据集用于帮助量化算法统计权重和激活值的分布,从而确定量化参数(如尺度和零点)。根据量化方法的不同,对校准数据集的依赖程度也不同。

2.1 GPTQ 对校准数据集的依赖

 
GPTQ 在量化过程中,需要通过校准数据集计算 Hessian 矩阵,指导权重的量化。然而,GPTQ 方法可能会过拟合到校准数据集上。如果校准数据集过于特定于某一领域,量化后的模型在其他领域的性能可能会显著下降。因此,GPTQ 不建议使用通用的校准数据集,而是应该使用与模型应用场景和目标任务匹配的校准数据集。如果你根据某个领域过于特定的数据来校准 GPTQ 模型,那么量化模型在其他领域的表现将明显不佳。

2.2 AWQ 和 AutoRound 的鲁棒性

 
与 GPTQ 不同,AWQ 和 AutoRound 对校准数据集的依赖性较小。

  • AWQ:通过考虑激活值的敏感度,减少了对校准数据集的依赖。实验显示,AWQ 的结果在不同的校准数据集上保持相对稳定,即使不精心挑选校准数据集,也能取得良好的性能。

  • AutoRound:表现出更高的鲁棒性,在不同的校准数据集上性能差异很小。在非英语任务中,使用目标语言的校准数据集可能会带来微小的性能提升。

三、校准数据集的选择

3.1 默认的校准数据集

 
量化工具通常会使用默认的校准数据集,如果用户没有指定特定的数据集。例如:

  • NeelNanda/pile-10k:一个包含 10,000 个英文文本段落的数据集,从大型多样化文本数据集 The Pile 中抽取。许多量化工具(如 AutoRound、AWQ)默认使用该数据集。

3.2 是否需要更改默认校准数据集?

 
对于 GPTQ

  • 建议使用与模型应用场景和目标任务匹配的校准数据集,而不是使用通用的默认数据集。

  • 理由:GPTQ 高度依赖校准数据集,如果使用通用数据集,可能导致模型在实际应用中的性能下降。

    对于 AWQ 和 AutoRound

  • 使用默认的校准数据集通常已足够,无需特别挑选。

  • 理由:这些方法对校准数据集的依赖性较低,实验表明即使使用通用数据集,性能也能保持稳定。

3.3 校准数据集的格式和内容

在选择校准数据集时,应确保数据集的格式预处理方式与模型训练数据一致。这可以保证数据处理流程的一致性,避免因格式差异导致的性能问题。另外,校准数据集的内容应与模型的应用场景匹配,确保量化后的模型在实际使用中表现良好。

四、总结

下面这张图片包含两个图表,展示了GPTQ和其他方法在不同校准集上的表现对比。


(a) 左侧图表:

  • 横轴表示校准序列的数量(每个序列包含2048个token)。

  • 纵轴表示Perplexity(困惑度)。

  • 图表显示了GPTQ(绿色)和另一种方法(橙色)的Perplexity随校准序列数量变化的趋势。可以看出,GPTQ的Perplexity随着校准序列数量的增加而下降,但比另一种方法需要更多的校准序列才能达到较低的困惑度。另一种方法在很小的校准集下就能达到较低的困惑度。

    (b) 右侧表格:

  • 表格展示了在不同校准集(Calib)和评估集(Eval)上的困惑度对比。

  • GPTQ和另一种方法在PubMed和Enron两个数据集上的表现进行了比较。

  • 从表格可以看出,GPTQ在校准集和评估集不同时(例如,用Enron校准集评估PubMed)困惑度变化较大,而另一种方法在校准集和评估集不同时困惑度变化较小,这表明另一种方法对校准集分布更具鲁棒性。

    总结:
    (a) 另一种方法需要更小的校准集即可达到较低的困惑度。
    (b) 另一种方法对校准集分布更具鲁棒性。

对于 GPTQ

  • 选择与模型应用场景匹配的校准数据集,确保量化后的模型在目标任务上表现良好。

  • 避免使用通用的默认校准数据集,以防止性能下降。

  • 确保校准数据集的格式与训练数据一致,包括数据预处理步骤,以保证数据一致性。

对于 AWQ 和 AutoRound

  • 使用默认的校准数据集通常足够,无需特别调整。

  • 在处理非英语任务时,如果条件允许,可以使用目标语言的校准数据集,可能会有微小的性能提升。

大魏分享
https://github.com/davidsajare/david-share.git
 最新文章