Hi,
I tried to reproduce with the following script but it works fine.
Do you have a small code sample that shows the problem?
import torch


a = torch.rand(100, 100, requires_grad=True)
b = torch.rand(100, 100, requires_grad=True)

c = torch.cat([a, b], 1)
c.retain_grad()

(c+1).backward(torch.rand(c.size()))

print((a.grad - c.grad.narrow(1, 0, 100)).abs().max())
print((b.grad - c.grad.narrow(1, 100, 100)).abs().max())