本文涉及到的详细测试代码和测试步骤放置于:
https://github.com/xinyuwei-david/david-share.git下的:Deep-Learning/Dataset-affect-for-Quantization
本文中不再赘述代码实现。欢迎给repo点亮Star,您的点赞是作者持续创作的动力。
近年来,大型语言模型(LLM)的迅速发展为自然语言处理领域带来了巨大的突破。然而,这些模型通常需要大量的计算资源和存储空间,特别是在推理阶段。这使得在资源受限的环境中(如消费级 GPU)运行高性能的 LLM 成为一大挑战。
量化技术作为一种有效的模型压缩方法,可以显著减少模型的存储和计算需求。通过将模型的权重和激活值从高精度(如 32 位浮点数)转换为低精度(如 4 位或 8 位整数),我们可以在减少模型尺寸的同时,加速推理过程。例如,4 位量化可以将模型大小减少约三分之二。
一、量化方法概述
目前,常用的量化方法主要包括:
训练后量化(Post-Training Quantization,PTQ):在模型训练完成后进行量化,无需重新训练模型。
量化感知训练(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
使用默认的校准数据集通常足够,无需特别调整。
在处理非英语任务时,如果条件允许,可以使用目标语言的校准数据集,可能会有微小的性能提升。