Thank you for replying!
I thought this register_backward_hook function is for visualizing nn package, which can’t be used for just a variable (whose requires_grad is True).
I solved this problem by using register_hook function from this discussion 13.
I implemented like following
def save_grad(name):
    def hook(grad):
        print(name, ":", grad)
    return hook

a = torch.ones((3),requires_grad=True)
b = 3*a
c = b*a
loss = c.sum()
b.register_hook(save_grad('b'))
loss.backward()

I checked NaN using your Nan detection code for each printed grad value.