Skip to content

量化系统 — 概念

量化方法分类

量化框架架构

核心接口

python
class QuantizeMethodBase(ABC):
    @abstractmethod
    def create_quantized_linear(self, linear):
        """将普通线性层替换为量化版本"""
        ...

    @abstractmethod
    def process_weights_after_loading(self, model):
        """权重加载后处理(如重排、缩放)"""
        ...

主流量化方法详解

FP8 量化

FP8(E4M3/E5M2)是 NVIDIA Hopper (H100) 原生支持的格式:

  • E4M3:用于前向传播(权重和激活)
  • E5M2:用于反向传播(梯度)
  • 几乎无精度损失(相比 FP16)
  • 需要 H100/RTX 4090+ 硬件支持(compute_capability >= 8.9
  • TorchAO 后端现在在初始化时验证 GPU 能力,不支持的设备给出清晰的降级建议

NVFP4 量化

NVFP4 是最新的超低精度格式:

  • W4A4 NVFP4:权重和激活都使用 4-bit 浮点
  • W4A16 NVFP4:权重 4-bit,激活 16-bit(新增混合精度模式)
  • 支持 MoE 模型的融合量化 + dispatch
  • 批量不变式内核消除了 padding 开销

GPTQ

基于 Hessian 近似的后训练量化:

  1. 逐层量化:每层独立处理
  2. 使用校准数据计算 Hessian
  3. 量化每个权重时补偿对未量化权重的影响
  4. 支持 2/3/4/8 bit,通常使用 4 bit

AWQ

激活感知权重量化:

  1. 观察激活值分布,识别重要权重通道
  2. 对重要通道使用更高的缩放因子
  3. 保护对激活值敏感的权重
  4. 通常 4 bit,精度接近 FP16
  5. AWQ-Marlin MoE 现在通过 oracle 层统一处理权重转换,去除了直接调用底层 kernel 的代码

量化对性能的影响

方法显存节省推理加速精度损失
FP8~50%1.5-2×极小
NVFP4 (W4A4)~87%1.5-2.5×
NVFP4 (W4A16)~75%1.3-2×
GPTQ-4bit~75%1.2-1.5×
AWQ-4bit~75%1.3-1.8×
GGUF-Q4~75%取决于硬件中等

量化框架变更

Compressed Tensors 稀疏性(2:4)移除

Compressed Tensors 框架移除了 2:4 稀疏性支持。检测到稀疏配置时将发出 DeprecationWarning。相关删除:

  • CompressedTensors24 scheme 类
  • supports_cutlass_24() 方法
  • sparsity_scheme_mapsparsity_ignore_list 配置字段

AWQ-Marlin 统一到 Oracle

AWQ-Marlin MoE 的权重处理现在委托给 oracle 层的 convert_to_wna16_moe_kernel_format(),去除了直接调用 ops.awq_marlin_moe_repackmarlin_moe_permute_scales 等底层函数的代码。所有 WNA16 格式(AWQ、GPTQ)的权重转换逻辑集中到 oracle/int_wna16.py

权重加载流程

相关概念