Hello.
While working with a project involving an RNN, I’ve ran into an error of:
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation
Here is a minimum working example to reproduce the error:
# Setup
import torch
torch.autograd.set_detect_anomaly(True)

# Initialization
input_dim = 8
model = torch.nn.Linear(input_dim, 1)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
values = list()
forward_input = torch.rand(1, input_dim)

# Forward
n_iters = 4
for i in range(n_iters):
    value = model(forward_input)  
    values.append(value)

# First iteration works
value = values[0].clone()
loss = value.sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()

# Second iteration fails
value = values[1].clone()
loss = value.sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()

(PS: I know this is a silly example, but it was the simplest way I could reproduce the error  )
Why does this happen? Any help would be GREATLY appreciated. Here is the full traceback:
RuntimeError                              Traceback (most recent call last)
<ipython-input-15-70245d07c321> in <module>
     28 loss = value.sum()
     29 optimizer.zero_grad()
---> 30 loss.backward()
     31 optimizer.step()

~/projects/summarization/summarization-project/lib/python3.7/site-packages/torch/tensor.py in backward(self, gradient, retain_graph, create_graph)
    196                 products. Defaults to ``False``.
    197         """
--> 198         torch.autograd.backward(self, gradient, retain_graph, create_graph)
    199 
    200     def register_hook(self, hook):

~/projects/summarization/summarization-project/lib/python3.7/site-packages/torch/autograd/__init__.py in backward(tensors, grad_tensors, retain_graph, create_graph, grad_variables)
     98     Variable._execution_engine.run_backward(
     99         tensors, grad_tensors, retain_graph, create_graph,
--> 100         allow_unreachable=True)  # allow_unreachable flag
    101 
    102 

RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.FloatTensor [8, 1]], which is output 0 of TBackward, is at version 2; expected version 1 instead. Hint: the backtrace further above shows the operation that failed to compute its gradient. The variable in question was changed in there or anywhere later. Good luck!

Environment details:

torch==1.5.1
torchvision==0.6.1
python version 3.7.7