__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 补丁加载量化权重。