Validate DQ scale/zero_point shapes before QGemm fusion - #28714
Merged
Conversation
Contributor
Author
|
@fdwr PTAL, thanks. |
Contributor
Author
|
@fdwr Friendly ping. |
fdwr
approved these changes
Jun 9, 2026
Contributor
Author
Thanks for the review. Do I need to find another reviewer or you can help merge this? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description:
This PR adds shape validation in
GemmNodeGroupSelector::Checkto prevent incorrect DQ-Gemm-Q to QGemm fusion when DequantizeLinear nodes have incompatible scale/zero_point shapes.Problem
The QGemm op requires a_zero_point and b_zero_point as mandatory inputs, and only supports scalar or 1D scale/zero_point. Previously, the selector did not validate these constraints, which could lead to runtime crashes when incorrect fusion occurs.
Changes
IsScalarOr1DWithSizeOneOrN()helper to validate that a NodeArg's shape is scalar or 1D with size 1 or N. Rejects unknown shapes to avoid incorrect fusion.GemmNodeGroupSelector::Checkto maintain consistency with QGemm checks.Gemm_NoQGemmFusionWithHighRankScaleZpto verify that DQ nodes with rank-2 scale/zero_point are not fused into QGemm.