当前位置: 首页 > news >正文

解码LLM量化:深入剖析最常见8位与4位核心算法

解码LLM量化:深入剖析8位与4位核心算法

大型语言模型(LLM)的性能日益强大,但其庞大的体积和高昂的计算成本构成了部署的主要障碍。模型量化,作为一种将高精度浮点权重(如16位)映射到低位宽整数(如8位或4位)的技术,已成为应对这一挑战的关键。它旨在不显著牺牲模型性能的前提下,大幅压缩模型大小、降低显存占用并加速推理。

本文将系统性地剖析当前业界主流的8位与4-bit量化算法,重点阐述其核心思想、差异点及实践中的关键注意事项。


一、 坚实的基础:8位(INT8)量化

8位量化技术相对成熟,能够在显著降低资源消耗的同时,保持接近原始模型的性能。其主要挑战在于如何有效处理权重和激活值中的“异常值”(Outliers)。

算法1:Absmax 量化 (Absolute Maximum Quantization)

Absmax量化是一种基础且高效的对称量化方案,也是许多框架中8位量化的起点。

  • 核心思想
    Absmax的核心在于找到权重张量中所有数值的绝对值最大值(absmax),并以此为基准进行线性缩放。它将原始的[-absmax, absmax]浮点数范围,直接映射到[-127, 127]的8位有符号整数范围内。这个absmax值与一个固定的整数范围(127)共同定义了缩放因子(Scale),它是连接浮点世界和整数世界的桥梁。

  • 算法流程

    1. 寻找缩放基准: 对于给定的权重张量W,计算 s = absmax(W)
    2. 计算缩放因子: Scale = s / 127
    3. 量化: W_int8 = round(W / Scale)
    4. 反量化: 在计算时,通过 W_fp16 ≈ W_int8 * Scale 恢复浮点数值。
  • 关键挑战
    Absmax的主要弱点在于对异常值的极端敏感性。若一个张量中绝大多数权重都分布在[-1, 1]区间,但存在一个值为20.0的异常值,那么absmax将为20.0。这会导致缩放因子变得极大,使得[-1, 1]区间内的所有权重都被量化到极少数几个整数上(如-1, 0, 1),从而丢失了大量的精度信息。

算法2:SmoothQuant

SmoothQuant是一种更先进的量化感知(Quantization-Aware)算法,它精准地识别并解决了导致LLM量化性能下降的关键瓶颈——激活值中的异常值。

  • 核心思想
    SmoothQuant的核心在于,矩阵乘法 Y = X * W 的量化误差同时来源于激活值X和权重W。其中,激活值的分布通常比权重更不规则,更容易出现大幅度的异常值。SmoothQuant提出,可以通过一个数学上等价的变换,将激活值的量化“难度”一部分“迁移”给权重。

  • 算法流程

    1. 等价变换: 引入一个可学习的平滑因子s,将矩阵乘法改写为 Y = (X / s) * (s * W)
    2. 难度迁移: 通过优化选择s,使得X' = X / s的数值分布变得更加平滑(异常值被抑制),而W' = s * W的分布虽然有所变化,但仍在易于量化的范围内。
    3. 独立量化: 对处理后、更容易量化的X'W'分别进行标准的8位Absmax量化。
  • 差异点与优势

    特性AbsmaxSmoothQuant
    关注点仅关注权重张量本身。同时关注激活值和权重,识别出激活值是主要矛盾。
    处理方式被动接受权重分布,对异常值无能为力。主动干预,通过数学变换平滑激活值,优化整个计算流。
    性能表现在LLM中遇到激活值异常时,性能下降明显。显著提升了LLM的INT8量化性能,已成为高性能推理的标准。

二、 突破极限:4位(INT4)量化

4位量化能带来极致的模型压缩率,但精度挑战也随之剧增。简单的线性映射在此几乎完全失效,必须采用更复杂的、基于优化的算法。

算法1:GPTQ (Generative Pre-trained Transformer Quantizer)

GPTQ是早期在4位量化领域取得突破性成功的算法,其核心是把量化视为一个误差最小化的优化问题。

  • 核心思想
    GPTQ的目标不是简单地让量化后的权重在数值上逼近原始权重,而是要找到一组4位整数权重W_int4,使得反量化后的权重W'与原始输入X相乘的结果,与原始权重WX相乘的结果误差最小。即 argmin || W*X - W'*X ||

  • 算法流程

    1. 逐层量化: 采用贪心策略,一次只处理模型中的一层,固定其他层不变。
    2. 逐列优化: 在单层权重矩阵内部,逐列进行量化。
    3. 误差补偿: 这是GPTQ的精髓。在量化完第i列后,会计算出产生的量化误差。这个误差将被添加到所有尚未被量化的后续列上。这样,后续列的量化过程就会自动地去“补偿”前面步骤中产生的误差,从而实现全局最优。
    4. 校准数据: 该过程需要一个小的校准数据集来获取代表性的激活值X,以便进行误差计算和优化。
算法2:AWQ (Activation-aware Weight Quantization)

AWQ从一个完全不同的视角出发,它认为并非所有权重都同等重要,应该优先保护那些对模型输出影响最大的权重。

  • 核心思想
    AWQ的观察是,权重的重要性与其对应的激活值幅度高度相关。一个权重即使数值不大,但如果它总是与一个大幅度的激活值相乘,那么它对最终结果的贡献就很大。因此,量化的核心应该是保留这些与显著激活通道相关的权重的精度

  • 算法流程

    1. 识别重要激活: 使用校准数据集,分析并找到那些平均幅度较大的激活通道。
    2. 保护对应权重: 与这些重要激活通道相对应的权重被视为“显著权重”。
    3. 选择性缩放: 引入一个优化的缩放因子,仅对这些显著权重进行缩放,降低其数值范围,从而使其在量化时能被更精确地表示。为了维持数学等价性,对应的激活通道会被相应地放大。
    4. 量化: 对缩放后的权重张量进行4位量化。
  • 差异点与权衡:GPTQ vs. AWQ

    特性GPTQAWQ
    核心哲学误差重建: 通过迭代补偿,让最终输出的误差最小化。显著性保护: 保护与重要激活相关的权重,从源头减少误差。
    量化过程迭代优化,逐列求解,量化过程相对较慢。分析驱动,一次性缩放,量化过程非常快。
    校准数据用于计算和最小化输出误差。用于分析激活值分布,识别重要权重。
    性能表现精度非常高,长期以来是4位量化的黄金标准。精度与GPTQ相当,有时更优,且量化速度和推理性能有优势。

三、 注意事项与总结

  1. 校准数据集的重要性: 对于GPTQ和AWQ这类高级算法,一个虽小但具有代表性的校准数据集是保证量化后模型性能的关键。
  2. 硬件与核函数: 量化的最终推理加速效果,高度依赖于底层硬件是否对低位宽整数运算(如INT4/INT8矩阵乘法)有高效的支持(Kernel)。
  3. 生态系统: bitsandbytes, auto-gptq, auto-awq等库的出现,极大地简化了这些复杂算法的应用,使其能够被广大开发者方便地集成和使用。
http://www.dtcms.com/a/346977.html

相关文章:

  • 【机器学习深度学习】多模态典型任务与应用全景
  • 【Canvas与徽章】中国制造金色玻璃光徽章
  • 计算机视觉工程师业务场景题:智能推荐视频封面
  • 链表-23.合并K个升序链表-力扣(LeetCode)
  • 【机器学习深度学习】模态与多模态的概念
  • ANSI终端色彩控制知识散播(II):封装的层次(Python)——不同的逻辑“一样”的预期
  • 广东省省考备考(第八十四天8.23)——言语、常识(强化训练)
  • d435i深度相机使用
  • 复杂工况漏检率↓79%!陌讯多模态融合算法在智慧能源设备检测的落地实践
  • 大模型如何一招打通,零标注也能SOTA
  • hd 单细胞空间转录组学习路径 stardist
  • 什么是AI宠物
  • ffmpeg 问答系列
  • 《三驾马车:MySQL、MongoDB、Redis对比与融合实战》
  • 可视化-模块1-HTML-01
  • UniAD
  • 电容反射特性
  • Linux netfilter工作原理详解
  • Spring Boot 整合网易163邮箱发送邮件实现找回密码功能
  • 数据库MVCC是什么
  • 每日算法题【链表】:链表的中间节点、返回倒数第k个节点、合并两个有序链表
  • Git checkout 与 Git reset 核心区别解析(分支与版本关联逻辑)
  • C语言初学者笔记【动态内存管理】
  • 在WSL2 Ubuntu中部署FastDFS服务的完整指南
  • Elasticsearch底层存储原理
  • Codeforces Round 1043 (Div. 3)(A-E)
  • 数据库优化提速(三)JSON数据类型在酒店管理系统搜索—仙盟创梦IDE
  • jetson ubuntu 打不开 firefox和chromium浏览器
  • 非线性规划学习笔记
  • SpringBootWeb入门