pytorch / pytorch/executorch

CRNN model decomposition Error with ARM Ethos-U backend

Open
#12,270 4 comments 0 reactions 3 assignees View on GitHub

@zingo is already working on this.

Since Jul 8, 2025.

module: arm need-user-input triaged
Dominant language
Python
Stars
5k
Forks
1.2k
Avg merge
2d 10h
Merged PRs (30d)
581

Description

🐛 Describe the bug

I want to convert and run my CRNN model with Resnet backend on ARM FVP 300 but facing errors in lowering method when using either EthosUPartitioner or TOSAPartitioner. Mind that there is no such issue with pure EdgeDialect (no partitioner).

edge = to_edge_transform_and_lower(
    exported_program,
    partitioner=[partitioner],
    compile_config=EdgeCompileConfig(
        _check_ir_validity=False,
    ),
)
Node aten_linear_default_2 with op <EdgeOpOverload: aten.linear.default>: schema = aten::linear(Tensor input, Tensor weight, Tensor? bias=None) -> Tensor was not decomposed or delegated.
This op was registered by the partitioner EthosUPartitioner to not be decomposed.
The following ops: {<OpOverload(op='aten.linear', overload='default')>, <OpOverload(op='aten.eye', overload='default')>, <OpOverload(op='aten.hardsigmoid', overload='default')>, <OpOverload(op='aten.upsample_nearest2d', overload='vec')>, <OpOverload(op='aten.upsample_bilinear2d', overload='vec')>, <OpOverload(op='aten.hardswish', overload='default')>, <OpOverload(op='aten.linspace', overload='default')>} were specified to not be decomposed in forward.

As I am quite new to ExecuTorch can you please explain me or point the right direction for the following questions:

  1. Does the graph in EdgeDialect should be fully delegated or is it possible to have only some ops accelerated by backend? My point is: Is this error a critical one?
  2. I don't see e.g. hardsigmoid to be part of Core ATen operations but I can see that arm backend has some code regarding that function. Can you exaplin why I am seeing an error like above?
  3. What should be the right approach if I encounter similar errors in the futurte? Change architecture, add ops implementation, user passes? I can see that problem is (probably) that one of my Attention layers is nn.Linear without bias so it is converted to torch.ops.aten.linear.default without 3rd argument.

crnn-graph.txt

Thank you folks for your outstanding work.

Versions

[pip3] executorch==0.8.0a0+f858e0d
[pip3] numpy==2.3.1
[pip3] nvidia-cublas-cu12==12.6.4.1
[pip3] nvidia-cuda-cupti-cu12==12.6.80
[pip3] nvidia-cuda-nvrtc-cu12==12.6.77
[pip3] nvidia-cuda-runtime-cu12==12.6.77
[pip3] nvidia-cudnn-cu12==9.5.1.17
[pip3] nvidia-cufft-cu12==11.3.0.4
[pip3] nvidia-curand-cu12==10.3.7.77
[pip3] nvidia-cusolver-cu12==11.7.1.2
[pip3] nvidia-cusparse-cu12==12.5.4.2
[pip3] nvidia-cusparselt-cu12==0.6.3
[pip3] nvidia-nccl-cu12==2.26.2
[pip3] nvidia-nvjitlink-cu12==12.6.85
[pip3] nvidia-nvtx-cu12==12.6.77
[pip3] pytorch_tokenizers==0.1.0
[pip3] torch==2.8.0.dev20250625+cpu
[pip3] torchao==0.12.0+gitbc68b11f
[pip3] torchaudio==2.8.0.dev20250625+cpu
[pip3] torchdata==0.11.0
[pip3] torchsr==1.0.4
[pip3] torchtune==0.6.1
[pip3] torchvision==0.23.0.dev20250625+cpu
[pip3] triton==3.3.1
[conda] Could not collect

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.