Fix torch.jit.ScriptModule.zero_grad.#1478
Merged
alinpahontu2912 merged 4 commits intodotnet:mainfrom Feb 12, 2026
Merged
Conversation
35aa418 to
dc6fc3c
Compare
Member
|
Hey @hiyuh this looks okay to me, can you do two things: merge the latest changes from main and add a line in the releasenotes (make it NuGet Version 0.105.2, altough we might change that), under an API Changes section specifying that you introduced this? |
9c5366c to
05028a3
Compare
Contributor
Author
|
05028a3 to
4f90f14
Compare
Member
|
Hey @hiyuh can you update your branch? |
4f90f14 to
8309f44
Compare
Contributor
|
src/TorchSharp/JIT/ScriptModule.cs
Outdated
| THSJIT_Module_zero_grad(handle, set_to_none); | ||
| CheckForErrors(); | ||
|
|
||
| foreach (var (_, p) in named_parameters()) { |
Member
There was a problem hiding this comment.
could we change it to something like :
Suggested change
| foreach (var (_, p) in named_parameters()) { | |
| if (set_to_none) { | |
| foreach (var (_, p) in named_parameters()) { | |
| using var grad = p.grad; | |
| if (grad is not null) p.grad = null; | |
| } |
to avoid double zeroing ?
Contributor
There was a problem hiding this comment.
- rebased and fixed in 7205640 as you suggested.
- also now use
parametersinstead ofnamed_parametersfor more simplicity.
- also now use
TorchSharp 0.105.0 doesn't have torch.jit.ScriptModule.zero_grad and falls back into torch.nn.Module.zero_grad incorrectly, then terminates silently. Most probably, because JITModule is not compatible to NNModule in LibTorchSharp. And as reported in pytorch/pytorch#27144, libtorch also doesn't have torch::jit::Module::zero_grad. As a workaround, manually loop over the parameters and zero them out like optimizer does.
As suggested by @alinpahontu2912, set to null after THSJIT_Module_zero_grad is simplified. Also, use parameters instead of named_parameters since all names are unused.
8309f44 to
7205640
Compare
alinpahontu2912
approved these changes
Feb 12, 2026
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.
TorchSharp 0.105.0 doesn't have
torch.jit.ScriptModule.zero_gradand falls back intotorch.nn.Module.zero_gradincorrectly, then terminates silently.Most probably, because
JITModuleis not compatible toNNModulein LibTorchSharp.And as reported in pytorch/pytorch#27144, libtorch also doesn't have
torch::jit::Module::zero_grad.As a workaround, manually loop over the parameters and zero them out like optimizer does.
Note;
RELEASENOTES.mdupdate ATM.foreachloop ofScriptModule.zero_gradinsrc/TorchSharp/JIT/ScriptModule.csis actually needed.Module.zero_gradinsrc/TorchSharp/NN/Module.csdoes.