Hi,
Whenever the output Variable will go out of scope in python, the whole graph will be deleted.
By default, some intermediary buffers are freed even before that to reduce peak memory usage (this is what is disabled when using retain_graph=True). But the graph and all intermediary buffers are only kept alive as long as they are accessible from python (usually from the output Variable), so running the last backward with retain_graph=True will only keep the intermediary buffers alive until they get freed with the rest of the graph when the python Variable goes out of scope. So you don’t need to manually free the graph. If the output Variable does not go out of scope in python, you can call del your_out_variable so that it is deleted (and the graph associated to it will be as well).