[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13
, '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

[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13
, '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

[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13
, '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

[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13
, '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

[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13
, '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

[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13
, '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

[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13
, '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

[TIR] Add structural error printing for TensorIR - #9306

Merged
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error
Oct 23, 2021
Merged

[TIR] Add structural error printing for TensorIR#9306
Hzfengsy merged 16 commits into
apache:mainfrom
shingjan:tir_structural_error

Conversation

@shingjan

@shingjanshingjan commented Oct 18, 2021

Copy link
Copy Markdown

This PR intends to improve the error rendering by annotating regions of interest in TIR like synr following PR #8121.
Previously when there is an error:

The IR is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
with tir.block([128, 128, 128, 128], "B") as [vi, vj, vk, vl]:
tir.bind(vi, i)
tir.bind(vj, j)
tir.bind(vk, k)
tir.bind(vl, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)
Regions of interest:
tir.Block#0
block B(iter_var(vi, range(min=0, ext=128)), iter_var(vj, range(min=0, ext=128)), iter_var(vk, range(min=0, ext=128)), iter_var(vl, range(min=0, ext=128))) {
reads([A[vi, vj, vk, vl]])
writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = (A[vi, vj, vk, vl]*2f)
}

With this PR, the error will be rendered like below:

The IR with diagnostic is:
@tvm.script.ir_module
class Module:
@tir.prim_func
def main(a: tir.handle, b: tir.handle) -> None:
A = tir.match_buffer(a, [128, 128, 128, 128], dtype="float32")
B = tir.match_buffer(b, [128, 128, 128, 128], dtype="float32")
# body
# with tir.block("root")
for i, j, k, l in tir.grid(128, 128, 128, 8):
tir.Block#0
with tir.block("B"):
^^^^^^^^^^^^^^^^^^^^
vi, vj, vk = tir.axis.remap("SSS", [i, j, k])
vl = tir.axis.spatial(128, l * 16)
tir.reads([A[vi, vj, vk, vl]])
tir.writes([B[vi, vj, vk, vl]])
B[vi, vj, vk, vl] = A[vi, vj, vk, vl] * tir.float32(2)

cc: @vinx13@junrushao1994

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for the PR. I left some comments

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
@junrushao

Copy link
Copy Markdown
Member

Hey thanks for the PR! It's a pretty nice POC, and I would like to deliberate on the format :-)

  • Shall we update the syntax in the description to reflect the latest change on mainline? Also please add a few unittests
  • If the error location is at a particular loop, let's avoid fusing it with other loops with tir.grid
  • Also we should consider printing the names of the error locations under the annotations, so that the error message could be clearly referring to these blocks/loops

@junrushao

junrushao commented Oct 18, 2021

Copy link
Copy Markdown
Member

Hmm I just went through the code, but figured that the snippet in the description isn't the actual output of the PR (Sorry I was wrong)? Shall we update the description with a real-world example?

We have plenty of these errors in tests/python/unittest/test_tir_schedule_*.py, guarded by:

withpytest.raises(tvm.tir.ScheduleError, ...):`
...

Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

left some comments

@Hzfengsy

Copy link
Copy Markdown
Member

Looks good to me. One thing I'm not sure is that will it compatible with the new block syntax.

Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@tqchen

Copy link
Copy Markdown
Member

@shingjan you may need to update the test cases and code now that the new block syntax is introduced

Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch 2 times, most recently from 5191293 to 6e0e9c4CompareOctober 21, 2021 23:00
@shingjan
shingjan requested a review from vinx13October 21, 2021 23:02
@shingjan

Copy link
Copy Markdown
Author

Printing nested loop is fixed as well as some comments addressed. Should be good for another good before we merge this in. @vinx13@junrushao1994

@vinx13vinx13 self-assigned this Oct 21, 2021
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:25
Comment threadtests/python/unittest/test_tir_schedule_reorder.py Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 00:43
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjan requested a review from vinx13October 22, 2021 01:02

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

otherwise LGTM

Comment threadtests/python/unittest/test_tvmscript_error_report.py Outdated
Comment threadsrc/tir/schedule/error.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
Comment threadsrc/printer/tvmscript_printer.cc Outdated
@shingjan
shingjanforce-pushed the tir_structural_error branch from ac89341 to 6388858CompareOctober 22, 2021 18:24

@vinx13vinx13 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, @Hzfengsy would you like to take a second look?

@HzfengsyHzfengsy left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM

@Hzfengsy
Hzfengsy merged commit e9a66a1 into apache:mainOct 23, 2021
@shingjan
shingjan deleted the tir_structural_error branch October 26, 2021 00:37
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 7, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
ylc pushed a commit to ylc/tvm that referenced this pull request Jan 13, 2022
* add structural error printing
* remove old code
* address comments
* address comments
* add test
* fix test case
* fix nested loop
* rm print
* change simple loop cond
* address comments
* fix test
* address comments
* remove msg
* add override
* address comments
* address comments
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.

5 participants

@shingjan@junrushao@Hzfengsy@tqchen@vinx13