Skip to content

[ez][release blocker fix] Insert linalg_vector_norm into decomp table used for Edge export #9999

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 10, 2025

Conversation

pytorchbot
Copy link
Collaborator

Summary:

Context

Addresses this release blocker issue. Some models cannot export because they use linalg_vector_norm which is not currently an ATen operator.

I initially tried adding the op to the core decomp table, but the decomp is not passing pytorch correctness tests. Please see pytorch/pytorch#150241 for more details.

Changes

Since we currently cannot include the op in PyTorch's decomp table, instead we can insert the op into the edge decomp table directly.

This PR is a simple change to add linalg_vector_norm directly to the edge decomp table.

Test Plan:
Tested exporting and running a model with the linalg_vector_norm op via the following script.

import torch
from executorch.exir import to_edge_transform_and_lower, EdgeCompileConfig
from torch.export import Dim, export

from executorch.extension.pybindings.portable_lib import (  # @manual
    _load_for_executorch_from_buffer,
)

class Model(torch.nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self, x):
        return torch.linalg.vector_norm(x, 2)

model = Model()
inputs = (torch.randn(1,1,16,16),)
dynamic_shapes = {
    "x": {
        2: Dim("h", min=16, max=1024),
        3: Dim("w", min=16, max=1024),
    }
}

exported_program = export(model, inputs, dynamic_shapes=dynamic_shapes)
executorch_program = to_edge_transform_and_lower(
    exported_program,
    compile_config=EdgeCompileConfig(_check_ir_validity=False),
).to_executorch()


executorch_module = _load_for_executorch_from_buffer(
    executorch_program.buffer
)

model_output = executorch_module.run_method(
    "forward", tuple(inputs)
)

print(model_output)

…le used for Edge export (#9938)

Summary:
## Context

Addresses this [release
blocker](https://github.com/orgs/pytorch/projects/99/views/1?pane=issue&itemId=104088363&issue=pytorch%7Cpytorch%7C150207)
issue. Some models cannot export because they use `linalg_vector_norm`
which is not currently an ATen operator.

I initially tried adding the op to the core decomp table, but the decomp
is not passing pytorch correctness tests. Please see
pytorch/pytorch#150241 for more details.

## Changes

Since we currently cannot include the op in PyTorch's decomp table,
instead we can insert the op into the edge decomp table directly.

This PR is a simple change to add `linalg_vector_norm` directly to the
edge decomp table.

Test Plan:
Tested exporting and running a model with the `linalg_vector_norm` op
via the following script.

```
import torch
from executorch.exir import to_edge_transform_and_lower, EdgeCompileConfig
from torch.export import Dim, export

from executorch.extension.pybindings.portable_lib import (  # @Manual
    _load_for_executorch_from_buffer,
)

class Model(torch.nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self, x):
        return torch.linalg.vector_norm(x, 2)

model = Model()
inputs = (torch.randn(1,1,16,16),)
dynamic_shapes = {
    "x": {
        2: Dim("h", min=16, max=1024),
        3: Dim("w", min=16, max=1024),
    }
}

exported_program = export(model, inputs, dynamic_shapes=dynamic_shapes)
executorch_program = to_edge_transform_and_lower(
    exported_program,
    compile_config=EdgeCompileConfig(_check_ir_validity=False),
).to_executorch()

executorch_module = _load_for_executorch_from_buffer(
    executorch_program.buffer
)

model_output = executorch_module.run_method(
    "forward", tuple(inputs)
)

print(model_output)
```

(cherry picked from commit c2e3e17)
Copy link

pytorch-bot bot commented Apr 9, 2025

🔗 Helpful Links

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

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

❌ 3 New Failures

As of commit 151d6da with merge base 771588a (image):

NEW FAILURES - The following jobs have failed:

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

@facebook-github-bot facebook-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 Apr 9, 2025
@metascroy
Copy link
Contributor

@SS-JIA can you have a look at the failing test?

@SS-JIA
Copy link
Contributor

SS-JIA commented Apr 9, 2025

Failure is legit. Will have to revert original PR and reland.

@SS-JIA
Copy link
Contributor

SS-JIA commented Apr 10, 2025

@metascroy I ended up adding expected failures the failing tests on main with #10043, see the PR for more analysis.

Lmk how you want to proceed. We can land the two cherry picks separately, or I can manually create a cherry pick with both changes.

@SS-JIA
Copy link
Contributor

SS-JIA commented Apr 10, 2025

To clarify, this change only causes one of the failures:

The other two seems to be transient (failed correctness tests that exceed error tolerance) and are most ilkely not related to my change:

@metascroy metascroy merged commit 38e8d59 into release/0.6 Apr 10, 2025
160 of 163 checks passed
@metascroy metascroy deleted the cherry-pick-9938-by-pytorch_bot_bot_ branch April 10, 2025 22:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ciflow/trunk CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants