Skip to content

[RFC]: Intel Quantization Support Roadmap (H1 2026)Β #37979

Description

@yiliu30

Status

Scheme Status

  • πŸ™‹ help wanted
Scheme Module Intel GPU CPU
wNa16 INT (W4A16) Linear βœ… Merged #37986 @yiliu30 auto_round:auto_gptq;
βœ… Merged #43404 @Liangliang-Ma auto_round:auto_awq
βœ… Merged #38192 @Zhenzhong1
wNa16 INT (W4A16, ARK) Linear βœ… Merged #39778 @Zhenzhong1 βœ… Merged #39778 @Zhenzhong1
wNa16 INT (W4A16) MoE βœ… Merged #47124 @lkk12014402
w4a4 MXFP4 Linear βœ… Merged #47124 @lkk12014402
w8a8 MXFP8 Linear βœ… Merged #47514 @Zhenzhong1
w8a8 FP8 Linear WIP #47434 @Zhenzhong1
w4a4 MXFP4 MoE βœ… Merged #47124 @lkk12014402
w8a8 MXFP8 MoE Planed @jl9876
w8a8 FP8 MoE πŸ™‹
wNa16 INT (W2A16) Linear βœ… Merged #47521 @Zhenzhong1

Architectural Cleanup (Done)

#40601 @yiliu30


Original RFC

Related RFCs

Motivation

Previously, we merged auto_round.py into inc.py as the unified Intel quantization backend. The vllm-xpu-kernels replacement for IPEX is a work in progress. This H1 2026 roadmap covers completing the consolidation, migrating from IPEX to vllm-xpu-kernels, and extending quantization scheme coverage on Intel CPU and XPU platforms.

Goals

  1. Broad scheme coverage β€” support the quantization formats that matter for Intel hardware (wNa16 INT, w8a16 FP8), for both Linear and MoE layers, on both XPU and CPU.
  2. Architectural cleanup β€” decouple the quant_method dispatch logic from INCConfig so INC acts purely as a config translator, not a kernel router.

1. Extend Quantization Scheme Coverage

Expand Intel platform support for the quantization schemes needed by production workloads.

1a. wNa16 (INT) β€” Weight-Only Integer Quantization

  • XPU: Linear (W4A16), MoE (W4A16)
  • CPU: Linear (W4A16), MoE (W4A16)

1b. w8a16 (FP8) β€” FP8 Weight-Only Quantization

  • XPU: Linear (W8A16 FP8), MoE (W8A16 FP8)
  • CPU: Linear (W8A16 FP8), MoE (W8A16 FP8)

Note: Some schemes may depend on kernel readiness.

2. Architectural Cleanup

Decouple the quant_method dispatch logic from INCConfig. Today, INCConfig.get_quant_method() contains per-backend routing that duplicates logic already in GPTQ/AWQ/Marlin configs:

get_quant_method()
β”œβ”€β”€ is_cpu/is_xpu/ipex?  β†’ apply_ipex_quant_layer()   # dead code
β”œβ”€β”€ gptq format?         β†’ apply_gptq_quant_layer()    # duplicates GPTQConfig
└── awq format?          β†’ apply_awq_quant_layer()     # duplicates AWQConfig

Proposed Refactoring

Replace the monolithic get_quant_method() with a two-level dispatch architecture, inspired by the compressed-tensors design:

Level 1 β€” Module-type method (AutoRoundQuantLinearMethod, AutoRoundMoEMethod):
Implements the vLLM method interface (LinearMethodBase / FusedMoEMethodBase). A static factory (get_method() / get_moe_method()) resolves the per-layer quantization scheme and delegates to the correct Level 2 impl.

Level 2 β€” Scheme-specific impl (e.g. AutoRoundWNA16LinearImpl, AutoRoundFP8LinearImpl):
Implements an abstract AutoRoundQuantImpl base class that defines create_weights(), process_weights_after_loading(), and apply_weights(). Each impl owns a single quantization scheme and its kernel calls.

INCConfig.get_quant_method(layer, prefix)
β”‚
β”œβ”€β”€ LinearBase  β†’ AutoRoundQuantLinearMethod.get_method(config, layer, prefix)
β”‚                   β”œβ”€β”€ wNa16 INT  β†’ AutoRoundWNA16LinearImpl
β”‚                   └── w8a16 FP8  β†’ AutoRoundFP8LinearImpl
β”‚
└── FusedMoE   β†’ AutoRoundMoEMethod.get_moe_method(config, layer, prefix)
                    β”œβ”€β”€ wNa16 INT   β†’ AutoRoundWNA16MoEImpl
                    └── w8a16 FP8   β†’ AutoRoundFP8MoEImpl

Feedback Period.

Please comment on the proposal or suggest alternatives. If there are no strong objections, we will proceed with the timeline above and submit implementation PRs. Thanks!

CC List.

cc @hshen14 @thuang6 @wenhuach21 @Zhenzhong1 @jikunshang @xinyu-intel @xuechendi
cc @robertgshaw2-redhat

Any Other Things.

No response

Before submitting a new issue...

  • Make sure you already searched for relevant issues, and asked the chatbot living at the bottom right corner of the documentation page, which can answer lots of frequently asked questions.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions