Skip to content

Serialize NamedData in PTE file - #8835

Merged
lucylq merged 1 commit into
gh/lucylq/48/basefrom
gh/lucylq/48/head
Feb 28, 2025
Merged

Serialize NamedData in PTE file#8835
lucylq merged 1 commit into
gh/lucylq/48/basefrom
gh/lucylq/48/head

Conversation

@lucylq

@lucylqlucylq commented Feb 28, 2025

Copy link
Copy Markdown
Contributor

Stack from ghstack (oldest at bottom):

  1. Serialize NamedData in PTE file
  2. Add NamedDataStore to EdgeProgramManager

Serializing NamedData is slightly different to constant/delegate data as each segment comes with its own alignment.

An example:
Given NamedData = {"key": data}. Data is 250 bytes.

  • BackendA requires data with alignment=3
  • BackendB requires data with alignment=4

Then, data0 should be serialized with alignment of lcm(3, 4) = 12

At serialization, ExecuTorch has a 'segment_alignment' that defaults to 128. Data is now serialized to lcm(12, 128) = 384.

Inside the DataSegment, we want to store the original size of the data (250). The offset of the subsequent DataSegment would be 384 bytes after the start of this one.

Design
Introduce a new dataclass 'AlignedData' that stores the buffer and any alignment that's required. This is used when assembling Program.segments to ensure we get lcm(buffer_alignment, segment_alignment).

Note: The default segment_alignment can be overridden inside 'ExecutorchBackendConfig'.

Differential Revision: D69764150

1. Serialize NamedData in PTE file
2. Add NamedDataStore to EdgeProgramManager
---
Serializing NamedData is slightly different to constant/delegate data as each segment comes with its own alignment.
**An example:**
Given NamedData = {"key": data}. Data is 250 bytes.
- BackendA requires data with alignment=3
- BackendB requires data with alignment=4
Then, data0 should be serialized with alignment of lcm(3, 4) = 12
At serialization, ExecuTorch has a 'segment_alignment' that defaults to 128. Data is now serialized to lcm(12, 128) = 384.
Inside the DataSegment, we want to store the original size of the data (250). The offset of the subsequent DataSegment would be 384 bytes after the start of this one.
**Design**
Introduce a new dataclass 'AlignedData' that stores the buffer and any alignment that's required. This is used when assembling Program.segments to ensure we get lcm(buffer_alignment, segment_alignment).
Note: The default segment_alignment can be overridden inside 'ExecutorchBackendConfig'.
Differential Revision: [D69764150](https://our.internmc.facebook.com/intern/diff/D69764150/)
[ghstack-poisoned]
@pytorch-bot

pytorch-botBot commented Feb 28, 2025

Copy link
Copy Markdown

🔗 Helpful Links

🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/8835

Note: Links to docs will display an error until the docs builds have been completed.

❌ 1 Cancelled Job

As of commit 521a5c8 with merge base 4df0ade (image):

CANCELLED JOB - The following job was cancelled. Please retry:

This comment was automatically generated by Dr. CI and updates every 15 minutes.

@facebook-github-botfacebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Feb 28, 2025
@facebook-github-bot

Copy link
Copy Markdown
Contributor

This pull request was exported from Phabricator. Differential Revision: D69764150

@lucylqlucylq added the release notes: exir Changes to any dialects and passes on these dialects, such as memory planning label Feb 28, 2025
@lucylq
lucylq merged commit f35422c into gh/lucylq/48/baseFeb 28, 2025
@lucylq
lucylq deleted the gh/lucylq/48/head branch February 28, 2025 21:41
lucylq added a commit that referenced this pull request Feb 28, 2025
1. Serialize NamedData in PTE file
2. Add NamedDataStore to EdgeProgramManager
---
Serializing NamedData is slightly different to constant/delegate data as each segment comes with its own alignment.
**An example:**
Given NamedData = {"key": data}. Data is 250 bytes.
- BackendA requires data with alignment=3
- BackendB requires data with alignment=4
Then, data0 should be serialized with alignment of lcm(3, 4) = 12
At serialization, ExecuTorch has a 'segment_alignment' that defaults to 128. Data is now serialized to lcm(12, 128) = 384.
Inside the DataSegment, we want to store the original size of the data (250). The offset of the subsequent DataSegment would be 384 bytes after the start of this one.
**Design**
Introduce a new dataclass 'AlignedData' that stores the buffer and any alignment that's required. This is used when assembling Program.segments to ensure we get lcm(buffer_alignment, segment_alignment).
Note: The default segment_alignment can be overridden inside 'ExecutorchBackendConfig'.
Differential Revision: [D69764150](https://our.internmc.facebook.com/intern/diff/D69764150/)
ghstack-source-id: 269030449
Pull Request resolved: #8835
Co-authored-by: lucylq <lfq@meta.com>
kedarnath03 pushed a commit to kedarnath03/executorch that referenced this pull request Jun 25, 2025
1. Serialize NamedData in PTE file
2. Add NamedDataStore to EdgeProgramManager
---
Serializing NamedData is slightly different to constant/delegate data as each segment comes with its own alignment.
**An example:**
Given NamedData = {"key": data}. Data is 250 bytes.
- BackendA requires data with alignment=3
- BackendB requires data with alignment=4
Then, data0 should be serialized with alignment of lcm(3, 4) = 12
At serialization, ExecuTorch has a 'segment_alignment' that defaults to 128. Data is now serialized to lcm(12, 128) = 384.
Inside the DataSegment, we want to store the original size of the data (250). The offset of the subsequent DataSegment would be 384 bytes after the start of this one.
**Design**
Introduce a new dataclass 'AlignedData' that stores the buffer and any alignment that's required. This is used when assembling Program.segments to ensure we get lcm(buffer_alignment, segment_alignment).
Note: The default segment_alignment can be overridden inside 'ExecutorchBackendConfig'.
Pull Request resolved: pytorch/executorch#8835
Internal:
<< DO NOT EDIT BELOW THIS LINE >>
**GitHub Author**: pytorchbot <soumith+bot@pytorch.org>
**GitHub Repo**: [pytorch/executorch](https://github.com/pytorch/executorch)
**GitHub Pull Request**: [#8835](pytorch/executorch#8835)
Initially generated by: https://www.internalfb.com/intern/sandcastle/job/18014400207802303/
This was imported as part of a Diff Train.
Please review this as soon as possible. Since it is a direct copy of a commit on
GitHub, there shouldn't be much to do.
diff-train-source-id: 314ab18
Co-authored-by: lucylq <lfq@meta.com>
Differential Revision: [D69764150](https://our.internmc.facebook.com/intern/diff/D69764150/)
ghstack-source-id: 269082799
kedarnath03 pushed a commit to kedarnath03/executorch that referenced this pull request Jun 25, 2025
1. Serialize NamedData in PTE file
2. Add NamedDataStore to EdgeProgramManager
---
Serializing NamedData is slightly different to constant/delegate data as each segment comes with its own alignment.
**An example:**
Given NamedData = {"key": data}. Data is 250 bytes.
- BackendA requires data with alignment=3
- BackendB requires data with alignment=4
Then, data0 should be serialized with alignment of lcm(3, 4) = 12
At serialization, ExecuTorch has a 'segment_alignment' that defaults to 128. Data is now serialized to lcm(12, 128) = 384.
Inside the DataSegment, we want to store the original size of the data (250). The offset of the subsequent DataSegment would be 384 bytes after the start of this one.
**Design**
Introduce a new dataclass 'AlignedData' that stores the buffer and any alignment that's required. This is used when assembling Program.segments to ensure we get lcm(buffer_alignment, segment_alignment).
Note: The default segment_alignment can be overridden inside 'ExecutorchBackendConfig'.
Differential Revision: [D69764150](https://our.internmc.facebook.com/intern/diff/D69764150/)
ghstack-source-id: 269030449
Pull Request resolved: pytorch/executorch#8835
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA SignedThis label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.fb-exportedrelease notes: exirChanges to any dialects and passes on these dialects, such as memory planning

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@lucylq@facebook-github-bot@mcr229