[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm
, '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

[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm
, '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

[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm
, '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

[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm
, '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

[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm
, '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

[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm
, '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

[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm
, '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

[ONNX] Handle multiple imports - #13065

Merged
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces
Oct 17, 2022
Merged

[ONNX] Handle multiple imports#13065
jwfromm merged 2 commits into
apache:mainfrom
AndrewZhaoLuo:aluo/onnx-fix-namespaces

Conversation

@AndrewZhaoLuo

Copy link
Copy Markdown
Contributor

Ref: https://github.com/onnx/onnx/blob/main/docs/IR.md

Right now we take the first imported op set as the operator version for rest of conversion. This assumes the first imported op set is the default (ai.onnx), however this is not necessarily the case.

In the future, we need to support multiple operator sets well (see #10950). For now, we just try to find the default (ai.onnx) namespace and use that for the opset version.

@tvm-bot

tvm-bot commented Oct 13, 2022

Copy link
Copy Markdown
Collaborator

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

  • No users to tag found in teams: onnxSee #10317 for details
  • Built docs for commit e4a0c87 can be found here.

Generated by tvm-bot

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

cc @sfvaroglu

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@jwfromm

@jwfrommjwfromm 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.

This is a good starting point, thanks @AndrewZhaoLuo!

Comment threadpython/tvm/relay/frontend/onnx.py Outdated
for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.name) in ["ai.onnx", ""]:

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.

I'm not sure if its inconsistent but the models I'm looking at use opset_identifer.domain rather than name. Also, it seems like if there is only one import there is no domain name, just the version and its assumed the domain is ai.onnx. This is at least the case for resnet50-v1-7 which is used in the tests.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

It should be domain yeah, fixed.

for opset_identifier in model.opset_import:
# As per https://github.com/onnx/onnx/blob/main/docs/IR.md
# All operator sets except the default one must specify the operator version
if str(opset_identifier.domain) in ["ai.onnx", ""]:

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.

I think this will still run into some issues. When there is only one opset_import, it doesnt have a domain name, just a version. We'll need to add a special case when the length of model.opset_import is 1 and just pull out the version directly.

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.

Do you mean opset_identifier won't have the attribute "domain", or that it will return the empty string?

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.

It could be an earlier ONNX spec which we do not support.

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.

It returns an empty string despite having a version that needs to be respected. If we dont handle this case we'll fail the import_model test.

@AndrewZhaoLuoAndrewZhaoLuoOct 14, 2022

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.

Hmm in the code, it should be fine with the "" (we check if the string is "" or ai.onnx), I'll investigate this test.

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.

The test fail was due to known error #13067.

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

@tvm-bot rerun

@AndrewZhaoLuo

Copy link
Copy Markdown
ContributorAuthor

PTAL @jwfromm

@AndrewZhaoLuo
AndrewZhaoLuoforce-pushed the aluo/onnx-fix-namespaces branch from 1e29caa to e4a0c87CompareOctober 14, 2022 22:21
@jwfromm

Copy link
Copy Markdown
Contributor

LGTM, thank you @AndrewZhaoLuo

@jwfromm
jwfromm merged commit c14f5e1 into apache:mainOct 17, 2022
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 10, 2022
* onnx get right import
* fixins
xinetzone pushed a commit to daobook/tvm that referenced this pull request Nov 25, 2022
* onnx get right import
* fixins
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.

3 participants

@AndrewZhaoLuo@tvm-bot@jwfromm