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] Change in Pass Context for lookup table calculation #13660

Merged
merged 1 commit into from
Dec 27, 2022

Conversation

ibsidorenko
Copy link
Contributor

Motivation:
It is possible to disable specific passes through the "disabled_pass" parameter in the Pass Context. These "disabled" passes can be optional for one target and mandatory for another one.
Since lookup table for some QNN operations (tanh, round and etc.) is calculated on the host and some of disabled passes can be required for the host, no need to disable these passes. This constant calculation/ evaluation is orthogonal to the compilation process for specific target.

What was changed:
This commit creates its own compilation Pass Context for lookup table
calculation and evaluation (for elemwise QNN ops: tanh, sqrt ...).

@tvm-bot
Copy link
Collaborator

tvm-bot commented Dec 26, 2022

Thanks for contributing to TVM! Please refer to the contributing guidelines https://tvm.apache.org/docs/contribute/ for useful information and tips. Please request code reviews from Reviewers by @-ing them in a comment.

  • No users to tag found in teams: qnn See #10317 for details

Generated by tvm-bot

Motivation:
It is possible to disable specific passes through the "disabled_pass"
parameter in the Pass Context. These "disabled" passes can be optional
for one target and mandatory for another one.
Since lookup table for some QNN operations (tanh, round and etc.) is
calculated on the host and some of disabled passes can be required for
the host, no need to disable these passes. This constant calculation/
evaluation is orthogonal to the compilation process for specific target.

What was changed:
This commit creates its own compilation Pass Context for lookup table
calculation and evaluation (for elemwise QNN ops: tanh, sqrt ...).
@ibsidorenko ibsidorenko changed the title [QNN] Change in Pass Context for lookup table calculation. [QNN] Change in Pass Context for lookup table calculation Dec 26, 2022
@ibsidorenko
Copy link
Contributor Author

@tvm-bot rerun

@ibsidorenko
Copy link
Contributor Author

cc @masahi @AndrewZhaoLuo


If a number of passes are disabled in the current Pass Context, then there is no need to disable
these passes for const expression evaluation as well. That's why we use empty list
"disabled_pass=[]", all other arguments are inherited from the current Pass Context.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean, without disabled_pass=[], the original disabled_pass list in the current context will be ignored during const folding?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I put here disabled_pass=[] to ignore the original disabled_pass list from the current context. Otherwise VM inherits non-empty disabled_pass list and fails.
Note, we call this code only for several qnn ops: tanh, sqrt, erf, exp + some other ops. It does not affect global constant folding.

For clarification, here is my example to illustrate this issue:
I am trying to compile subgraph with qnn.tanh operation for Hexagon target without QNN canonicalization but with QNN legalization (this is acceptable for Hexagon). For qnn.tanh we compose lookup table by means of Virtual Machine and compute it on the host. For most of users/developers host is x86 cpu. But for x86 QNN canonicalization is mandatory pass, otherwise it fails.
Looks like the simplest way to fix this issue is to create new Pass Context and ignore the original disabled_pass list for lookup table calculation and constant evaluation. Other arguments (opt_level, instruments, config ...) I inherit from the current context.

P.S. Corresponding unit test will be added in the next PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see, you do want to enable QNN legalization (which is disabled in the original ctx) here.

@masahi masahi merged commit f83055f into apache:main Dec 27, 2022
fzi-peccia pushed a commit to fzi-peccia/tvm that referenced this pull request Mar 27, 2023
Motivation:
It is possible to disable specific passes through the "disabled_pass"
parameter in the Pass Context. These "disabled" passes can be optional
for one target and mandatory for another one.
Since lookup table for some QNN operations (tanh, round and etc.) is
calculated on the host and some of disabled passes can be required for
the host, no need to disable these passes. This constant calculation/
evaluation is orthogonal to the compilation process for specific target.

What was changed:
This commit creates its own compilation Pass Context for lookup table
calculation and evaluation (for elemwise QNN ops: tanh, sqrt ...).
@ibsidorenko ibsidorenko deleted the qnn-const-expression branch March 29, 2023 06:24
mikeseven pushed a commit to mikeseven/tvm that referenced this pull request Sep 27, 2023
Motivation:
It is possible to disable specific passes through the "disabled_pass"
parameter in the Pass Context. These "disabled" passes can be optional
for one target and mandatory for another one.
Since lookup table for some QNN operations (tanh, round and etc.) is
calculated on the host and some of disabled passes can be required for
the host, no need to disable these passes. This constant calculation/
evaluation is orthogonal to the compilation process for specific target.

What was changed:
This commit creates its own compilation Pass Context for lookup table
calculation and evaluation (for elemwise QNN ops: tanh, sqrt ...).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants