You are detaching the tensor(s) from the computation graph by creating new Variables:
p = torch.autograd.Variable(tPred[0].data, requires_grad=True)
...

Instead of recreating these tensors, you should directly calculate the loss.
Also, Variables are deprecated since PyTorch 0.4so you can use tensors in newer versions. The usage of the.data` attribute is also not recommended, as it might have unwanted side effects.