This seems expected since all add does is propagate the same gradients as-is to both of its inputs:
import torch

b1 = torch.randn(5, requires_grad=True)
b2 = torch.randn(5, requires_grad=True)

out = b1 + b2
out.retain_grad()

out.sum().backward()
print("out: ", out.grad)
print("b1: ", b1.grad)
print("b2: ", b2.grad)
# out:  tensor([1., 1., 1., 1., 1.])
# b1:  tensor([1., 1., 1., 1., 1.])
# b2:  tensor([1., 1., 1., 1., 1.])