Qualcomm AI Engine Direct - Preserve partition metadata on single-output delegate getitem nodes - #20805
Conversation
The single-output path in `create_submodule_from_nodes` copied only "val" onto the manually-built getitem, dropping other partition meta (e.g. QNN's q_tensor_io tag) that the multi-output path keeps via propagate_meta, leaving backend IO-tagging passes with wrong delegate dtype/spec. Fix by propagating full meta then dropping nn_module_stack/source_fn_stack, matching the multi-output path.
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/20805
Note: Links to docs will display an error until the docs builds have been completed. ❗ 1 Active SEVsThere are 1 currently active SEVs. If your PR is affected, please view them below: ✅ You can merge normally! (1 Unrelated Failure)As of commit 3b99a81 with merge base 2265ab8 ( BROKEN TRUNK - The following job failed but were present on the merge base:👉 Rebase onto the `viable/strict` branch to avoid these failures
This comment was automatically generated by Dr. CI and updates every 15 minutes. |
|
@psiddh @larryliu0820 @JacobSzwejbka Hi, What's happening and Root causeWe use TagQuantIO Pass to tag the partition input/output with single-output and multi-output take two different paths:
FixBring the single-output branch in line with multi-output: use
QuestionI wanted to check with you, since you have more historical background here, was the single-output branch only copying Thanks so much for taking a look!! |
|
@pytorchbot label "release notes: qualcomm" |
|
the fix is in generic exir code that runs for every backend, but the restored key has no backend users outside QNN, So iI feel its a safe fix,The only thing missing I feel is a regression test so a future refactor can't silently drop q_tensor_io again. Can you do it in a follow up PR ? |
Thanks for the feedback! I’ll add a regression test in a follow-up PR. |


Summary
The single-output path in
create_submodule_from_nodescopied only "val" onto the manually-built getitem, dropping other partition meta (e.g. QNN'sq_tensor_iotag) that the multi-output path keeps viapropagate_meta, leaving backend IO-tagging passes with wrong delegatedtype/spec.Fix by propagating full meta then dropping
nn_module_stack/source_fn_stack, matching the multi-output path.