Skip to content

[DO NOT MERGE] Copy of #2739 - #2767

Draft
Xiaoyu Z (xiaoyu-work) wants to merge 3 commits into
mainfrom
unstack-gathered-matmul-weights
Draft

Xiaoyu Z (xiaoyu-work) wants to merge 3 commits into
mainfrom
unstack-gathered-matmul-weights

Conversation

@xiaoyu-work

Copy link
Copy Markdown
Member

Describe your changes

Independent copy of #2739: Add UnstackGatheredMatMulWeights graph surgeon for static-unroll MoE.

Copies Iyanuoluwa007/Olive:unstack-gathered-matmul-weights to the same branch name in microsoft/Olive, preserving the original commits. The original PR remains unchanged.

Validation: the copied branch head matches the source PR head. Tests and lintrunner -a were not run for this copy-only operation; the existing code has not been revalidated.

Checklist before requesting a review

  • Add unit tests for this change.
  • Make sure all tests can pass.
  • Update documents if necessary.
  • Lint and apply fixes to your code by running lintrunner -a
  • Is this a user-facing change? If yes, give a description of this change to be included in the release notes.

(Optional) Issue link

Source PR: #2739.

Static-unroll MoE blocks keep all expert weights in one [E, K, N]
initializer and select one expert per MatMul with Gather(W_all, k, axis=0),
optionally followed by Squeeze(axes=[0]). OnnxKQuantQuantization only
quantizes MatMuls whose weight is an initializer, so every per-expert MatMul
stayed in full precision.

The new surgeon replaces gathered weights that use a constant index with 2-D
initializers holding W_all[k], so a following weight-only quantizer picks
them up. Gather/Squeeze nodes and stacked initializers left without
consumers are removed. MatMuls with a runtime expert index are unchanged.

Fixes #2489
Refactor conditions to improve clarity and handle graph inputs.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…dMatMulWeights

- Pick new initializer names from the whole value namespace (initializers,
  graph inputs, graph outputs and node outputs) instead of only initializers,
  so an existing value named like W_all_0 can't collide with the new weight.
- Skip stacked weights, expert indices and Squeeze axes that are graph
  inputs. Those are overridable defaults, so materializing a slice would
  freeze them and inference-time overrides would stop having an effect.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants