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.clone() loss = value.sum() optimizer.zero_grad() loss.backward() optimizer.step() # Second iteration fails value = values.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!
- python version 3.7.7