I'm trying to manually implement one step of gradient descent using PyTorch to better understand how autograd works. Here's the function I'm working with: y = 3x² + 4x + 9 I initialize x with requires_grad=True and run .backward() after computing y. Then I update x in-place using x -= lr * x.grad and try to call .backward() again — but PyTorch throws a RuntimeError about version mismatch due to in-place modification. import torch x = torch.tensor([42.0], requires_grad=True) y = 3 * x ** 2 + 4 * x + 9 y.backward() with torch.no_grad(): x -= 0.1 * x.grad y.backward() # Fails here Error: RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation... I understand that in-place ops can cause issues, but: What exactly is PyTorch tracking here that's being violated? What's the correct way to re-run gradient descent steps manually using autograd? Is there a best practice for updating parameters manually without breaking the graph? Any clarification or example would be appreciated! Thank you so much Continue reading...