Fix tracking of tracing scopes during ONNX pass#4524
Merged
ezyang merged 4 commits intopytorch:masterfrom Jan 8, 2018
Merged
Conversation
Collaborator
ezyang
approved these changes
Jan 7, 2018
Contributor
ezyang
left a comment
There was a problem hiding this comment.
This is a good way to fix the bug, I like it! If I had perhaps one minor suggestion, it would be to use a ResourceGuard to implement this like setStageTemporary, so that we get something exception state.
Contributor
Author
|
Good point! I just added |
Contributor
|
One more thing; you should add a test for the bug you're fixing ;) |
Contributor
Author
|
Right, done :-) |
lanpa
reviewed
Jan 8, 2018
|
|
||
| class Net(nn.Module): | ||
|
|
||
| def __init__(self, num_classes=1000): |
This comment was marked as off-topic.
This comment was marked as off-topic.
Sorry, something went wrong.
ezyang
reviewed
Jan 8, 2018
| trace, z = torch.jit.trace(f, (x, y), nderivs=0) | ||
| self.assertExpectedTrace(trace) | ||
|
|
||
| class Net(nn.Module): |
This comment was marked as off-topic.
This comment was marked as off-topic.
Sorry, something went wrong.
ezyang
reviewed
Jan 8, 2018
|
|
||
| self.assertTrue(nodes[0].scopeName() == 'Net/Sequential[features]/Conv2d[0]') | ||
| self.assertTrue(nodes[1].scopeName() == 'Net/Sequential[features]/ReLU[1]') | ||
| self.assertTrue(nodes[2].scopeName() == 'Net/Sequential[features]/MaxPool2d[2]') |
This comment was marked as off-topic.
This comment was marked as off-topic.
Sorry, something went wrong.
Contributor
|
I intend to merge this when the build is green. |
lantiga
added a commit
to lantiga/pytorch
that referenced
this pull request
Feb 8, 2018
* Fix tracking of tracing scopes during ONNX pass * Use ResourceGuard to manage setting a temporary current scope in Graph * Add tests for ONNX pass scopes * Remove unused num_classes argument
soumith
pushed a commit
that referenced
this pull request
Feb 9, 2018
* Introduce scopes during tracing (#3016) * Fix segfault during ONNX export * Further fix to tracing scope (#4558) * Set missing temporary scope in callPySymbolicMethod * Use expected traces in all scope tests * Fix tracking of tracing scopes during ONNX pass (#4524) * Fix tracking of tracing scopes during ONNX pass * Use ResourceGuard to manage setting a temporary current scope in Graph * Add tests for ONNX pass scopes * Remove unused num_classes argument * Expose node scopeName to python (#4200) * Inherit JIT scopes when cloning only when it's correct It's correct only when the new graph owns the same scope tree as the original one. We can end up with dangling pointers otherwise. * Fixes after cherry-picking, still one test to go * Fix for last failing test after scope cherry-pick * Fix linting issue
laurentdupin
pushed a commit
to laurentdupin/pytorch
that referenced
this pull request
Apr 24, 2026
* Fix tracking of tracing scopes during ONNX pass * Use ResourceGuard to manage setting a temporary current scope in Graph * Add tests for ONNX pass scopes * Remove unused num_classes argument
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR addresses #4495
During the ONNX pass, the strategy for preserving correct scopes in the new symbolic nodes was to copy the scope from the original nodes to the outputs. This lead to two issues:
log_softmaxissue in Incorrect scoped tracing result #4495)_forwardsymbolic functions simply returning their inputs) were effectively returning the output of the previous op, so copying the scope to those outputs ended up overwriting the scope of the previous op.This PR introduces a
set_current_scopemethod inGraph, which first checks that the scope trie node being set as current belongs to the scope trie of the Graph, and then sets it as current.We use this mechanism to set the current scope of the symbolic graph (which already inherited the scope trie of the previous graph) before calling the symbolic functions, so all nodes created within those functions (outputs or intermediate) will get the same scope of the corresponding non-symbolic node.
Also, if no nodes are created (like in the short-circuited functions), no scopes are set, thus preserving the scope of the node preceding a short-circuited function (i.e.
Convin #4495).