My concerns were not really related to efficiency, but more to code readability, as my code is more complex than a “standard” supervised learning scenario (forward-backward-step-repeat).
I thought that - maybe - it would be possible to use the information stored in grad_fn to repeat the calculations without explicitly calling the original code, but it turned out that - after some careful architectural considerations - rerunning the method did not cause a readability disaster after all, so that’s what I ended up doing 
Thanks for the answer!