Fix output ordering in lowered modules to prevent spec violation error#17750
Fix output ordering in lowered modules to prevent spec violation error#17750
Conversation
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/17750
Note: Links to docs will display an error until the docs builds have been completed. ❌ 1 New Failure, 1 Pending, 2 Unrelated FailuresAs of commit 6e2fd3b with merge base 1f4ad07 ( NEW FAILURE - The following job has failed:
BROKEN TRUNK - The following jobs 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. |
This PR needs a
|
When the ExecuTorch partitioner creates submodules from a partitioned graph, _get_new_signature builds output specs by iterating the submodule's output tuple in graph order. This can produce output specs where BUFFER_MUTATION and USER_OUTPUT kinds are interleaved. The ExportedProgram verifier expects all mutation outputs to precede user outputs ([buffer_mutations..., user_outputs...]), and a misordered tuple causes a SpecViolationError.
This PR adds arrange_graph_outputs, which reorders the submodule's output tuple and output specs so that all mutation outputs (BUFFER_MUTATION, USER_INPUT_MUTATION) come before USER_OUTPUT outputs. It also remaps getitem indices on the parent graph's call_module node so the parent continues to extract the correct values after reordering.
Changes
exir/lowered_backend_module.py
Added arrange_graph_outputs() function that:
Test plan:
Existing CI + new unit test