KEMBAR78
[inductor] Add size, stride, storage_offset to RAIIAtenTensorHandle by aakhundov · Pull Request #110764 · pytorch/pytorch · GitHub
Skip to content

Conversation

@aakhundov
Copy link
Contributor

@aakhundov aakhundov commented Oct 6, 2023

Stack from ghstack (oldest at bottom):

Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like buf123.size() or .stride() or .storage_offset():

pytorch/torch/_inductor/ir.py

Lines 2504 to 2520 in 7cc0020

for i, s in enumerate(self.get_size()):
if s in symbols_to_define:
wrapper.writeline(
f"{wrapper.declare}{s} = {self.get_name()}.size({i}){wrapper.ending}"
)
symbols_to_define.remove(s)
for i, s in enumerate(self.get_stride()):
if s in symbols_to_define:
wrapper.writeline(
f"{wrapper.declare}{s} = {self.get_name()}.stride({i}){wrapper.ending}"
)
symbols_to_define.remove(s)
if (s := self.get_offset()) in symbols_to_define:
wrapper.writeline(
f"{wrapper.declare}{s} = {self.get_name()}.storage_offset(){wrapper.ending}"
)
symbols_to_define.remove(s)

Here we add corresponding methods to the RAIIAtenTensorHandle class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

cc @voznesenskym @penguinwu @EikanWang @jgong5 @Guobing-Chen @XiaobingSuper @zhuhaozhe @blzheng @Xia-Weiwen @wenzhe-nrv @jiayisunx @peterbell10 @ipiszy @yf225 @chenyang78 @kadeng @muchulee8 @ColinPeppler

Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

[ghstack-poisoned]
@pytorch-bot
Copy link

pytorch-bot bot commented Oct 6, 2023

🔗 Helpful Links

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

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

✅ You can merge normally! (3 Unrelated Failures)

As of commit 24f17e4 with merge base 371d8ba (image):

UNSTABLE - The following jobs failed but were likely due to flakiness present on trunk and has been marked as unstable:

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

…sorHandle"

Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

[ghstack-poisoned]
aakhundov added a commit that referenced this pull request Oct 6, 2023
Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

ghstack-source-id: 56f1bd2
Pull Request resolved: #110764
@aakhundov aakhundov added the topic: not user facing topic category label Oct 6, 2023
@aakhundov aakhundov changed the title Add size, stride and storage_offset methods to RAIIAtenTensorHandle [inductor] Add size, stride, storage_offset to RAIIAtenTensorHandle Oct 6, 2023
@aakhundov aakhundov added ciflow/trunk Trigger trunk jobs on your pull request module: inductor ciflow/inductor labels Oct 6, 2023
@chenyang78
Copy link
Contributor

I have a high-level question. We already have API calls like aoti_torch_get_sizes that can be used to implement aoti_torch_get_size, e.g.

int64_t *sizes;
aoti_torch_get_sizes(..., &sizes, ...);
int64_t sz = sizes[d];

So, instead of adding new APIs, I am wondering if we could just code-gen a similar code like above by leveraging the existing APIs. One benefit would be that we end up maintaining a minimal set of interfaces.

@aakhundov
Copy link
Contributor Author

So, instead of adding new APIs, I am wondering if we could just code-gen a similar code like above by leveraging the existing APIs. One benefit would be that we end up maintaining a minimal set of interfaces.

@chenyang78 I agree that reducing the extent of the API is generally good. However, the problem with relying on the existing functions is that it's impossible to do range checking, as they simply provide a pointer to the list of sizes. We've discussed this briefly offline with @desertfire and decided to delegate the range checking (as well as proper error messaging) to ATen ops. And that's the reason for the new functions relying on tensor->size(d) and friends instead of tensor->sizes() as in the pre-existing API. Does this make sense?

@chenyang78
Copy link
Contributor

So, instead of adding new APIs, I am wondering if we could just code-gen a similar code like above by leveraging the existing APIs. One benefit would be that we end up maintaining a minimal set of interfaces.

@chenyang78 I agree that reducing the extent of the API is generally good. However, the problem with relying on the existing functions is that it's impossible to do range checking, as they simply provide a pointer to the list of sizes. We've discussed this briefly offline with @desertfire and decided to delegate the range checking (as well as proper error messaging) to ATen ops. And that's the reason for the new functions relying on tensor->size(d) and friends instead of tensor->sizes() as in the pre-existing API. Does this make sense?

I see. Make sense. Thanks for the clarification.

…sorHandle"

Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

cc voznesenskym penguinwu EikanWang jgong5 Guobing-Chen XiaobingSuper zhuhaozhe blzheng Xia-Weiwen wenzhe-nrv jiayisunx peterbell10 ipiszy yf225 chenyang78 kadeng muchulee8 ColinPeppler

[ghstack-poisoned]
…sorHandle"

Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

cc voznesenskym penguinwu EikanWang jgong5 Guobing-Chen XiaobingSuper zhuhaozhe blzheng Xia-Weiwen wenzhe-nrv jiayisunx peterbell10 ipiszy yf225 chenyang78 kadeng muchulee8 ColinPeppler

[ghstack-poisoned]
@aakhundov aakhundov force-pushed the gh/aakhundov/5/head branch from 9fb36c4 to eae46d9 Compare October 6, 2023 22:25
aakhundov added a commit that referenced this pull request Oct 6, 2023
Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

ghstack-source-id: 56f1bd2
Pull Request resolved: #110764
…sorHandle"

Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

cc voznesenskym penguinwu EikanWang jgong5 Guobing-Chen XiaobingSuper zhuhaozhe blzheng Xia-Weiwen wenzhe-nrv jiayisunx peterbell10 ipiszy yf225 chenyang78 kadeng muchulee8 ColinPeppler

[ghstack-poisoned]
…sorHandle"

Summary: For unbacked SymInts, the C++ wrapper codegen can generate expressions like `buf123.size()` or `.stride()` or `.storage_offset()`:

https://github.com/pytorch/pytorch/blob/7cc0020a80527207a1725e6d21ce7c326668fe0d/torch/_inductor/ir.py#L2504-L2520

Here we add corresponding methods to the `RAIIAtenTensorHandle` class so that the above codegen works in the ABI compatibility mode.

Test Plan: CI + the following PR

Reviewers:

Subscribers:

Tasks:

Tags:

cc voznesenskym penguinwu EikanWang jgong5 Guobing-Chen XiaobingSuper zhuhaozhe blzheng Xia-Weiwen wenzhe-nrv jiayisunx peterbell10 ipiszy yf225 chenyang78 kadeng muchulee8 ColinPeppler

[ghstack-poisoned]
@aakhundov
Copy link
Contributor Author

@pytorchbot merge

@pytorchmergebot
Copy link
Collaborator

Merge started

Your change will be merged once all checks pass (ETA 0-4 Hours).

Learn more about merging in the wiki.

Questions? Feedback? Please reach out to the PyTorch DevX Team

Advanced Debugging
Check the merge workflow status
here

pytorchmergebot pushed a commit that referenced this pull request Oct 7, 2023
Summary: `torch.nonzero` doesn't have inductor lowering (yet). To invoke the operator in AOT Inductor's ABI compatibility mode we need a dedicated shim function.

Test Plan:

```
$ python test/inductor/test_aot_inductor.py -k test_zero_grid_with_unbacked_symbols
...
----------------------------------------------------------------------
Ran 4 tests in 78.650s

OK
```

Reviewers:

Subscribers:

Tasks:

Tags:

Pull Request resolved: #110766
Approved by: https://github.com/chenyang78
ghstack dependencies: #110713, #110745, #110764
@facebook-github-bot facebook-github-bot deleted the gh/aakhundov/5/head branch October 10, 2023 14:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants