Skip to content

Add weight sharing and support for AMD (Vitis AI) - #1305

Open
Supreet Singh Palne (spalne) wants to merge 5 commits into
mainfrom
user/spalne/NPU
Open

Add weight sharing and support for AMD (Vitis AI)#1305
Supreet Singh Palne (spalne) wants to merge 5 commits into
mainfrom
user/spalne/NPU

Conversation

@spalne

Copy link
Copy Markdown
Contributor

Weight sharing for the decoder — Enables the Qwen3 decoder's context (prefill) and iterator (decode) stages to be compiled through a single shared EP context. Since both stages derive from the same weights, they now emit one shared weight .bin referenced by both graphs instead of duplicating the weights per stage reducing on disk bundle size and load-time memory. The grouping logic is execution-provider-agnostic, so it applies automatically to QNN, VitisAI, and OpenVINO.

Adds VitisAI as a supported execution provider for the Qwen3 transformer (context/iterator) stages, alongside the existing QNN. Building with now emits the correct per-stage session_options into genai_config.json, routing inference to the AMD NPU via the waic_target_vaiml_cpp_me VAIML C++ backend.

@spalne
Supreet Singh Palne (spalne) marked this pull request as ready for review August 13, 2026 15:54
@spalne
Supreet Singh Palne (spalne) requested a review from a team as a code owner August 13, 2026 15:54

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found two deterministic unit-test regressions in the current PR head.

assert self._context_length is not None, "_new_generator called before load()"
max_length = min(prompt_len + cfg.max_new_tokens, self._context_length)
max_length = (
self._context_length

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes the existing decoder-pipeline test test_max_length_is_prompt_plus_max_new_tokens receive max_length=131072 instead of 69, so the unit test now fails deterministically. Please update the affected test/behavior contract together with this change.

assert itr_opts is not None
vitisai_opts = ctx_opts["provider_options"][0]["vitisai"]
assert vitisai_opts["target"] == "waic_target_vaiml_cpp_me"
assert vitisai_opts["xmc_runner_config"] == 1

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vitisai_stage_session_options() emits the provider option as the string "1", so this assertion fails ("1" != 1); the no_linear_slice assertion below has the same mismatch. Please align both expectations with the emitted string values.

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