Fix memory leak from unmanaged tfjs resources #5
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.
When using webshap with tfjs-node, the least squares utility function produces a memory leak by not explicitly releasing the tensorflow resources it creates. Wrapping the tensorflow related logic in
tidy()allows tfjs to automatically release resources it detects are not used outside of the function block (the final result tensor still needs to be manually released).Below is a simple node snippet that demonstrates the issue:
Running the above with the current implementation shows memory usage over 4GB after 1000 iterations (also corroborated by Activity Monitory on Mac):
With the change in this PR included, the result becomes:
Based on the tensorflow documentation, I believe this issue would also affect the WebGL backend but I haven't tested.