-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Hi
I have this problem in backend code
RuntimeError Traceback (most recent call last)
Cell In[4], line 13
8 SDCR.initialize_mesh(adjust_model=False)
10 return SDCR.forward_modeling(nky=15, error=0., only_data=True)
---> 13 hessian_0 = torch.autograd.functional.jacobian(forward, m, vectorize=True)
15 # results_forward = SDCR.forward_modeling(nky=15, error=0., only_data=True)
16 # results_forward = results_forward.sum()
17 # # error = ((torch.tensor(dinit) - results_forward)**2).sum()/dinit.size
18 # # Assume results_forward is a scalar function of some tensor x.
19 # grad = torch.autograd.grad(results_forward, m, create_graph=True)[0]
20 # second_derivative = torch.autograd.grad(grad.sum(), m)[0]
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/autograd/functional.py:755, in jacobian(func, inputs, create_graph, strict, vectorize, strategy)
750 vj[el_idx] = torch.zeros_like(inputs[el_idx]).expand(
751 (sum(output_numels),) + inputs[el_idx].shape
752 )
753 return tuple(vj)
--> 755 jacobians_of_flat_output = vjp(grad_outputs)
757 # Step 3: The returned jacobian is one big tensor per input. In this step,
758 # we split each Tensor by output.
759 jacobian_input_output = []
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/autograd/functional.py:739, in jacobian..vjp(grad_output)
737 def vjp(grad_output):
738 vj = list(
--> 739 _autograd_grad(
740 flat_outputs,
741 inputs,
742 grad_output,
743 create_graph=create_graph,
744 is_grads_batched=True,
745 )
746 )
747 for el_idx, vj_el in enumerate(vj):
748 if vj_el is not None:
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/autograd/functional.py:195, in _autograd_grad(outputs, inputs, grad_outputs, create_graph, retain_graph, is_grads_batched)
193 return (None,) * len(inputs)
194 else:
--> 195 return torch.autograd.grad(
196 new_outputs,
197 inputs,
198 new_grad_outputs,
199 allow_unused=True,
200 create_graph=create_graph,
201 retain_graph=retain_graph,
202 is_grads_batched=is_grads_batched,
203 )
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/autograd/init.py:492, in grad(outputs, inputs, grad_outputs, retain_graph, create_graph, only_inputs, allow_unused, is_grads_batched, materialize_grads)
481 def vjp(gO):
482 return _engine_run_backward(
483 outputs,
484 gO,
(...)
489 accumulate_grad=False,
490 )
--> 492 result = _vmap_internals.vmap(vjp, 0, 0, allow_none_pass_through=True)(
493 grad_outputs
494 )
495 else:
496 result = engine_run_backward(
497 outputs,
498 grad_outputs,
(...)
503 accumulate_grad=False,
504 )
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/_vmap_internals.py:231, in _vmap..wrapped(*args)
227 try:
228 batched_inputs, batch_size = _create_batched_inputs(
229 in_dims, args, vmap_level, func
230 )
--> 231 batched_outputs = func(*batched_inputs)
232 if not allow_none_pass_through:
233 _validate_outputs(batched_outputs, func)
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/autograd/init.py:482, in grad..vjp(gO)
481 def vjp(gO):
--> 482 return _engine_run_backward(
483 outputs,
484 gO,
485 retain_graph,
486 create_graph,
487 inputs,
488 allow_unused,
489 accumulate_grad=False,
490 )
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/autograd/graph.py:825, in _engine_run_backward(t_outputs, *args, **kwargs)
823 unregister_hooks = _register_logging_hooks_on_whole_graph(t_outputs)
824 try:
--> 825 return Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass
826 t_outputs, *args, **kwargs
827 ) # Calls into the C++ engine to run the backward pass
828 finally:
829 if attach_logging_hooks:
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch/autograd/function.py:307, in BackwardCFunction.apply(self, *args)
301 raise RuntimeError(
302 "Implementing both 'backward' and 'vjp' for a custom "
303 "Function is not allowed. You should only implement one "
304 "of them."
305 )
306 user_fn = vjp_fn if vjp_fn is not Function.vjp else backward_fn
--> 307 return user_fn(self, *args)
File ~/anaconda3/envs/test_pytorch_sparse/lib/python3.9/site-packages/torch_sparse_solve.py:60, in Solve.backward(ctx, grad)
57 A, b, x = ctx.saved_tensors
58 from torch_sparse_solve_cpp import solve_backward
---> 60 gradA, gradb = solve_backward(grad, A, b, x)
61 return gradA, gradb
RuntimeError: Cannot access data pointer of Tensor that doesn't have storage