Skip to content
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

[QNN EP] Support Conv + Clip/Relu fusion #21537

Merged
merged 22 commits into from
Aug 2, 2024

Conversation

adrianlizarraga
Copy link
Contributor

@adrianlizarraga adrianlizarraga commented Jul 29, 2024

Description

  • Supports quantized Conv + Activation on the HTP backend:
    • Translates DQs -> Conv -> Relu/Clip -> Q into a single QNN Conv operator if the Relu (or Clip) are redundant.

Motivation and Context

Expands support for QDQ models created with tools that do not wrap Relu or Clip with QDQ nodes.

This PR introduces the IQnnNodeGroup class. In the same way that a NodeUnit represents a collection of Nodes, a IQnnNodeGroup can represent one or more NodeUnits that are translated into a QNN operator. QNN EP parses the ONNX graph to create a list of IQnnNodeGroup objects, each representing a single NodeUnit or a fusion of multiple NodeUnits.

@adrianlizarraga adrianlizarraga added the ep:QNN issues related to QNN exeution provider label Jul 29, 2024
@adrianlizarraga adrianlizarraga marked this pull request as ready for review July 29, 2024 08:22
@adrianlizarraga adrianlizarraga merged commit 0e708de into main Aug 2, 2024
98 checks passed
@adrianlizarraga adrianlizarraga deleted the adrianl/qnn-conv-relu-clip branch August 2, 2024 18:02
@jywu-msft jywu-msft added the release:1.19.0 Cherry pick to ORT 1.19 label Aug 2, 2024
@adrianlizarraga
Copy link
Contributor Author

Hi @MaanavD, @sophies927, and @prathikr. We would also like to cherry-pick this PR. We can provide more context.

prathikr pushed a commit that referenced this pull request Aug 2, 2024
### Description
- Supports quantized Conv + Activation on the HTP backend:
- Translates `DQs -> Conv -> Relu/Clip -> Q` into a single QNN Conv
operator if the Relu (or Clip) are redundant.



### Motivation and Context
Expands support for QDQ models created with tools that do not wrap Relu
or Clip with QDQ nodes.

This PR introduces the `IQnnNodeGroup` class. In the same way that a
`NodeUnit` represents a collection of `Nodes`, a `IQnnNodeGroup` can
represent one or more `NodeUnits` that are translated into a QNN
operator. QNN EP parses the ONNX graph to create a list of
`IQnnNodeGroup` objects, each representing a single `NodeUnit` or a
fusion of multiple `NodeUnits`.
prathikr pushed a commit that referenced this pull request Aug 3, 2024
### Description
- Supports quantized Conv + Activation on the HTP backend:
- Translates `DQs -> Conv -> Relu/Clip -> Q` into a single QNN Conv
operator if the Relu (or Clip) are redundant.



### Motivation and Context
Expands support for QDQ models created with tools that do not wrap Relu
or Clip with QDQ nodes.

This PR introduces the `IQnnNodeGroup` class. In the same way that a
`NodeUnit` represents a collection of `Nodes`, a `IQnnNodeGroup` can
represent one or more `NodeUnits` that are translated into a QNN
operator. QNN EP parses the ONNX graph to create a list of
`IQnnNodeGroup` objects, each representing a single `NodeUnit` or a
fusion of multiple `NodeUnits`.
@prathikr prathikr added the cherry-picked Cherry-picked for a cherrypicks branch label Aug 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cherry-picked Cherry-picked for a cherrypicks branch ep:QNN issues related to QNN exeution provider release:1.19.0 Cherry pick to ORT 1.19
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants