[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[microNPU] Allow constants to be given as input to an operator - #9515

Merged
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants
Nov 17, 2021
Merged

[microNPU] Allow constants to be given as input to an operator#9515
manupak merged 2 commits into
apache:mainfrom
lhutton1:dont-compress-input-constants

Conversation

@lhutton1

Copy link
Copy Markdown
Contributor

Currently the expectation is that all constants need to be encoded, however, this is not always the case for scalar inputs. This PR ensures that constants that don't need encoding are not treated like encoded constants by the EncodeConstants pass.

cc @mbaret@manupa-arm@ekalda@NicolaLancellotti@dchauhan-arm

Comment threadtests/python/contrib/test_ethosu/test_legalize.py Outdated
Comment threadtests/python/contrib/test_ethosu/test_encode_constants.py Outdated

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks @lhutton1 for the fix! Just some clarifying questions...

Comment on lines +443 to +456
def create_relay_graph():
inp = relay.var("input", shape=ifm_shape, dtype=dtype)
scalar = relay.const(np.ones((1, 1, 1, 1), dtype=dtype), dtype=dtype)
add = relay.qnn.op.add(
inp,
scalar,
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
relay.const(1.0, dtype="float32"),
relay.const(0, dtype="int32"),
)
func = relay.Function(relay.analysis.free_vars(add), add)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Is there a reason we start from Relay there instead of TFLite?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I wasn't sure if there was a way to generate similar relay from TFLite, although admittedly I didn't really check. I'll have a look into it.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah, Relay is also needed due to the uint8 restriction so I'll leave this for now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ok yes, that makes sense!

Comment threadtests/python/contrib/test_ethosu/test_codegen.py Outdated
interpreted as an encoded constant."""

def get_graph():
dtype = "uint8"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why does the constant need to beuint8? (just asking for enlightenment)

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

For now this needs to be uint8 due to https://github.com/apache/tvm/blob/main/python/tvm/relay/backend/contrib/ethosu/tir_to_cs_translator.py#L254. Removing this opens up another can of worms that I'll address in another PR :)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yes, makes sense, thanks for clarifying! :)

Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
@lhutton1
lhutton1force-pushed the dont-compress-input-constants branch from 889bd5f to e1458c5CompareNovember 16, 2021 18:09

@manupakmanupak left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! @ekalda could you take another look ?

@ekaldaekalda left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM! :)

@manupak
manupak merged commit 95ff358 into apache:mainNov 17, 2021
@manupak

Copy link
Copy Markdown
Contributor

Thanks @lhutton1@ekalda

@lhutton1
lhutton1 deleted the dont-compress-input-constants branch November 17, 2021 12:51
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
mehrdadh pushed a commit to mehrdadh/tvm that referenced this pull request Dec 1, 2021
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Dec 22, 2021
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 4, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
yangulei pushed a commit to yangulei/tvm that referenced this pull request Jan 11, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
…e#9515)
* [microNPU] Allow constants to be given as input to an operator
Currently the expectation is that all constants need to be encoded,
however, this is not always the case for scalar inputs. This PR
ensures that constants that don't need encoding are not treated
like encoded constants by the EncodeConstants pass.
Change-Id: I79cf4aa10d01c4ae9ce9cdafb6f21ebb2d028126
* address comments
Change-Id: I67b61a2d2f67de25c47d2ace0e3a22c59ba8ea15
lhutton1 added a commit to lhutton1/tvm that referenced this pull request Jan 17, 2022
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
manupak pushed a commit that referenced this pull request Jan 18, 2022
* [microNPU] Add support for scalar values
PR #9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
yuanfz98 pushed a commit to yuanfz98/tvm that referenced this pull request Jan 24, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
crazydemo pushed a commit to crazydemo/tvm that referenced this pull request Jan 27, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
ylc pushed a commit to ylc/tvm that referenced this pull request Feb 16, 2022
* [microNPU] Add support for scalar values
PR apache#9515 enabled support for scalar constants, but didn't consider the
case of a scalar value where the underlying constant data does not have
a shape i.e. `constant.shape == []`. See the test case for a visual
differece when the scalar value is 1.
Change-Id: Id7a238cb5bf999dd5a8428c097202f9fb940a5f0
* Fix failing test by removing constant
Before this PR scalar constants were handled differently so this test
was able to pass. Now that scalar constants are handled in the same
manner as tensor constants, the test fails since unexpected tir is
produced in the compilation pipeline. Since the relay used in this test
case is not expected to be produced by higher levels of the compiler,
removing this constant for now.
Change-Id: I4ea5155778809041339e6faac05af3f72c3e3ea5
* clean up finding tensor from inputs
Change-Id: Ideccf84f8c9149148ff23e2406229cf637c982a3
Sign up for freeto 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.

4 participants

@lhutton1@manupak@NicolaLancellotti@ekalda