跳转至

__init__.py — 这是 **QAT(Quantization-Aware Training

模块路径: verl.utils.qat

文件概述

这是 QAT(Quantization-Aware Training,量化感知训练) 模块的入口文件。QAT 允许模型在训练过程中模拟低精度推理(如 FP4),使得训练后的模型可以直接部署为量化模型而不损失太多精度。

该模块支持 NVFP4 格式的 W4A4(权重 4-bit,激活 4-bit)和 W4A16(权重 4-bit,激活 16-bit)两种量化模式。

关键代码讲解

"""
Module Structure:
- core.py: QATConfig, apply_qat, enable_qat_fuse (训练设置)
- linear.py: QATLinear layer with Triton kernels for fake quantization (假量化线性层)
- quantizer.py: QATQuantizer for true quantization + scale computation (真量化器)
- vllm_patch.py: Patches for vLLM dynamic weight loading (vLLM 兼容补丁)

Usage:
    from verl.utils.qat import apply_qat, QATConfig
    config = QATConfig(enable=True, mode="w4a16")
    model = apply_qat(model, config)  # Before FSDP wrapping
"""

from verl.utils.qat.core import QATConfig, apply_qat, enable_qat_fuse, invalidate_all_scales, load_quantization_config
from verl.utils.qat.vllm_patch import apply_qat_patches, manual_process_weights_after_loading, prepare_qat_for_load_weights

导出的接口

接口名 来源 作用
QATConfig core.py QAT 配置数据类
apply_qat core.py 将模型的 Linear 替换为 QATLinear
enable_qat_fuse core.py 启用权重 scale 融合
invalidate_all_scales core.py 清除缓存的 scale(在 optimizer.step 后调用)
apply_qat_patches vllm_patch.py 给 vLLM 打补丁支持动态权重加载
prepare_qat_for_load_weights vllm_patch.py 准备 QAT 模型的权重加载
manual_process_weights_after_loading vllm_patch.py 手动触发权重后处理

与其他模块的关系

  • core.py:训练阶段的 QAT 设置
  • linear.py:包含 Triton 内核的假量化线性层
  • quantizer.py:训练后的真量化器
  • vllm_patch.py:推理阶段的 vLLM 兼容

小结

QAT 模块是 verl 中较为高级的功能,面向需要部署量化模型的场景。它的工作流是:训练时用假量化(QATLinear)模拟低精度效果 → 训练后用真量化(QATQuantizer)转换权重 → 推理时通过 vLLM 补丁加载量化权重。