Introduce PTEFile class#15800
Conversation
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/15800
Note: Links to docs will display an error until the docs builds have been completed. ❌ 6 New Failures, 2 Unrelated FailuresAs of commit 6c8e9e4 with merge base b1e3e28 ( NEW FAILURES - The following jobs have failed:
FLAKY - The following job failed but was likely due to flakiness present on trunk:
BROKEN TRUNK - The following job failed but was 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
|
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
zingo
left a comment
There was a problem hiding this comment.
It might be nice it bundleIO BPTE files could be mixed into this in some way and handled similarly.
@zingo thanks for the suggestion - could you comment a bit more on what you're looking for? |
Im thinking the it might be god to have if you made tools parsing the different files. As Im not writing those kind of tools right now Im not sure its fully applicable but I feel the bpte are sometimes forgotten or need special handling. |
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
Pull Request resolved: #15800 PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. ghstack-source-id: 322859321 @exported-using-ghexport Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/)
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
There was a problem hiding this comment.
Pull Request Overview
This PR introduces a new PTEFile class to wrap together the components needed for PTE (PyTorch Edge) file serialization and deserialization: the program, mutable data, and named data. This is a breaking API change that updates deserialize_pte_binary() to return a PTEFile instead of a Program.
Key Changes:
- Introduces
PTEFiledataclass to encapsulateProgram, mutable data segments, and named data - Refactors segment restoration logic by extracting
_restore_constant_segment()function - Updates
deserialize_pte_binary()return type fromProgramtoPTEFile - Updates all call sites to access
.programproperty from the returnedPTEFileobject
Reviewed Changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| exir/_serialize/_program.py | Core implementation: adds PTEFile class, refactors _restore_constant_segment(), updates _restore_segments() and deserialize_pte_binary() return types to support mutable and named data extraction |
| exir/_serialize/init.py | Exports the new PTEFile class as _PTEFile |
| exir/_serialize/test/test_program.py | Updates tests to handle PTEFile return type, adds helper methods _check_named_data_entries() and _check_named_data_store_output() for validation, adds roundtrip serialization tests |
| exir/emit/test/test_emit.py | Updates test to access .program from deserialized PTEFile |
| examples/qualcomm/oss_scripts/llama/decoder_utils.py | Updates to access .program from deserialize_pte_binary() result |
| codegen/tools/gen_ops_def.py | Updates to access .program from deserialize_pte_binary() result |
| backends/qualcomm/utils/utils.py | Updates to access .program from deserialize_pte_binary() result |
| backends/cadence/runtime/runtime.py | Updates to access .program from nested deserialize_pte_binary() result |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
Pull Request resolved: #15800 PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. ghstack-source-id: 323865077 @exported-using-ghexport Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/)
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
Pull Request resolved: #15800 PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. ghstack-source-id: 323871061 @exported-using-ghexport Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/)
PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) [ghstack-poisoned]
Pull Request resolved: #15800 PTEFile class holds the components of a PTE file: the program, mutable constants and named data. Currently, the `program` definition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into the `program` concept. Now, segment data is included in the PTEFile class. ghstack-source-id: 323871061 @exported-using-ghexport Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/)
e6c3a01
into
gh/lucylq/125/base
This PR was created by the merge bot to help merge the original PR into the main branch. ghstack PR number: #15800 by @lucylq ^ Please use this as the source of truth for the PR details, comments, and reviews ghstack PR base: https://github.com/pytorch/executorch/tree/gh/lucylq/125/base ghstack PR head: https://github.com/pytorch/executorch/tree/gh/lucylq/125/head Merge bot PR base: https://github.com/pytorch/executorch/tree/main Merge bot PR head: https://github.com/pytorch/executorch/tree/gh/lucylq/125/orig Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) @diff-train-skip-merge Co-authored-by: lucylq <lfq@meta.com>
This PR was created by the merge bot to help merge the original PR into the main branch. ghstack PR number: pytorch#15800 by @lucylq ^ Please use this as the source of truth for the PR details, comments, and reviews ghstack PR base: https://github.com/pytorch/executorch/tree/gh/lucylq/125/base ghstack PR head: https://github.com/pytorch/executorch/tree/gh/lucylq/125/head Merge bot PR base: https://github.com/pytorch/executorch/tree/main Merge bot PR head: https://github.com/pytorch/executorch/tree/gh/lucylq/125/orig Differential Revision: [D86814175](https://our.internmc.facebook.com/intern/diff/D86814175/) @diff-train-skip-merge Co-authored-by: lucylq <lfq@meta.com>
Stack from ghstack (oldest at bottom):
PTEFile class holds the components of a PTE file: the program, mutable constants and named data.
Currently, the
programdefinition does not contain mutable constants and named data; they are always stored in segments and not inline. This means when we deserialize, they are lost, because we only deserialize into theprogramconcept.Now, segment data is included in the PTEFile class.
Differential Revision: D86814175