Prhub

#47514 [Quantization][INC]Add MXFP8 Linear Support

原始 PR 作者 Zhenzhong1 合并时间 2026-07-27 14:26 文件变更 7 提交数 24 评论 20 代码增减 +322 / -9

执行摘要

为 INC 添加 MXFP8 线性层支持

vLLM 此前通过 INC 框架支持 WNA16 量化,但缺乏对 MXFP8 格式的支持。HuggingFace 上已有基于 llm_compressor 导出的 MXFP8 模型(如 INC4AI/Qwen3-8B-MXFP8-AR),需要 vLLM 能够加载并推理这类模型。此 PR 填补了这一空白,使 vLLM 在 Intel GPU 和 CUDA 等后端上支持 MXFP8 线性层。PR body 中提供了推理示例和测试结果。

建议 INC 量化相关维护者关注 assert 替换为 raise 的潜在风险,并考虑是否在未来的 PR 中统一迁移。新增的 MXFP8 方案设计清晰(Scheme 线性分离),适合作为其他量化格式扩展的参考。

讨论亮点

审查中重点关注以下几个方面:

1) 配置验证采用 assert 的风险:depthfirst-app[bot] 指出 _validate_supported_quantization 使用 assert 在 -O 下会静默失效,建议改用 raise ValueError,但作者保留了 assert。
2) get_min_capability 的硬件含义:xinyu-intel 询问返回 75 的意义,作者解释这是 CUDA compute capability 门控,XPU 平台不依赖此数值。
3) 无关修改剥离:yiliu30 要求还原对 inc_wna16_linear.py 和 inc.py 中与 MXFP8 无关的改动,作者通过后续 commit 剥离了这些更改。

实现拆解

  1. 新增方案路由:创建 INCMxfp8Scheme(inc_mxfp8_scheme.py),通过 can_handle 判断 layer_config.is_mxfp8,并返回 INCLinearMethod(INCMxfp8LinearScheme())。
  2. 新增线性方案:创建 INCMxfp8LinearScheme(inc_mxfp8_linear.py),负责创建 MXFP8 格式的权重和缩放因子,并委托底层 kernel 执行 process_weights_after_loading 和 apply_weights。要求 input_size_per_partition 能被 MXFP8_BLOCK_SIZE(32)整除。
  3. 修改配置类:在 INCConfig(inc.py)中添加 MXFP8 常量(bits=8, group_size=32, dtype=mx_fp 等)和 _validate_supported_quantization 方法,校验 MXFP8 参数组合;新增 _validate_raw_config 验证 activation 配置。扩展 SUPPORTED_DTYPES 和 SUPPORTED_FORMATS。
  4. 注册新方案:在 schemes/__init__.py 导出 INCMxfp8Scheme,在 factory.py 的 scheme_list 中插入该方案,确保 resolve_scheme 能正确选择。
  5. 测试覆盖:在 test_auto_round.py 中添加配置接受/拒绝、方案选择、线性方案委托等单元测试,并将 MXFP8 模型加入集成测试列表(跳过 CPU,仅 CUDA/XPU)。
文件 模块 状态 重要度
vllm/model_executor/layers/quantization/inc/schemes/inc_mxfp8_linear.py 量化层 added 8.92
vllm/model_executor/layers/quantization/inc/schemes/inc_mxfp8_scheme.py 量化路由 added 8.16
vllm/model_executor/layers/quantization/inc/inc.py 量化配置 modified 7.68
tests/quantization/test_auto_round.py 测试 modified 7.04
vllm/model_executor/layers/quantization/inc/schemes/__init__.py 量化路由 modified 4.3
vllm/model_executor/layers/quantization/inc/schemes/factory.py 方案工厂 modified 4.7
vllm/model_executor/layers/quantization/inc/schemes/inc_wna16_linear.py 量化层 modified 3.63

关键符号

INCMxfp8LinearScheme.__init__ INCMxfp8LinearScheme.create_weights INCMxfp8LinearScheme.process_weights_after_loading INCMxfp8LinearScheme.apply_weights INCMxfp8Scheme.can_handle INCMxfp8Scheme.get_linear_method INCConfig._validate_supported_quantization INCConfig._validate_raw_config

关键源码片段

vllm/model_executor/layers/quantization/inc/schemes/inc_mxfp8_scheme.py core-logic

新增方案路由,根据 layer_config.is_mxfp8 选择 MXFP8 线性方法。

# SPDX-License-Identifier: Apache-2.0
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
​
from typing import TYPE_CHECKING
​
from ..inc_linear import INCLinearMethod
from .inc_scheme import INCScheme
​
if TYPE_CHECKING:
    import torch
    from ..config_parser import INCLayerConfig
    from ..inc import INCConfig
​
​
class INCMxfp8Scheme(INCScheme):
    '''MXFP8 方案判断与线性方法工厂。'''
​
    @staticmethod
    def can_handle(layer_config: 'INCLayerConfig') -> bool:
        # 通过 layer_config 的 is_mxfp8 属性判断
        return layer_config.is_mxfp8
​
    def get_linear_method(
        self,
        config: 'INCConfig',
        layer: 'torch.nn.Module',
        prefix: str,
        layer_config: 'INCLayerConfig',
    ):
        # 忽略输入参数,直接返回 MXFP8 线性方法
        del config, layer, prefix, layer_config
        from .inc_mxfp8_linear import INCMxfp8LinearScheme
​
        return INCLinearMethod(INCMxfp8LinearScheme())

评论区精华

配置验证使用 assert 的风险 正确性

`depthfirst-app[bot]` 指出 `_validate_supported_quantization` 使用 `assert` 在 `-O` 下会静默失效,建议改为 `raise ValueError`。

结论:作者保留了 `assert`,审查者未进一步要求修改,最终代码仍用 `assert`。 · 已解决

get_min_capability 的硬件含义 设计

`xinyu-intel` 询问 `get_min_capability` 返回 75 的含义,作者解释这是 CUDA compute capability 门控,XPU 不依赖此数值。

结论:作者解释清楚,无后续修改。 · 已解决

无关修改剥离 other

`yiliu30` 要求还原对 `inc_wna16_linear.py` 和 `inc.py` 中与 MXFP8 无关的改动。

结论:作者通过后续 commit `c54345e` 和 `a58c5de` 剥离了这些更改。 · 已解决

风险与影响

主要风险在于配置验证使用 assert:当 Python 以优化模式运行时,断言被跳过,可能导致无效的 MXFP8 参数(如 group_size != 32)传递到 GPU kernel 引发静默错误或崩溃。此外,apply_weights 完全委托给 init_mxfp8_linear_kernel() 返回的 kernel 对象,如果该 kernel 不支持当前硬件或未正确初始化,会导致运行时错误。由于 kernel 选择逻辑不在本 PR 范围内,外部依赖可能导致平台兼容性问题。

对用户的影响:使用 INC 量化框架且模型为 MXFP8 格式的用户现在可以直接用 vLLM 加载推理(需 CUDA 或 XPU 后端)。添加了约 5 个单元测试和 1 个端到端模型测试,覆盖 MXFP8 配置接受/拒绝、方案选择、线性方案委托等路径。对现有 WNA16 量化路径无影响,INCConfig 的初始化逻辑新增了 _validate_supported_quantization() 调用,增加了少量的构造开销(仅当 data_type 为 mx_fp 时执行断言链)。

配置验证使用 assert 可能导致静默绕过 kernel 初始化依赖外部实现,兼容性风险

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论