Appearance
量化系统 — 概念
量化方法分类
量化框架架构
核心接口
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 近似的后训练量化:
- 逐层量化:每层独立处理
- 使用校准数据计算 Hessian
- 量化每个权重时补偿对未量化权重的影响
- 支持 2/3/4/8 bit,通常使用 4 bit
AWQ
激活感知权重量化:
- 观察激活值分布,识别重要权重通道
- 对重要通道使用更高的缩放因子
- 保护对激活值敏感的权重
- 通常 4 bit,精度接近 FP16
- 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。相关删除:
CompressedTensors24scheme 类supports_cutlass_24()方法sparsity_scheme_map和sparsity_ignore_list配置字段
AWQ-Marlin 统一到 Oracle
AWQ-Marlin MoE 的权重处理现在委托给 oracle 层的 convert_to_wna16_moe_kernel_format(),去除了直接调用 ops.awq_marlin_moe_repack、marlin_moe_permute_scales 等底层函数的代码。所有 WNA16 格式(AWQ、GPTQ)的权重转换逻辑集中到 oracle/int_wna16.py。
权重加载流程
相关概念
- MoE — MoE 模型也可以使用量化
- Tensor Parallelism — 量化与张量并行的兼容
- torch compile — 编译优化与量化的协同